|
Проблема с приемом данных USART в ATtiny2313 |
|
|
|
Oct 29 2008, 15:22
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(SysRq @ Oct 29 2008, 12:52)  Цитирую datasheet: "If Parity Check is not enabled the UPE bit will always be read zero." Бит чётности читается 0, всё правильно, но если он физически передаётся другой стороной, то МК принимает его за стоп-бит, поскольку его инициализировали не принимать бит чётности. На последовательности бит отлично видно, бит чётности передаётся, START-B0-B1-B2-B3-B4-B5-B6-B7-P-STOP1-STOP2, а МК думает, что уже идёт первый бит STOP1.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 29 2008, 15:40
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(=GM= @ Oct 29 2008, 18:22)  Бит чётности читается 0, всё правильно, но если он физически передаётся другой стороной, то МК принимает его за стоп-бит, поскольку его инициализировали не принимать бит чётности. Вы правы, я прочитал начало фразы, а основную вашу мысль почему-то не воспринял. Решил, что автор все же занает что и как он передает. И написал о своем :)
|
|
|
|
|
Oct 30 2008, 10:01
|

Ambidexter
    
Группа: Свой
Сообщений: 1 589
Регистрация: 22-06-06
Из: Oxford, UK
Пользователь №: 18 282

|
Цитата(Прораб счастья @ Oct 30 2008, 07:30)  Посылка у меня без паритета. После проверки оказалось, что ошибка - FRAMING_ERROR Если посылка без паритета, зачем тогда вы этот паритет проверяете? Вы уверены, что правильно определяете ошибку приёма? ПМСМ, лучше вместо красного фрагмента в вашей программе, который даёт солидную задержку в прерывании, Цитата(Прораб счастья @ Oct 29 2008, 10:11)  if ((status & (FRAMING_ERROR | PARITY_ERROR | DATA_OVERRUN))==0) { PORTB.7=1; delay_ms(100); PORTB.7=0; rx_buffer[rx_wr_index]=data; }; поставить одну инструкцию PINB.7=1;, которая просто инвертирует пин Б7 при приёме текущего байта. Если же у вас всё же появляется ошибка FE, то проверяйте скорости передачи приёма прямым измереним. Для начала можно соединить выход передатчика с входом приёмника.
--------------------
Делай сразу хорошо, плохо само получится
|
|
|
|
|
Oct 30 2008, 10:13
|
Участник

Группа: Участник
Сообщений: 21
Регистрация: 2-12-04
Пользователь №: 1 296

|
GM может так? PORTB.7=~PINB.7
Попробуй включить передатчик тиньки (и драйвер 485 на передачу), постоянно что-нибудь передавать и смотреть компутером. Т.о. будет ясно правильно ли выставлена скорость.
|
|
|
|
|
Nov 1 2008, 18:28
|

Чайник, 1 литр
   
Группа: Свой
Сообщений: 655
Регистрация: 17-05-06
Из: Moscow
Пользователь №: 17 168

|
Цитата(IVANS @ Oct 30 2008, 13:13)  GM может так? PORTB.7=~PINB.7 Восстанавливаю (исчезла из-за падения форума) весьма полезную информацию от =GM= касательно особенностей упоминаемого в теме МК: "Writing a logic one to PINxn toggles the value of PORTxn, independent on the value of DDRxn."
Сообщение отредактировал SysRq - Nov 1 2008, 18:30
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|