Продолжаем осваивать работу с 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 и он уже определял координаты. В общем годная и весьма интересная штуковина.
exersizze У вас работающего проекта в протеусе нету? А то я собрал но дальше изображения приветствия загрузка не идет. Я так понял, что так и должно быть если на TX не подается сигнал с GPS. Перепробовал все GPS-модули для протеуса, не с одним не захотело работать. Притеус тупо виснит.
Winner_d если интересует логика перехода на летнее время, то для случая с кнопкой можно сделать так: заводишь переменную byte в eeprom, и сохраняшь туда результат нажатия на кнопку. Например 0 = зимнее, 1 = летнее. И в начале делаешь чтение этой переменной, и от результат уже корректируешь время. Или заместо кнопки сделать перемычку, на свободной ножке контроллреа. Так гораздо проще, просто считываем состояния порта и вводим корректировку PS: сначала хотел сказать что в России отменили перевод стрелок, но потом глянул на IP
Блин,точно не помню-но каждое воскресенье нужного месяца в 02 часов 00 минут 00 (или когда там переводим время)-увеличиваем переменную-будет равна 4,прибавим час.Так же с другим месяцем
Спасибо. Значить буду сам колупать. Хочу добавить высоту над уровнем моря и индикатор заряда батареи. Благо свободное место на экране есть. Если получиться я выложу исходники и прошивку.
Подсветка на ноге PortA.4 По фьюзам вот какое дело, я прошиваю Хазамой (Khazama AVR) и там частота кварца выбирается из выпадающего списка. Но могу сказать только одно, что фьюзы выставляются такие же как и на кварц 12 - 16 МГц (если собирали раньше устройства с такой частотой, то прошивать знаете как). Доработку не планирую, по крайней мере в обозримом будущем, так как этого железа у меня уже нет.
Спасибо. Прошивать буду программой SinaProg. А доработанная прошивка не намечаться? Очень хотелось бы что бы показывало высоту над уровнем моря. Еще вопрос, куда у вас подключена подсветка дисплея?
Да, подойдет если там стандартный протокол NMEA. Скорее всего так и есть. Фьюзы выставляются на работу от внешнего кварца. Чем будете прошивать? Чтобы убрать ноль, надо поработать с выводимой на дисплей строкой. В баскоме можно воспользоваться командой Right http://avrhelp.mcselec.com/index.html?right.htm
vovanxp , в принципе можно ставить любой из стандартного набора частот (4, 6, 8, 12, 16 МГц). Ошибка будет составлять всего 0,16%, в работе этого заметно не будет. Но лучше поставить кварц на 11059200 Гц, на этой частоте передача будет без ошибок вообще.
Великолепная штука вот бы ещё к нему bluetooth модуль прикрутить что бы отправлять не на дисплей 3310, а на мобильное устройство. К примеру у меня Nokia 5320 с GPS дружит только через блютуз. а самого GPS в тел нету.
Наконец, закончил Свой проект 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
По теореме Пифагора - квадрат гипотенузы=сумма квадратов катетов. Катетами будет разница широт и долготы двух точек. Но надо будет решить проблему, что с увеличением широты изменяется и соотношение градуса к расстоянию (т.е. на экваторе один градус равен ххх км, а на другой широте уже будет равен ууу км.)
А кто знает, как рассчитывать расстояние (в метрах), зная широту и долготу двух точек? То-есть (например) известна координата "дом" и координата "магазин", как теперь высчитать расстояние между точками. Может есть какие-то формулы?
Valera18, как всегда радуешь своими результатами:) отдельное спаисбо за трюк с дисплеем, он у меня тоже немного темновытый - видны вертикальные полосы если в одной строке есть символы а в другх нету.
Заметил проблему у экрана "Nokia 5110" (аналог 3310), при подключение керамического конденсатора на 1мкф в корпусе 0805 (керамику большей ёмкости не нашёл) к контакту "VOUT" на экране, и напряжение от >3.3V до 4.2V = "задний фон" экрана темнеет (вид не красивый и информацию различать труднее). Поэтому нужно все "информационные провода" пустить через резисторы на 4.7 кОм, кроме питания (плюс и минус) и контакта "VOUT". Это немного осветлит "задний фон" экрана, а информация будет понятнее.
Схема подключения резисторов на 4.7 кОм и керамического конденсатора на 1мкф в корпусе 0805: https://yadi.sk/i/scYF9LDIeR74w Теперь напряжение может быть выше 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