|
Кто-нибудь пробовал реализовать полудуплекс (RS485) на ATmega161?
Имеется прибор реализованный на ATmega103. Повторяю на ATmega161 и что я вижу ...
Кусок кода, прерывания запрещены
PORTB |= sDE1; //transmite Archivater - PC В итоге получаем переключение линии на прием до того как последние данные ушли, смотрю терминалкой - последних двух символов нет, а затем и осцилом!!! Данные идут а линия уже переключилась!!! Хотя в DataSheet на ATmega161 (doc1228.pdf стр.73) сказано что TXC1 установится только после того как данные из сдвигового регистра ушли и регистр UDR1 пуст, т.е. нет более данных для передачи. Этот режим специально используется для полудуплексного режима обмена. В errata тишина. Самое интересное, рядом лежит прибор на ATmega103 где все тип-топ. Временно использую задержку перед переключением линии на прием, но у прибора программируются скорости обмена и делать выбор задержки от скорости :( Кто-нибудь встречался с такими особенностями ATmega161.
E-mail:
info@telesys.ru
delay_ms(5);
for(i=0;i<=len;i++) putchar(str[i]);
while (!(UCSR1A & (1<
>> delay_ms(5);
PORTB &= ~sDE1; //recive Archivater - PC
Ответы