Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADC+USART=bug
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > AVR
Alex Forth
Есть mega8.
Поднял на ней USART - все ок.
Поднял ADC - тоже вроде все ок.
Следующим этапом заганяю ADC в режим шумопонижения и по концу преобразования посылаю данные ч-з USART. При этом ч-з USART посылается мусор.
Что я делаю не так?
GDI
Код здесь бы не помешал.
Телепатически могу предположить что при следующем измерении надо посылать контроллер в режим шумопонижения после того как УСАРТ передаст все данные, а не после того как вы поместили данные в регистр UDR.
Alex Forth
Цитата(GDI @ Jan 22 2007, 12:59) *
Код здесь бы не помешал.
Телепатически могу предположить что при следующем измерении надо посылать контроллер в режим шумопонижения после того как УСАРТ передаст все данные, а не после того как вы поместили данные в регистр UDR.

Кода под руками увы нет. Попробую по памяти.

adc_loop:
ldi r16,0x90
out MCUCR,r16
sleep
rjmp adc_loop


adc_redy:
out UDR,r20
inc r20

wait_send:
sbis UCSRA,UDRE
rjmp wait_send
reti

Ждать в данном случае надо по UDRE или TXC ?
GDI
UDRE - это когда данные помещены в сдвиговый регистр передатчика, но еще не отправлены.
TXC - возникает после фактической отправки данных, если в регистр UDR не помещены новые данные.
Вывод: надо ждать TXC.

Код все же лучше не по-памяти, а то все же не понятно, как инициализация выполнена, как программа выполняется... особенно если учесть мое слабое знание асма авр-овского..smile.gif
MCUCSR не зачем каждый раз инициировать в adc_loop...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.