Страница 1 из 1

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

Добавлено: Вс фев 24, 2008 03:35:47
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 у тиньки?

Добавлено: Ср фев 27, 2008 06:49:53
Mamonth
А если отрезать лишнее?

Добавлено: Ср фев 27, 2008 19:37:40
KT315B
Всмысле? Что лишнее? MAX487? При прямом соединении обоих МК по UART - тоже самое получается :(

Добавлено: Ср фев 27, 2008 19:58:34
__Alexander
побробуй CHAR поставить unsigned
CHAR для авр это 8 бит. т.е. читать тоже надо только байт, и все будет пучком.

Добавлено: Ср фев 27, 2008 21:53:56
KT315B
Всмысле функцию обозначить как unsigned char или в настройках компилятора задать "char is unsigned" (что, кстати, задано...)

Добавлено: Ср фев 27, 2008 22:58:49
kamikadze
Как вариант - и то и то )))

Добавлено: Ср фев 27, 2008 23:30:21
KT315B
Разорбрался.. Проблема была в различии архитектур UART в 90s2313 и tiny2313. Переконфигурировал проект получателя и все забегало, спасибо всем ответившим!