attiny2313: странное поведение USART

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Делаю сеть rs-485 и напоролся на такой странный глюк (пока только в Протеусе, но в железе тоже не работает как надо)... Есть две штуки ATTINY2313 соединенных по USART с помощью MAX487. Есть две такие функции:

Код: Выделить всё

void rs485_send(char *Data, unsigned char Size)

{                   
//unsigned char PreviousIODev=poutput;
unsigned char SentBytes=0;
//poutput=RS485;
RS485_CTRL=1; // управляем направлением передачи для MAX487  
              
for(SentBytes=0;SentBytes<=Size;SentBytes++)
    {
    putchar(Data[SentBytes]);  
    }
//poutput=PreviousIODev;  

RS485_CTRL=0;          
}
и прием:

Код: Выделить всё

char rs485_recv(char *Data)
{
char BytesReceived=0; 
memset(Data,0,32);
//poutput=RS485;

while(Data[BytesReceived]=getchar()) BytesReceived++;
return BytesReceived;
}
Настройки обоих контроллеров полностью идентичны, однако при посылке с первого байта 0x0A, на втором читаем 0x10A, то есть как будто помимо байта посылается еще девятый бит (естественно отключен при настройке USART на обоих МК). MAX487 в этом не виноват (пробовал и без него, напрямую - тоже самое). Пробовал обнулять бит RXB8 регистра UCSRB. При отладке в Протеусе установлено, что девятый бит появляется именно на приемнике, т.к. с передатчика данные уходят корректно... Совсем я что-то запутался, может быть кто-нибудь уже сталкивался с подобным поведением USART'a у тиньки?
Вложения
usart_bug.GIF
баг при отладке в Протеусе
(24.22 КБ) 618 скачиваний
R2AIV 73!
Контактная информация:
Реклама
Вымогатель припоя
Аватара пользователя
Сообщения: 534
Зарегистрирован: Пн янв 16, 2006 08:00:17
Откуда: Иркутск

Сообщение Mamonth »

А если отрезать лишнее?
Today fine night...
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Всмысле? Что лишнее? MAX487? При прямом соединении обоих МК по UART - тоже самое получается :(
R2AIV 73!
Контактная информация:
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 335
Зарегистрирован: Вт сен 11, 2007 10:27:08
Откуда: Киев

Сообщение __Alexander »

побробуй CHAR поставить unsigned
CHAR для авр это 8 бит. т.е. читать тоже надо только байт, и все будет пучком.
Реклама
Эиком - электронные компоненты и радиодетали
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Всмысле функцию обозначить как unsigned char или в настройках компилятора задать "char is unsigned" (что, кстати, задано...)
R2AIV 73!
Контактная информация:
Реклама
Потрогал лапой паяльник
Аватара пользователя
Сообщения: 391
Зарегистрирован: Пт авг 31, 2007 19:58:52
Откуда: Украина, Сум обл., г. КоНоТоП

Сообщение kamikadze »

Как вариант - и то и то )))
Бригада дежурных телепатов ответит на ваши вопросы
Реклама
Сверлит текстолит когтями
Аватара пользователя
Сообщения: 1269
Зарегистрирован: Пт июл 21, 2006 15:05:19
Откуда: плод воображения

Сообщение KT315B »

Разорбрался.. Проблема была в различии архитектур UART в 90s2313 и tiny2313. Переконфигурировал проект получателя и все забегало, спасибо всем ответившим!
R2AIV 73!
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»