|
|
  |
USART на ATMega 16, На комп выдает непонятные символы |
|
|
|
Feb 6 2006, 13:15
|
Участник

Группа: Свой
Сообщений: 45
Регистрация: 8-01-06
Из: Петербург
Пользователь №: 12 944

|
2 ILYCHOFF Цитата(ILYCHOFF @ Feb 6 2006, 12:54)  12:46:39> xяЂ ... 12:47:52> 78 00 FF 80 12:47:52> 00 Вообще эти символы (FF и 80) при неправильной работе с УАПП появляются очень часто. FF вместо данных получается, например, если baudrate приемника в ~10 раз больше baudrate передатчика. т.е. пока передатчик отправил только один бит=1, приемник получил все 10. Для предотвращения подобных ситуаций как раз и используют stop-биты. Вторая ошибка может заключатся в лишнем инвертировании сигнала по пути от передатчика к приемнику, например нечто подобное получал, когда делал гальваническую развязку на оптронах и перепутал местами два диода. попробуйте поизменять baudrate на компе и посмотрите на полученные данные, с большой вероятностью проблема решится.
|
|
|
|
|
Feb 6 2006, 14:30
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(ILYCHOFF @ Feb 6 2006, 16:41)  у меня стоит кварц 4 МГц скорость 9600 ошибка составляет 0,2 % как CV пишет, может из-за этого такое происходить? смотрю осциллографом при передачи 0x01 с контроллера выходит стартовый бит лог. 0 затем первый бит данных - лог. 1 и до следующей посылки а после MAX232 сигнал полностью инвертирован, т. е. стартовый бит лог. 1, а не 0, так и должно быть ? для компа стартовый бит должен быть лог. 1 ??? Вам же уже написали, что MAX232 - инвертирует!!! У ПК приемник с линии RS232 тоже должет инвертировать... значит данные должны приходить в нормальном виде (двойная инверсия - означает, что принятые данные не инвертированы). Анализировать их необходимо после приемника... И вникнуть ,что у Вас приемник считал на ПК. Пользуйтесь программными анализаторами протокола (для COM порта). На форуме по ним ссылок было достаточно.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Feb 6 2006, 14:32
|

Участник

Группа: Свой
Сообщений: 58
Регистрация: 6-06-05
Пользователь №: 5 781

|
попробуй открыть ком порт на разных скоростях, у тебя похоже скорости приёмника/передатчика несовпадают. а если не поможет, то собери кабель вот по этой схеме. я такой для сотового телефона делал, работает замечательно, главное включить сигналы DTR или RTS, а то питания не будет. А можно питание отдельно прикрутить, как описано тут.
Сообщение отредактировал kay - Feb 6 2006, 14:34
|
|
|
|
|
Feb 6 2006, 14:52
|

Профессионал
    
Группа: Свой
Сообщений: 1 301
Регистрация: 30-11-04
Из: Россия, Н.Новгород
Пользователь №: 1 264

|
Цитата(kay @ Feb 6 2006, 17:32)  попробуй открыть ком порт на разных скоростях, у тебя похоже скорости приёмника/передатчика несовпадают. а если не поможет, то собери кабель вот по этой схеме. я такой для сотового телефона делал, работает замечательно, главное включить сигналы DTR или RTS, а то питания не будет. А можно питание отдельно прикрутить, как описано тут. Да проблема уже понятна давным-давно! Но советы и рекомендации инициатор темы не воспринимает... Уважаемый, ILYCHOFF. Это выглядит так: (МК[передатчик/приемник] - RS232 - [передатчик/приемник]ПК): скорость приема (Baud Rate), количество бит данных (Data), бит паритета (Parity), стоповые биты (SBit) - должны быть одинаковыми!!! В первую очередь заняться надо проверкой именно этого. Выкладывайте код инициализации UART для МК и ПК, будем смотреть! P.S. А кабель пока надо попробовать по нуль-модемному варианту.
--------------------
Не корысти ради, не в целях наживы, а во исполнение велений души!
|
|
|
|
|
Mar 15 2006, 02:53
|

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

|
Цитата(AVR @ Mar 15 2006, 01:43)  С другой стороны com порт воспринимает +11 В как единицу и -11 В как ноль. Выполняют ли такое преобразование микросхемы типа max232 (помимо инверсии)? Да. max232 - это преобразователь уровней RS <-> TTL. Цитата(AVR @ Mar 15 2006, 01:43)  Насколько я понимаю, на выходе TXD контроллера низкий логический уровень ~0 В, а высокий около напряжения питания (например 5 В). С другой стороны com порт воспринимает +11 В как единицу и -11 В как ноль. Думаю, если Вы не делаете промышленное устройство, то простого инвертора на одном транзисторе (по каждому каналу) будет достаточно. Из собственных экпериментов точно знаю, что COM порт компьютера нормально воспринимает уровни TTL так: меньше 3V- лог. 1 больше 3V -лог. 0
|
|
|
|
|
Mar 17 2006, 08:46
|
Участник

Группа: Свой
Сообщений: 60
Регистрация: 8-11-05
Пользователь №: 10 602

|
У тебя не согласована скорость между компьютером и микроконтроллером. Еще внимательнее проверь настройки USART
|
|
|
|
|
Mar 17 2006, 09:49
|

фанат Linux'а
    
Группа: Свой
Сообщений: 1 353
Регистрация: 23-10-05
Из: SPB.RU
Пользователь №: 10 008

|
Цитата(defunct @ Mar 17 2006, 07:23)  Pull-up на коллектор транзистора "сбоящего" канала поменьше поставьте ~500om-1kom.. У меня вместо транзистора схема 3ИЛИ-НЕ (другой под рукой не оказалось =( ) с объединенными тремя входами в один. Цитата(alekseykoj @ Mar 17 2006, 11:46)  У тебя не согласована скорость между компьютером и микроконтроллером. Еще внимательнее проверь настройки USART Скорость нормально согласована, т.к. когда я непрерывно в течении нескольких минут что-то передаю в компьютер, вся посылка доходит без каких-либо искажений, когда же ничего не передаю, временами принимается "каша"...
--------------------
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|