реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> USART, чудеса
amaora
сообщение Jan 24 2009, 11:50
Сообщение #1


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Написал недавно простенький код для работа с USART, почти копия примеров doc2486.pdf. Все конечно заработало, но на следующий день, запускаю программу со стороны ПК - ответа МК (ATmega8) нет. Плата и подключение не трогались. Беру другую прошивку (в стабильности работы которой я ещё сомневался, там используются прерывания и FIFO), со второй попытки она работает. Возвращаю предыдущую прошивку, теперь работает и она, что это? и так уже 4 дня. Один раз ещё помогло вот это wink.gif
$ cat /dev/urandom > /dev/ttyS0
$ make reset (reset через LPT)

код,
CODE

void uart_open( uint8_t scale )
{
UBRRH = 0;
UBRRL = scale;
UCSRA = (1<<1);
UCSRB = (1<<4) | (1<<3);
UCSRC = (1<<7) | (1<<2) | (1<<1);

DDRD |= (1<<1);
DDRD &= ~(1<<0);
PORTD |= (1<0);
}

void uart_send( uint8_t data )
{
while ( ( UCSRA & (1<<5) ) == 0 ) ;
UDR = data;
}

uint8_t uart_recv()
{
while ( ( UCSRA & (1<<7) ) == 0 ) ;
return UDR;
}
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2009, 14:02
Сообщение #2


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Да вы что, сговорились все бит TXC не чистить после приема ?! 
Go to the top of the page
 
+Quote Post
amaora
сообщение Jan 24 2009, 14:48
Сообщение #3


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



А какое он имеет отношение к приёму?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2009, 14:57
Сообщение #4


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(amaora @ Jan 24 2009, 17:48) *
А какое он имеет отношение к приёму?

*)После передачи
Go to the top of the page
 
+Quote Post
amaora
сообщение Jan 24 2009, 15:46
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Цитата(_Pasha @ Jan 24 2009, 17:57) *
*)После передачи

И зачем? мне момент завершения передачи не интересен.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 24 2009, 17:36
Сообщение #6


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Вот не пишИте так:
Код
UCSRB = (1<<4) | (1<<3);
 UCSRC = (1<<7) | (1<<2) | (1<<1);


Чем Вам символические имена не нравятся? Мало того, что нечитабельно, лично я обос**лся с этим ТХС...А как насчет электрической стороны rs232? Может у Вас опторазвязка, фронты не годятся?
Go to the top of the page
 
+Quote Post
amaora
сообщение Jan 24 2009, 19:57
Сообщение #7


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Цитата
Чем Вам символические имена не нравятся?

Да я бы не сказал, что не нравятся, мне безразлично, могу и на символические имена перейти.

Цитата
А как насчет электрической стороны rs232? Может у Вас опторазвязка, фронты не годятся?

MAX232 там.

CODE

...
val = uart_recv();

switch ( val )
{
case 0x00:
break;

case 0x11:
LED( 1, ON );
break;

case 0x12:
LED( 1, OFF );
break;
...


Если слать в порт 0x11 - светодиод не включается, если 'cat /dev/urandom' то иногда включается. Доходит ли оно посмотреть не чем, могу сказать только, что на RXD выводе МК наблюдается среднее значение (между нулём и питанием) во время непрерывной посылки случайных значений.
Go to the top of the page
 
+Quote Post
xelax
сообщение Jan 26 2009, 07:26
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



А источник тактирования меги какой? Не знаю как в 8-х мегах, а в 128-х если работаешь от внутреннего RC генератора, то пока его не откалибруешь контроллер с писишкой общался через раз.
Go to the top of the page
 
+Quote Post
amaora
сообщение Jan 26 2009, 09:51
Сообщение #9


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Цитата
А источник тактирования меги какой?

Кварц, 10МГц, делитель для USART - 10, то есть скорость - 113636 bps, со стороны PC - 115200 bps, раньше всегда работало.
Go to the top of the page
 
+Quote Post
smalcom
сообщение Jan 26 2009, 11:01
Сообщение #10


Профессионал
*****

Группа: Свой
Сообщений: 1 292
Регистрация: 26-06-07
Пользователь №: 28 718



ошибка большая. поставьте 7.3728, 11.0592, 14.7456

Цитата
раньше всегда работало

не аргумент. подобное часто случается если не соблюдаешь правил(имею в виду все работало, а теперь нет... просто повезло)

для проверки попробуйте сверхнизкие скорости для уменьшения ошибки скорости
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2009, 11:23
Сообщение #11


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(smalcom @ Jan 26 2009, 14:01) *
 7.3728, 11.0592, 14.7456

+ 9.216 - такие тоже есть. Выбирайте!
Go to the top of the page
 
+Quote Post
xelax
сообщение Jan 26 2009, 11:31
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 370
Регистрация: 7-11-06
Пользователь №: 22 035



Цитата(amaora @ Jan 26 2009, 12:51) *
Кварц, 10МГц, делитель для USART - 10, то есть скорость - 113636 bps, со стороны PC - 115200 bps, раньше всегда работало.


Писишка терпит(могу ошибаться, давно читал) до 10% разницу в скоростях, а вот со стороны меги всё намного хуже.
Вот у вас и получается, что нет ответа от меги. Можете ради интереса посмотреть биты ошибок в UART меги, наверняка какой-нибудь frame error взводится.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 26 2009, 12:00
Сообщение #13


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(xelax @ Jan 26 2009, 14:31) *
 Можете ради интереса ...

Есть средство - длинный стоп-бит и отказ от непрерывной передачи. Т.е. пауза где-то в пол-посылки облагородит ситуацию
Go to the top of the page
 
+Quote Post
amaora
сообщение Jan 27 2009, 13:27
Сообщение #14


Местный
***

Группа: Участник
Сообщений: 421
Регистрация: 2-01-08
Пользователь №: 33 778



Поставил 12.0 МГц (таких хороших как перечислено выше у меня нет), скорость теперь 115384 bps. frame error действительно взводится, сразу же после инициализации проверяю, и флаг иногда оказывается установленным, пощёлкаю питанием - нет флага. На это ещё как то влияет подключение SPI к LPT, если отключить то frame error не взводится. Может это от того, что питание 4.5в (от USB, через два разветвителя), а на LPT 5.0в, и подключение напрямую, без резисторов?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Jan 27 2009, 13:56
Сообщение #15


;
******

Группа: Участник
Сообщений: 5 646
Регистрация: 1-08-07
Пользователь №: 29 509



Цитата(amaora @ Jan 27 2009, 16:27) *
подключение SPI к LPT, если отключить то frame error не взводится.


Наводится по земле. Смотрите порт не спалите! Или девайс...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 13:26
Рейтинг@Mail.ru


Страница сгенерированна за 0.01453 секунд с 7
ELECTRONIX ©2004-2016