roboforum.ru

Технический форум по робототехнике.

USART помогите разобраться

Раздел создан специально для людей которым интересна робототехника, но в силу разных причин они не знают с чего начать.
Задавайте ваши вопросы, какими бы простыми они не казались, постоянные посетители форума постараются ответить на них по мере своих сил.
Робот своими руками. Самодельный робот.

USART помогите разобраться

Сообщение eugmai86 » 24 мар 2011, 22:58

Доброго времени суток.
Пытаюсь передать циферки с ПК (программа Terminal 1.91) на МК (Tiny2313) по USART.
Воспользовался мастером начального кода CVAVR. Так как передавать обратно ничего не надо настроил только приемник.
Включил прерывания и настроил скорость передачи 1200 бод.
Сделал шнурок на макс232.(проверил шнурок рабочий)
Вопрос в том откуда правильно считывать данные пришедшие на RXD?
Согласно даташита, кучи статей и курса AVR123 это регистр данных UDR.
Т.е. если я правильно понял, достаточно инициализировать УСАРТ и

switch (UDR)
{
case 1: PORTB.3=1; break;
case 2: PORTB.4=1; break;
case 3: PORTB.5=1; break;
case 4: PORTB.6=1; break;
}

Если я отправлю символ "1" с ПК то PORTB.3=1; Однако такое у меня не заработало.

Попробовал включить прерывания RX и использовать ф-цию getchar();

char getchar(void)
{
char data;
while (rx_counter==0);
data=rx_buffer[rx_rd_index];
if (++rx_rd_index == RX_BUFFER_SIZE) rx_rd_index=0;
#asm("cli")
--rx_counter;
#asm("sei")
return data;
}
unsigned char n;
n = getchar();
switch (n)
{
case 1: PORTB.3=1; break;
...
case 4: PORTB.6=1; break;
}
Тоже не работает. Подскажите кому не лень плиз.
Аватара пользователя
eugmai86
 
Сообщения: 22
Зарегистрирован: 10 фев 2011, 22:35

Re: USART помогите разобраться

Сообщение yak-40 » 24 мар 2011, 23:09

eugmai86 писал(а):Если я отправлю символ "1" с ПК то PORTB.3=1; Однако такое у меня не заработало.

И правильно не заработало. С ПК через терминал идёт не цифра "1", а её код 0х31.
http://netcode.ru/cpp/?lang=&katID=2&skatID=20&artID=234
- Этот человек - не человек! это робот!
- Как? уже делают?!
- Делают!!!
Аватара пользователя
yak-40
 
Сообщения: 3037
Зарегистрирован: 23 окт 2007, 22:03
Откуда: Москва
прог. языки: С
ФИО: Евгений Яковец

Re: USART помогите разобраться

Сообщение avr123.nm.ru » 24 мар 2011, 23:24

eugmai86 писал(а):Воспользовался мастером начального кода CVAVR. Так как передавать обратно ничего не надо настроил только приемник.
Включил прерывания и настроил скорость передачи 1200 бод.


Смотрите задачу 5 курса - http://www.proavr.narod.ru/z5.htm , и настройте буфер приема. Советую отлаживать в PROTEUS.

Примеры приема команд от ПК есть в задаче 13 про управление серво контроллером с ПК. http://www.proavr.narod.ru/z13.htm
Читайте !
Аватара пользователя
avr123.nm.ru
отсылающий читать курс
 
Сообщения: 14195
Зарегистрирован: 06 ноя 2005, 04:18
Откуда: Москва
Предупреждения: -8

Re: USART помогите разобраться

Сообщение eugmai86 » 25 мар 2011, 00:39

Спасибо, т.е. нужно отправлять 0х31 или 49 я правильно понял?
ТО АВР123 задачу 5 смотрел. спасибо, только протеус мне не очень нравится, проще на макетке налаживать.
Аватара пользователя
eugmai86
 
Сообщения: 22
Зарегистрирован: 10 фев 2011, 22:35

Re: USART помогите разобраться

Сообщение boez » 25 мар 2011, 11:51

С терминала уже отправляется 0x31. В switch нужно писать или case 0x31, или, что более читаемо, case '1'.
boez
 
Сообщения: 1981
Зарегистрирован: 27 авг 2008, 10:45
Откуда: Харьков
прог. языки: С/С++

Re: USART помогите разобраться

Сообщение eugmai86 » 26 мар 2011, 14:24

Все заработало, спасибо
Аватара пользователя
eugmai86
 
Сообщения: 22
Зарегистрирован: 10 фев 2011, 22:35


Вернуться в Новичкам или основы основ роботостроения.

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21