Принимаем данные с gps-модуля EB-500
Продолжаем осваивать работу с GPS модулем EB-500 о котором писалось чуть ранее. Связь с космосом налажена, осталось освоить то, как принять кучу данных от этой железки с помощью микроконтроллера и преобразовать их в удобоваримый формат.
Первым делом необходимо определить скорость на которой EB-500 передает данные. У меня заработал на 115200 бод. На такой большой частоте передачи большую роль играет частота работы микроконтроллера, т.е. напрямую зависит от частоты кварцевого резонатора. И стандартные кварцы на частоты 8-12-16 МГц, которые у меня были, ну никак не подходят для тактирования МК - они дают большой коэффициент ошибок при работе UART на скорости 115200 и заместо нужных данных мы получим мусор в буфере обмена. Поэтому необходимо подобрать кварц с частотой кратной скорости работы UART. Для 115200 бод есть стандартные кварцы с частотой 11059200 Гц, 12902400 Гц и 14745600 Гц. Как посоветовал комрад Pchela, резонаторы с такой частотой можно выдрать из старых модемов, но такого добра у меня не оказалось и поэтому пришлось дождаться окончания новогодних праздников и съездить в магазин.
В общем схема сопряжения микроконтроллера и GPS-модуля вышла следующей:
Для отображения полученных данных используется дисплей от Nokia5110 (аналог 3310)
Печатную плату я уже выклыдывал здесь (прямая ссылка)
Для приема данных с модуля я написал тестовый код, скачать для ознакомления можно будет в конце статьи. Он выводит на дисплей текущие координаты, в формате пригодном для скармливания картографическим приложениям (я использую Google Earth), расчетную скорость движения, путевой угол относительно севера и точное время в формате UTC.
Теперь имея эти данные, можно использовать в своих целях - собрать GPS-логгер, навигатор, точные часы, компас или что-то еще.
При работе из помещения, сигнал со спутников не может приходить напрямую (нет прямой видимости неба), он приходит отраженный от стен, пола, потолка и как итог - плавающие показания и ненулевая скорость, в то время как я просто сижу на диване :)Поэтому засунув все это дело в корпус и получив полную мобильность устройства, я первым делом отправился с ним прогуляться под открытым небом.Прогулка продолжалась не долго, при температуре -15°C пиксели дисплея замерзли и стали работать мееедленно, да так что стало трудно различать показания (представьте человека стоящего на перекрестке и пытающегося дыханием отогреть непонятного вида прибор и пытающегося его сфоткать, и вы поймете с каким видом на меня смотрели прохожие )
Что касается точности позиционирования, по мне так неплохо: разнос небольшой, три-четыре метра максимум. Так же несравнимо быстрее модуль стартует после подачи питания, секунды 3-4 и он уже определял координаты. В общем годная и весьма интересная штуковина.
Тестовая программа
Уважаемые спецы! подскажите можно приспособить другой экранчик, допустим производителя WINSTAR?
Всем привет.
Наконец, закончил Свой проект GPS логгера в корпусе от Nokia 3310.
В прошивке использовал:
1) код опроса GPS, именно строки: $GPRMC и $GPGGA. По которым можно считать: время по Гринвичу, широту, долготу, скорость, путевой угол, дату по Гринвичу, состояние позиции (GPS fix), количество спутников и высоту над уровнем моря.
Прошивка находится в комментарии № 36.
2) код для расчёта расстояния между двумя точками (зная начальную и конечную широту и долготу).
Прошивка находится в комментарии № 44.
3) и код работы с LCD дисплеем от Nokia 3310 (аналог LCD Nokia 5110). Прошивка есть на этом сайте.
Для схемы питания Nokia 3310 в комментарии № 37.
Для своего GPS логгера, помимо показа всех данных, которые считываются со строк $GPRMC и $GPGGA, также написал «Меню», в котором есть:
1) «Настройка», в ней можно: включить или выключить подсветку, настроить вид подсветки, выставить часовой пояс (только плюсовые (+) значения, для России), выбрать вид гланого окна (обычный или с путевым компасом). При выходе из «Настройки» все изменения сохраняются в память (EEPROM), и при новом включении GPS настройки считываются из EEPROM.
2) «Сохранение Широты и Долготы», в ней можно: выбрать ячейку (от 1 до 50) в неё будет сохраняться текущая Широта и Долгота, дальше перейдёте в режим ввода Имени (на Английском) до 10 букв. Если не будете вводить Имя (оставите пустым), тогда если в выбранной ячейки уже была сохранена (широта, долгота и имя ячейки), то ячейка очистится.
3) «Поиск Широты и Долготы», в ней можно: выбрать ячейку, в которой раньше была сохранена точка (например: координата магазина), дальше переходите на новое окно, в котором показывает сохранёную Широту и Долготу, и текущую Широту и Долготу. Также показывает остаточное расстояние до точки (в метрах, если расстояние <10000 метров, если =>10000 метров, то показывает в километрах).
Также использовал симулятор «Proteus», в котором можно просмотреть всю работу GPS логгера. Я добавил клавишу блокировки клавиатуры, поэтому для разблокировки клавиатуры нужно нажать клавишу решётка (#).
ВНИМАНИЕ: для симулятора «Proteus» в прошивке использовал внутренний кварц на 8 МГц, если будете собирать данное устройство, то в прошивке измените частоту на внешний кварц 11.0592MГц.
Способ питания и зарядки использовал (из http://avrproject.ru/publ/kak_podkljuchit/gps_modul_eb_500/2-1-0-127 в комментарии № 12).
Питание GPS и Atmega64L включается через полевые ключи BSS138. Питание LCD идёт из ножки Atmega64L.
Если захотите собирать данное устройство «GPS логгер в корпусе от Nokia 3310», задавайте вопросы по моему устройству, Я отвечу на Ваши вопросы.
Может, кому пригодится прошивка законченного GPS логгера в корпусе от Nokia 3310.
Все материалы по своему проекту, Я закачал на Яндекс-диск:
http://yadi.sk/d/MpHV4Af-5zGLy
Всем Привет.
Недавно решил проблему с приёмом "Всех нужный данных (строки $GPRMC" и "$GPGGA)" с GPS приёмника - всё работает (прошивка выложена в №36 комментарии).
Теперь появилась необходимость рассчитывать расстояние (в метрах), зная "начальную широту и долготу" и "конечную широту и долготу". Пример использования: вводишь "конечную широту и долготу", и на экране пишется остаточное расстояние (в метрах) до "конечной точки", это очень удобно...
Пробовал использовать формулы из Интернета. Думал, скопирую формулу и всё заработает, но нет, BASCOM постоянно неверно подсчитывал (вероятно из-за округления значений). Поэтому пришлось написать свою формулу, исходя из формул в Интернете.
Результат меня радует. Погрешность, исходя из Яндекс-карты = допустимая для GPS.
Прошивка испытана в Proteus. Думаю, в Жизни тоже будет работать.
Расстояние выводится через UART-терминал, расстояние пишет в метрах (Мне так удобнее), каждый может изменить прошивку под Себя.
Может кому пригодится "Рассчитывать расстояние в метрах, зная начальную и конечную точку".
Прошивку Я закачал на Яндекс-диск:
http://yadi.sk/d/S43Wort54ihO8
У меня как раз была такая задумка - вбиваешь координаты места назначения, а на экране отображается оставшееся расстояние до него
По теореме Пифагора - квадрат гипотенузы=сумма квадратов катетов. Катетами будет разница широт и долготы двух точек. Но надо будет решить проблему, что с увеличением широты изменяется и соотношение градуса к расстоянию (т.е. на экваторе один градус равен ххх км, а на другой широте уже будет равен ууу км.)
А кто знает, как рассчитывать расстояние (в метрах), зная широту и долготу двух точек? То-есть (например) известна координата "дом" и координата "магазин", как теперь высчитать расстояние между точками.
Может есть какие-то формулы?
Привет, так по координатам же можно узнать)) даже улицу и дом;) ... в Самаре
Заметил проблему у экрана "Nokia 5110" (аналог 3310), при подключение керамического конденсатора на 1мкф в корпусе 0805 (керамику большей ёмкости не нашёл) к контакту "VOUT" на экране, и напряжение от >3.3V до 4.2V = "задний фон" экрана темнеет (вид не красивый и информацию различать труднее). Поэтому нужно все "информационные провода" пустить через резисторы на 4.7 кОм, кроме питания (плюс и минус) и контакта "VOUT".
Это немного осветлит "задний фон" экрана, а информация будет понятнее.
Схема подключения резисторов на 4.7 кОм и керамического конденсатора на 1мкф в корпусе 0805:
http://s2.ipicture.ru/uploads/20130504/n6kg7LRC.jpg
Теперь напряжение может быть выше 3.3V и до 4.2V, без затемнения экрана.
На днях написал прошивку для опроса "всех нужных данных" с GPS модуля.
По началу пробовал опрашивать через Input (в Proteus работает, а в ЖИЗНИ нет), поэтому использовал способ опроса предложенный exersizze. Всё заработало в Proteus и в ЖИЗНИ.
СПАСИБО exersizze за статью (с его способом опроса), очень помогло.
Немного расстроило в прошивке от exersizze, что опрашивалась только одна строка "$GPRMC", но Мне нужна была ещё и строка "$GPGGA". Так-же не было "фильтров" по смещению цифр со своих мест (из-за изменения двухзначной цифры в трёхзначную), и не было учёта "часового пояса в сочетании с датой (високосный год)", так-как "время" и "дата" в GPS идёт по "Гринвичу".
Написанная прошивка сочетает в себе:
1) считывание строки "$GPRMC" и "$GPGGA".
2) написаны "фильтры" по изменении цифр (с двухзначных цифр в трёхзначные).
3) написаны "форматы" по максимально возможным цифрам для всех выводимых данных.
4) учитывается "часовой пояс" с переходом по дате (с учётом "високосного года").
Считываемые данные с GPS:
1) Hour, Minut, Second - время.
2) Shirota, Dolgota - широта и долгота.
3) Skorost - скорость в км/ч.
4) Azimut - путевой угл.
5) Day, Month, Year - день, месяц, год.
6) Gps_fix - какая позиция (0 = Данные не верны, 1 = Позиция зафиксирована, 2 = DGPS (повышенная точность)).
7) Spytniki - количество спутников.
8) Fly - высота в метрах.
Прошивка уже испытывается на "макетке" с внешним кварцем, пока всё работает:)
Заметил, что с "SMD антенной" работает лучше, а с "проводом =>5 см" - хуже. Потому что "SMD антенна" имеет землю (-), а провод - это просто провод (без земли).
В Моём случае "макетка":
1) при включение GPS на "LCD 16*2" выводится время, а остальное пишет "Scan...".
2) при захвате спутников (=>3 штук) показывает точное время, а вместо "Scan..." пишет "дату", "какая позиция", "количество спутников" и "высота над уровнем моря".
3) при потере спутников (<3 штук) показывает время, а остальное пишет "Scan...".
=>>> При необходимости, можно заменить выводимые данные на другие (из верхнего списка).
Ещё раз СПАСИБО автору exersizze, за предложенные способ опроса GPS.
Может кому пригодится, в Своё время Мне бы это пригодилось.
Прошивку Я закачал на Яндекс-диск:
http://yadi.sk/d/1vZfydt24YGdd
А вот эта картинка у вас случаем не из Протеуса?
http://avrproject.ru/eb-500_test/cxema.png <
Нет, Кварц ставить другой не обязательно, пойдет и на 11059200Гц
про изменение строчки понятно. если точнее спросить: то нужно ли кварц подбирать будет?
Просто заменить в исходнике строку $baud = 115200 на $baud = 9600 и снова скомпилировать в bascom-avr
А как под другой модуль переделать прошивку не подскажите? под скорость 9600 бод?
GPS выдает время по "Гринвичу", Я просто прибавляю +7 к часам, но дата переводится на следующий день по "Гринвичу" (получается дата переводится в 7 часов утра по Моему поясу). Можно написать "фильтровальный календарь", но тогда нужно высчитывать високосный год.
Может у кого есть способ проще (учитывать разность поясов)? или уже так оставить.
>>>Возможно, "Долгота" может быть >99
именно, долгота выдается от 0 до 180
А зачем "GPS приёмник" выдаёт "Долготу" с "нулём (0)", а в "Широте" нету нуля (0)?
Понятно, что можно в прошивке убрать, но зачем GPS так пишет?
Возможно, "Долгота" может быть >99. Это что показатель "Региона"?
Предложение автору. Может для этого проекта или как отдельный проект рассмотреть использование TFT с тачскрином. вот ссылка http://evertdekker.com/Joomla/index.php?option=com_content&task=view&id=77&Itemid=84
Здравствуйте,amv2000!
Да, действительно это так, я уже сталкивался с этой задачей и уже решил ее именно так, как Вы сказали.
По поводу скорости обмена, покупая этот приемник в Терраэлектронике (есть такая компания в Москве), я сначала не обратил внимание и купил не глядя, так вот у моего экземпляра скорость обмена 9600, а есть, за такую же цену, приемник и на 115200. Так что надо быть внимательным при покупке. Похоже, маркировкой они не отличаются (во всяком случае на их сайте http://www.terraelectronica.ru ).
Да напишите не Pe а Pee и остальные тоже, где встречается. В новых версиях ругается на одинаковые имена переменных, где то в тексте уже встречается объявление этой переменной.
приветствую! Ох уж эти новые версии компилятора. Никак не хотят нормально работать с библиотекой 3310.
У меня версия 1.11.9.8 она компилирует без проблем
Здравствуйте, уважаемый exersizze!
Собрал Вашу конструкцию, дисплей, правда, не припаял, но спутники ловит - светодиод сначала около минуты светится постоянно, затем начинает с частотой 1 Гц моргать.
Спасибо Вам за конструкцию. Давно я так не радовался!
Однако, как всегда, есть вопросы. Какую версию компилятора Вы используете?
Что - то у меня программа не компилируется - ругается на имена символов, ну, например, на ту строчку знакогенератора, где указана русская буква П, у Вас там латиницей написано Pe, после закомментирования этой строки ругается на следующую.
Так что пришлось заливать в контроллер Ваш hex файл. Как - то неудобно, хотелось бы и самому что - то дописать...
To exersizze!
По поводу TFT дисплея - проекты есть.
Вернее, сейчас работаю, могу выводить линии, прямоугольники.
Используя библиотеку AVR-DOS, читаю с SD карты и вывожу на дисплей картинки.
Только материал не совсем готов, более - менее приведу в порядок, пришлю.
Просто времени совсем нет.
Конечно, 32 Мега маловата для этих целей, выводов может не хватить, да и флзш - памяти маловато будет. Но 64 - ой уже вполне достаточно, я применяю Мега128А.