Технический форум по робототехнике.
Cosworth » 02 июн 2010, 20:06
Всем доброго времени суток. Дело в том, что я решил разобраться с уарт на АВР, накидал простой код, который по принятии на RxD 1 байта выбрасывает его на пару семисегментных индикаторов и отправляет обратно. Так вот, проблема в отладке - что только не тыкал в этой студии, в прерывание не выкидывает. Пробовал собрать схему в протеусе - прерывание происходит, но вместо осмысленных данных, которые я посылаю (через virtual terminal), возвращается какая-то ерунда.
Duhas » 02 июн 2010, 20:56
работа уарта несколько глючна в студии, но при установке флага преревания оно обычно происходило.. а вот читать выставленный руками байт данных - увы...
Cosworth » 02 июн 2010, 21:51
Duhas писал(а):работа уарта несколько глючна в студии, но при установке флага преревания оно обычно происходило.. а вот читать выставленный руками байт данных - увы...
Это печально. Тогда такой вопрос - пытаюсь моделировать в протеусе вот этот код. Должен просто отправлять символ на терминал:
- Код: Выделить всё • Развернуть
.include "C:\Program Files\Atmel\AVR Tools\AvrAssembler2\Appnotes\m164Pdef.inc"
.def tmp =R16
.equ B_HI =0 ;UBRRn=Fosc/(16*BAUD)
.equ B_LO =51 ;Fosc=8MHz, BAUD=9600bps, UBRRn=51
.cseg
.org 0x0000
rjmp Init
Init:
ldi tmp,0b00000010 ;PD0=RxD, PD1=TxD
out DDRD,tmp
ldi tmp,0b00000001
out PORTD,tmp
;USART
ldi tmp,B_LO
sts UBRR0L,tmp
ldi tmp,B_HI
sts UBRR0H,tmp
ldi tmp,(1<<TXEN0)|(1<<RXEN0)
sts UCSR0B,tmp
ldi tmp,0x61
sts UDR0,tmp
Loop:
rjmp Loop
Но вот что приходит:
Вроде все правильно настроил, но почему не работает?
avr123.nm.ru » 02 июн 2010, 22:50
наверно не все правильно настроил.
Cosworth » 02 июн 2010, 23:33
Вроде разобрался. Может кому понадобится: надо поиграться с параметром Baud Rate настроек терминала, эта величина, почему-то, никак не связана со скоростью, устанавливаемой в контроллере.
Radist » 03 июн 2010, 06:48
Такие простые вопросы. Читаем многостраничный даташит (у атмелов они очень подробные), раздел усарт. Там прямо приведены примеры кода, на асме и на си. Когда мне нужно было обмен с ком портом по быстрому сделать - копипастил оттуда и все работало сразу же. Единственное, на что надо обратить внимание - какое число писать в регистр скорости.
ЗЫ. Точно не помню, но даже настраивать порты ввода вывода не надо - разрешение аппаратного усарта все сделает само (если склероз не врет).
avr123.nm.ru » 03 июн 2010, 08:55
Не из той оперы вы пропели похоже. Вникните в предыдущий пост.
Zerops » 16 дек 2011, 13:04
Cosworth писал(а):Вроде разобрался. Может кому понадобится: надо поиграться с параметром Baud Rate настроек терминала, эта величина, почему-то, никак не связана со скоростью, устанавливаемой в контроллере.
А какие именно параметры вы поставили? У меня в протеусе такая же проблема, я что только не ставил, но на виртуальном терминале либо каракули, либо вообще ничего. Один раз даже смайлик пришёл
. Ещё я заметил что если в терминале скорость такая же или выше чем я задал в контроллере, то ничего не приходит, а если ниже, то каракули.