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

 
 
 
Closed TopicStart new topic
> Проверка бита четности UART
Andrnow
сообщение Dec 28 2008, 01:15
Сообщение #1





Группа: Новичок
Сообщений: 5
Регистрация: 10-02-07
Пользователь №: 25 228



Пытаюсь изучить микроконтроллеры AVR. Эмулирую в VMLABе.

Проблема такая - не работает проверка по четности при получении байта через UART.
На сколько я понял, при ошибке контроля четности 2 бит регистра ucsrA должен стать в единицу, но этого не происходит. crying.gif Мучаюсь уже пол ночи. В чем может быть ошибка?

Приемо-передатчик конфигурирую так:

ldi temp, 0x00
out ubrr0h, temp
ldi temp, 0x05
out ubrr0l, temp
ldi temp, 0x94
out ucsr0b, temp
ldi temp, 0xa6
out ucsr0c, temp
Go to the top of the page
 
+Quote Post
SSerge
сообщение Dec 28 2008, 02:01
Сообщение #2


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

Группа: Свой
Сообщений: 1 719
Регистрация: 13-09-05
Из: Novosibirsk
Пользователь №: 8 528



А откуда при эмуляции взяться ошибке чётности? Помехи в линии связи вроде-бы не эмулируются smile.gif

Ну и чисто практический совет: не следует придавать такого большого значения контролю по чётности.
Редко когда от него есть польза. В большинстве случаев либо можно совсем никак не контролировать правильность передачи, либо наоборот, необходимо применять гораздо более сильные средства типа контрольных сумм для пакетов или даже кодов, исправляющих ошибки, но и тогда бит четности оказывается лишним.


--------------------
Russia est omnis divisa in partes octo.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 28 2008, 08:28
Сообщение #3


;
******

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



Цитата(SSerge @ Dec 28 2008, 06:01) *
Ну и чисто практический совет: не следует придавать такого большого значения контролю по чётности.
Редко когда от него есть польза.

Низачот за совет sad.gif
Пример - MODBUS ASCII в соединении с контролем четности очень даже применим. Вообще, все, что юзает ASCII, благодаря контролю четности, позволяет упростить подсчет CRC до банального суммирования.
Go to the top of the page
 
+Quote Post
smac
сообщение Dec 28 2008, 10:40
Сообщение #4


Частый гость
**

Группа: Участник
Сообщений: 149
Регистрация: 2-06-08
Из: Москва
Пользователь №: 38 003



Цитата(Andrnow @ Dec 28 2008, 04:15) *
Пытаюсь изучить микроконтроллеры AVR. Эмулирую в VMLABе.
....
Приемо-передатчик конфигурирую так:

...
ldi temp, 0x94
out ucsr0b, temp
ldi temp, 0xa6
out ucsr0c, temp

А зачем вы настроили 9-ти битный символ? может быть в этом проблема? Т. е. у вас сейчас просисходит такая передача(побитно )
старт-бит, 0-бит, 1-бит, ... 7-бит, 8-бит, бит четности, стоп бит, может быть надо 8 битный сивол?
Вообще не плохо-бы контроллер указать, для которого пишете.
И еще, приучайтесь писать так
Код
    ldi temp, (1<<RXIE)|(1<<RXEN)| (1<<UCSZ2)
    out ucsr0b, temp


Сообщение отредактировал smac - Dec 28 2008, 10:41
Go to the top of the page
 
+Quote Post
Maik-vs
сообщение Dec 28 2008, 10:40
Сообщение #5


Местный
***

Группа: Участник
Сообщений: 246
Регистрация: 4-12-06
Пользователь №: 23 101



Цитата(Andrnow @ Dec 28 2008, 04:15) *
Пытаюсь изучить микроконтроллеры AVR. Эмулирую в VMLABе.
... Мучаюсь уже пол ночи.

"ночью надо спать!" smile.gif (с) Жириновский

>> благодаря контролю четности, позволяет упростить подсчет CRC до банального суммирования.
07.gif это как это?
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 28 2008, 11:19
Сообщение #6


;
******

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



Цитата(Maik-vs @ Dec 28 2008, 14:40) *
это как это?

Пример корнями уходящий в: структура строки в intel hex файле smile.gif Вместо ЦРЦ у нас контрольная сумма. Патамушо большего и не нада: при передаче строки с паритетом это как раз работает.
Go to the top of the page
 
+Quote Post
Andrnow
сообщение Dec 28 2008, 14:52
Сообщение #7





Группа: Новичок
Сообщений: 5
Регистрация: 10-02-07
Пользователь №: 25 228



Цитата
А откуда при эмуляции взяться ошибке чётности? Помехи в линии связи вроде-бы не эмулируются

Зато в передатчике можно включить контроль по четности\нечетности, следовательно если этот переключатель поставить неправильно должна появиться ошибка.


Цитата
Ну и чисто практический совет: не следует придавать такого большого значения контролю по чётности.
Редко когда от него есть польза. В большинстве случаев либо можно совсем никак не контролировать правильность передачи

Объясняю. Я сейчас пишу дипломную работу. Ну надо же при защите вставить фразу типа "При передаче данных от компьютера к устройству происходит проверка переданных данных" smile.gif
off: А вообще во всем виноват препод. Я хорошо знаю 51-е, на них бы написал за один вечер... а ему видите ли "микроконтроллер поновее" захотелось. Пришлось AVRки изучать.


Цитата
А зачем вы настроили 9-ти битный символ? может быть в этом проблема? Т. е. у вас сейчас просисходит такая передача(побитно )
старт-бит, 0-бит, 1-бит, ... 7-бит, 8-бит, бит четности, стоп бит, может быть надо 8 битный сивол?

Указывал 8 бит - все равно не работает(



Цитата
Вообще не плохо-бы контроллер указать, для которого пишете.

А это важно? Ну ATMega162




Цитата
И еще, приучайтесь писать так
ldi temp, (1<<RXIE)|(1<<RXEN)| (1<<UCSZ2)
out ucsr0b, temp

Но понимаю, что обозначают такие записи и зачем они нужны.
Go to the top of the page
 
+Quote Post
_Pasha
сообщение Dec 28 2008, 15:26
Сообщение #8


;
******

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



Цитата(Andrnow @ Dec 28 2008, 18:52) *
Указывал 8 бит - все равно не работает(

Смотрите на железяке, а не на отстойном очке "в иной мир" . Vmlab, емнип, такая же горбуха в плане эмуляции, как и AVRstudio. ...ммм в Протеусе можно глянуть.
Цитата
что обозначают такие записи и зачем они нужны

Ню-ню biggrin.gif А потом, когда надо посмотреть, чего там записано в регистр, надо в 10^N раз открывать волшебную даташиту и смотреть, где какие биты сидят.
Go to the top of the page
 
+Quote Post
defunct
сообщение Dec 28 2008, 17:12
Сообщение #9


кекс
******

Группа: Свой
Сообщений: 3 825
Регистрация: 17-12-05
Из: Киев
Пользователь №: 12 326



Цитата(_Pasha @ Dec 28 2008, 17:26) *
Vmlab, емнип, такая же горбуха в плане эмуляции, как и AVRstudio. ...ммм в Протеусе можно глянуть.

А Протеус другая горбуха? biggrin.gif

Цитата(Andrnow @ Dec 28 2008, 16:52) *
А это важно? Ну ATMega162

Конечно важно, расположение регистров и их содержимое от МК к МК могут меняться.
Например, в m162 UCSRxB - шарится в одной ячейке I/O с UBBRxH, а в m128 - нет.
Go to the top of the page
 
+Quote Post
Andrnow
сообщение Dec 28 2008, 22:20
Сообщение #10





Группа: Новичок
Сообщений: 5
Регистрация: 10-02-07
Пользователь №: 25 228



В общем, как я и думал, это глюк VMLABа. В реальном микроконтроллере все работает)
Go to the top of the page
 
+Quote Post
rezident
сообщение Dec 28 2008, 22:44
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Andrnow @ Dec 29 2008, 03:20) *
В общем, как я и думал, это глюк VMLABа. В реальном микроконтроллере все работает)

Тему можно закрывать?
Go to the top of the page
 
+Quote Post
Andrnow
сообщение Dec 28 2008, 23:54
Сообщение #12





Группа: Новичок
Сообщений: 5
Регистрация: 10-02-07
Пользователь №: 25 228



Закрывай) А нужно?
Go to the top of the page
 
+Quote Post

Closed TopicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


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


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