OEM GPS em-406. Подключение к Attiny 2313 через USART

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
Родился
Сообщения: 16
Зарегистрирован: Ср сен 08, 2010 16:49:13

Сообщение erkishiosman »

Всем доброго времени суток. Пытаюсь решить следующую задачу: имеется Attiny 2313, LCD от WINSTAR (16x2) и GPS приемник em-406. В даташите на приемник указано, что он передает данные по USART (протокол NMEA, 4800 бод/с, формат сообщения 8N1). Я написал программу для отображения первых 16 символов, полученных в сообщении. Таблица символов для LCD схожа с таблицей ASCII символов (по крайней мере те символы, которые используются в сообщении), поэтому я передаю полученное сообщение сразу же на дисплей, не преобразовывая его. Но, к сожалению на дисплее отображается чушь всякая. Я приемник и к com-порту подключал - та же байда. Может кто знает в чем дело?

P.S. Прикрепляю файл программы на асме
Вложения
8.asm
(5.33 КБ) 491 скачивание
Последний раз редактировалось erkishiosman Чт сен 09, 2010 09:04:00, всего редактировалось 1 раз.
Реклама
Родился
Сообщения: 16
Зарегистрирован: Ср сен 08, 2010 16:49:13

Сообщение erkishiosman »

Кто-нибудь может помочь? Или мне лучше перевести тему в раздел "Микроконтроллеры и ПЛИС"?
Реклама
Нашел транзистор. Понюхал.
Аватара пользователя
Сообщения: 150
Зарегистрирован: Пт апр 03, 2009 10:02:47
Откуда: Михайловск

Сообщение Sergey_K »

erkishiosman писал(а):Или мне лучше перевести тему в раздел "Микроконтроллеры и ПЛИС"?
Лучше, конечно, сразу туда. Специфика понимашь.
erkishiosman писал(а):com-порту подключал - та же байда.
Сначала через СОМ и наладь связь понятную, а потом уже понятое мурлыканье тинькой будешь обрабатывать.
Неполучается у того - кто не делает...
Контактная информация:
Первый раз сказал Мяу!
Аватара пользователя
Сообщения: 23
Зарегистрирован: Пт сен 03, 2010 08:59:21
Откуда: Москва

Сообщение lacvel »

Вначале отлаживайте вывод, потом проверьте что получаете верно. Ошибка часто в скорости.
Контактная информация:
Реклама
Эиком - электронные компоненты и радиодетали
Мучитель микросхем
Аватара пользователя
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва

Сообщение Fasterpast »

а em-406 не USB разве?
если нет, пробуй скорость 9600. по умолчанию скорость порта на подобных модулях обычно именно такая (независимо от скорости NMEA)
ну и пробуй команды устройства. может он по умолчанию в двоичном сирфе передаёт а не в нмеа. всё есть в дш.
Последний раз редактировалось Fasterpast Чт сен 09, 2010 13:59:56, всего редактировалось 4 раза.
Контактная информация:
Реклама
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Частота МК какая? Просто при таких настройках и частоте по-умолчанию 8МГц скорость выходит 9600. Если 4МГц, то скорость сойдет и надо вывод LCD смотреть... Строка "Ready" нормально выводится?
Реклама
Родился
Сообщения: 16
Зарегистрирован: Ср сен 08, 2010 16:49:13

Сообщение erkishiosman »

Fasterpast писал(а):а em-406 не USB разве?
Нет em-406 не USB. В даташите сказано, что по дефолту используется NMEA 4800 бод/с, формат слова 8N1.
Engineer_Keen писал(а):Частота МК какая? Просто при таких настройках и частоте по-умолчанию 8МГц скорость выходит 9600. Если 4МГц, то скорость сойдет и надо вывод LCD смотреть... Строка "Ready" нормально выводится?
Частота контроллера 4 МГц (резонатор), строка "Ready" выводится нормально. Самое интересное, что я и к ком-порту через гипертерминал подключал и там та же фигня - перепробовал все скорости: не помогло(( Приемник лежал без дела больше года, говорят, что такие вещицы не любят статического электричества, не знаю насколько это правда.
Родился
Сообщения: 16
Зарегистрирован: Ср сен 08, 2010 16:49:13

Сообщение erkishiosman »

Написал программу, которая меняет скорость USART от 1200 до 115200 до тех пор, пока не прийдет последовательность символов "$GP" (в протоколе NMEA так начинаются все сообщения). Контроллер очень долго думал, но искомую скорость так и не подобрал.
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Сообщение kolobok0 »

erkishiosman писал(а):... Прикрепляю файл программы на асме
не указали какой частотой кормите мк.
если 2МГц - то ошибка
Это то что на поверхности.

1) джампы не обязательно все рисовать. Есть замечательная директива .org <имя смещения из инклуд файла на ваш камень>
2) нафига вообще прерывание? Если для понтов - то мимо. Если под развитие - так оно не правильно написано. Смысл? Делали то же самое бы в цикле - меньше непоняток было бы.
3) что мешает прогнать в симуляторе под дебагом?
4) в начале прерывания можно заюзать вместо brne => breq меньше джампов в коде.
5) почему юзаете st Y+,r21 и стесняетесь ld r21,Y+ ?
6) нафига задержка в прерывании? это типа чтоб пропустить некий кусок данных по USART?

так же не понятно LCD у вас подключён по 4 или по 8 проводной шине данных? Стирает и выводит что то осмысленное уже как я понял? Т.е. дисплей дышит?
кстати что значит "подключали и к COM порту"? у девайса какие уровни то на выходе? 5 вольтовые или стандарт COM?

(круглый)
Друг Кота
Аватара пользователя
Сообщения: 3872
Зарегистрирован: Пт янв 29, 2010 10:27:40
Откуда: Москва

Сообщение Engineer_Keen »

Частота была объявлена выше - 4МГц.

Кстати ошибочка:

Код: Выделить всё

  		cpi  YL, 0x7C
   		brne  end
   		rjmp  endd
end:
   		reti
После метки endd нет выхода из обработчика прерывания через reti, только ret.
Родился
Сообщения: 16
Зарегистрирован: Ср сен 08, 2010 16:49:13

Сообщение erkishiosman »

2 kolobok0

Частота 4 МГц

1) Я не ставил целью получить оптимизированный код
2) В программе два прерывания - первое: прерывание по сбросу, второе: прерывание по получению байта данных.
3) В протеусе все работает нормально, в реальности тоже работает, но не так, как надо - показывает не те символы, что нужны
4) Ответ в 1)
5) Недоглядел
6) Этот вопрос я не понял. Где там задержка? Все задержки необходимы для дисплея (по ДШ)

LCD подключен по 8 проводной шине. Алгоритм работы - программа по получению байта данных по USART запускает прерывание, в прерывании байт данных записывается в SRAM. Далее программа выходит в основной цикл до начала нового прерывания по принятии байта. В sram записываются первые 16 символов сообщения, после чего все прерывания отключаются и записанные в SRAM символы выводятся на дисплей и программа больше ничего не делает. Смысл такой программы - удостовериться в правильности настроек USART, найдя правильные настройки я буду писать другую программу.
Сам GPS приемник имеет стандартные ТТЛ уровни. Подключал я его используя MAX232 - также выдает непонятные символы((
Грызет канифоль
Сообщения: 296
Зарегистрирован: Ср дек 30, 2009 09:55:39

Сообщение kolobok0 »

> Частота 4 МГц

1) замечание касалось не оптимизации. а чтоб не кол-во джампов счтать а написать всего два. ресет и на приёме.
.org 0
jmp init
.org URXCaddr
jmp gps
2) -- второе: прерывание по получению байта данных. в коде немного не так. а) - это не прервание для боевого б) (как тут замечено было) окончивается странно. обычным рэтом!
3) симуляцию так же не плохое дело. но требует настроек. пользуюсь студией обычно. про протеус - хз.
4) -
5) -
6) у вас вконце прерывания задержки..задержки..задержки и рэт. собственно (см.1) нуна ирэт вообщето. а ежели вам никуда не нужно - так и организуйте бесконечный цикл на хвосте.

.. после чего все прерывания отключаются (в коде - запрещаются прерывания) и записанные в SRAM символы выводятся на дисплей и программа больше ничего не делает (кроме ретурна непонятно куды). Смысл - ок..

глазками больше, лично я - ничего не вижу.
рекомендации следующие:
1) вам необходимо удостовериться что Вы видите именно то что выдаётся gps. Т.е. ручками вывести на дисплей те символы которые вы ожидаете от него. проверить что они выводяться.
2) если Вы подключали макс - то наверное можно с организовать мостик на писюшный комп с указанными параметрами. глазками ошибки не видно.
3) стоит посчитать ручками и вывести делитель на 4 000 000 (например). засечь реальную скорость МК.
после этого остаёться только одно - gps и сигнал с него.

(круглый)
Друг Кота
Аватара пользователя
Сообщения: 7361
Зарегистрирован: Пт авг 28, 2009 21:34:30
Откуда: 845-й км.

Сообщение uldemir »

Посмотрите полярность сигнала.
А люди посмотрят и скажут: "Собаки летят. Вот и осень."
Мучитель микросхем
Аватара пользователя
Сообщения: 493
Зарегистрирован: Ср фев 14, 2007 12:07:58
Откуда: Москва

Сообщение Fasterpast »

А какая версия модуля у вас TTL или RS-232? Вы уверены что там TTL? В ДШ написано, что может быть и то и другое.
Я бы всё же посоветовал сначала к компу его подключить через соответствующий адптер (если TTL), и там найти нужную скорость.
Если он точно ттл, и при этом с компом через мах не работает, и с полярностью сигнала всё точно не напутано, боюсь он может быть мёртв.
Контактная информация:
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»