Есть mega8. Поднял на ней USART - все ок. Поднял ADC - тоже вроде все ок. Следующим этапом заганяю ADC в режим шумопонижения и по концу преобразования посылаю данные ч-з USART. При этом ч-з USART посылается мусор. Что я делаю не так?
GDI
Jan 22 2007, 11:59
Код здесь бы не помешал. Телепатически могу предположить что при следующем измерении надо посылать контроллер в режим шумопонижения после того как УСАРТ передаст все данные, а не после того как вы поместили данные в регистр UDR.
Alex Forth
Jan 22 2007, 12:43
Цитата(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
Jan 22 2007, 13:01
UDRE - это когда данные помещены в сдвиговый регистр передатчика, но еще не отправлены. TXC - возникает после фактической отправки данных, если в регистр UDR не помещены новые данные. Вывод: надо ждать TXC.
Код все же лучше не по-памяти, а то все же не понятно, как инициализация выполнена, как программа выполняется... особенно если учесть мое слабое знание асма авр-овского.. MCUCSR не зачем каждый раз инициировать в adc_loop...
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.