0 / 0 / 0
Регистрация: 23.07.2010
Сообщений: 75
|
|
1 | |
ATmega 64 и цап TLC5615. Непонятки в программе.05.01.2011, 14:02. Показов 3263. Ответов 0
Метки нет (Все метки)
Доброго всем времени суток. Не хотел создавать данную тему т.к. мне говорили что данный вопрос обсуждался на
этом форуме не раз, однако читая форум ответ на свой вопрос я не получил. Так что прошу меня извинить за повторяемость тем. И так к делу. Есть цап TLC5615 и кнопка которая подключена к ногу ИНТ0. По нажатию конпки происходит прерывание, в прерывании происходит увеличение переменной потом значение из этой переменной посылается на цап и на выходе цап должно увеличиваться напряжение. Вот код для данного случая: Код
#include<iom64.h> #include<inavr.h> #define SetByt(x,y) (x|=y) #define ClrByt(x,y) (x&=~y) #define TestByt(x,y) (x&y) #define SPI_PORT PORTB #define SS_DAC 0x10 unsykned int a=0; unsykned char HB=0, LB=0; void init_uart(void) { UBRR1L=71; //9600 speed UCSR1C=134; //asymsh mode, one stop bit, 8 bit data UCSR1B=0x08; } void trans_data(unsykned char b) { while(!(UCSR1A&(1<<5))); UDR1=b; } void init_spi(void) { //SPI init DDRB=0x17; //SS out; SCK out; MOSI out; MISO in; 00010111 SetByt(SPI_PORT,SS_DAC); //SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0)); SPCR = ((1<<SPE)|(1<<MSTR)); } void write_to_DAC(unsykned int n) { ClrByt(SPI_PORT,SS_DAC); //first byte SPDR=(unsykned char)(0x000F&(n>>6)); while (!(SPSR &(1<<SPIF))); //second byte SPDR=(unsykned char)(0x00FC&(n<<2)); while (!(SPSR &(1<<SPIF))); SetByt(SPI_PORT,SS_DAC); __delay_cycles(110); } void main(void) { unsykned int a; init_spi(); write_to_DAC(0); init_uart(); DDRD=0; PORTD=0; EICRA=3; EIMSK=1; SREG|=(1 << 7); while(1); } #pragma vector = INT0_vect __interrupt void flashing() { а=a+5; if (a>1023) { a=0; } HB=(unsykned char)(a >> 8); LB=(unsykned char)(a & 0xff); trans_data(0x64); trans_data(HB); trans_data(LB); trans_data(0x65); write_to_DAC(a); } Переписал программу слудующим образом: Код
#include<iom64.h> #include<inavr.h> #define SetByt(x,y) (x|=y) #define ClrByt(x,y) (x&=~y) #define TestByt(x,y) (x&y) #define SPI_PORT PORTB #define SS_DAC 0x10 unsykned int flag=0; //unsykned char HB=0, LB=0; void init_uart(void) { UBRR1L=71; //9600 speed UCSR1C=134; //asymsh mode, one stop bit, 8 bit data UCSR1B=0x08; } void trans_data(unsykned char b) { while(!(UCSR1A&(1<<5))); UDR1=b; } void init_spi(void) { //SPI init DDRB=0x17; //SS out; SCK out; MOSI out; MISO in; 00010111 SetByt(SPI_PORT,SS_DAC); //SPCR = ((1<<SPE)|(1<<MSTR)|(1<<SPR1)|(1<<SPR0)); SPCR = ((1<<SPE)|(1<<MSTR)); } void write_to_DAC(unsykned int n) { ClrByt(SPI_PORT,SS_DAC); //first byte SPDR=(unsykned char)(0x000F&(n>>6)); while (!(SPSR &(1<<SPIF))); //second byte SPDR=(unsykned char)(0x00FC&(n<<2)); while (!(SPSR &(1<<SPIF))); SetByt(SPI_PORT,SS_DAC); __delay_cycles(110); } void main(void) { unsykned int a; init_spi(); write_to_DAC(0); init_uart(); DDRD=0; PORTD=0; EICRA=3; EIMSK=1; SREG|=(1 << 7); a=0; while(1) { if(flag==1) { a=a+5; write_to_DAC(a); flag=0; } } } #pragma vector = INT0_vect __interrupt void flashing() { flag=1; } Объясните пожалуйста почему в первом случае сбрасывается переменная а? Ведь изменение её происходит только вот тут а=a+5; и при вызове функии write_to_DAC(a); фактический параметр передаётся по значению т.е. значение переменной не должно изменяться. Пишу в ИАР оптимизация не включена. Зарание всем ответившим спасибо.
0
|
05.01.2011, 14:02 | |
Ответы с готовыми решениями:
0
АЦП-ЦАП в ATmega или вопросы новичка :) 1с 8.2 Непонятки в программе Непонятки в программе Макетная плата для Atmega 32?atmega 8 ЦАП |
05.01.2011, 14:02 | |
05.01.2011, 14:02 | |
Помогаю со студенческими работами здесь
1
Дешёвый ЦАП Многокональный ЦАП ЦАП И АЦП посоветуйте цап Выбор ЦАП stm32f103c8 цап Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи | |||||
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
|
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
|
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач.
. . .
|
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
|
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
|
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
|
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
|
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
|
Из чего и как собрать свой домашний кинотеатр
bt_guru 21.01.2025
Создание домашнего кинотеатра: от идеи до реализации
В современном мире домашний кинотеатр стал неотъемлемой частью комфортного жилого пространства, предоставляя возможность наслаждаться. . .
|
Ошибки стиральных машин
bt_guru 21.01.2025
Современные стиральные машины представляют собой сложные электронные устройства, оснащенные множеством датчиков и систем контроля. Они способны самостоятельно определять вес загруженного белья,. . .
|
Копирование (маппинг) объектов в JavaScript
bytestream 21.01.2025
В современной разработке программного обеспечения копирование объектов представляет собой фундаментальную операцию, которая требует особого внимания и понимания. Маппинг объектов в JavaScript – это. . .
|
Как работать с Apache Kafka в C# .NET
bytestream 21.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки больших объемов информации в реальном времени. Эта система,. . .
|