Объединение AVR-контроллера с GPS модулем

AVR: подключаем GPS приёмник

Информация от GPS приёмника передаётся в текстовом виде по протоколу NMEA.

GPS приёмники могут передавать несколько типов сообщений, но большая часть необходимой информации содержится в RMС сообщениях. Этот тип сообщений имеет следующий формат:

  • «GP» — источник данных — GPS,
  • «RMC» — «Recommended Minimum sentence C»
  • «hhmmss.ss» — время UTC: «hh» — часы, «mm» — минуты, «ss.ss» — секунды.
  • «A» — статус: «A» — данные достоверны, «V» — недостоверны.
  • «GGMM.MM» — широта. «GG» — градусы, MM.MM — минуты
  • «P» — широта: «N» — северная , «S» — южная.
  • «gggmm.mm» — долгота. «ggg» — градусы, mm.mm — минуты
  • «J» — долгота: «E» — восточная , «W» — западная
  • «v.v» — горизонтальная составляющая скорости относительно земли в узлах.
  • «b.b» — путевой угол Значение равное 0 соответствует движению на север, 90 — восток, 180 — юг, 270 — запад.
  • «ddmmyy» — дата: «dd» — день, «mm» — месяц, «yy» — год
  • «x.x» — магнитное склонение в градусах
  • «n» — направление магнитного склонения
  • «m» — индикатор режима: «A» — автономный, «D» — дифференциальный, «E» — аппроксимация, «N» — недостоверные данные
  • «hh» — контрольная сумма.
  • «r» — байт равен 0x0d, перевод каретки
  • «n» — байт равен 0x0a, перевод строки

Схема подключения GPS приёмника к avr atmega

IT500 avr

Схема с которой я работал построена на GPS модуле Fastrax IT500.

Так как управлять GPS приёмником не обязательно, то его можно подключить только ко входу Rx AVR’а, а выход Tx микроконтроллера через преобразователь уровней (я использовал uartusb) для отладки подключить к ПК.

Пример программы для avr, работающей с GPS приёмником

В функции main будем считывать из fifo принятые данные и складывать их буфер для последующего разбора. Когда приходит символ ‘r’ или ‘n’ вызываем функцию nmea_parser для разбора буфера. Результат парсинга выводим в консоль.

Функция nmea_parser сначала проверяет на корректность данные в буфере и затем ищет и вызывает функцию обработчик, подходящую именно для этого типа nmea сообщения.

Функция проверки контрольной суммы для nmea сообщения

char nmea_check_crc( char *buf ) < unsigned char crc, calc_crc = 0; while( *buf != '*' ) < if( *buf == '' ) < return -1; >calc_crc ^= *buf++; > crc = hex2bin( *(buf+2) ) | hex2bin( *(buf+1) ) << 4; if ( crc != calc_crc ) return -1; return 0; >

функция hex2bin переводит из текстового hex формата в двоичный вид

структура, описывающая обработчик nmea сообщения

массив обработчиков nmea сообщений, в данном примере в массиве только один обработчик, но можно по аналогии добавить обработчики и для других типов сообщений

nmea_rmc_data это структура, в которой хранится результат разбора nmea сообщения

Функция обработчик nmea RMC сообщения

char nmea_rmc_parser( char *buf, void *data ) < nmea_rmc_t* rmc = (nmea_rmc_t*)data; memset( rmc, 0, sizeof( nmea_rmc_t ) ); rmc->utc_time = atof( buf ); buf = nmea_next_field( buf ); if( *buf == 'A') < rmc->valid = 1; >buf = nmea_next_field( buf ); rmc->latitude = atof( buf ); buf = nmea_next_field( buf ); if( *buf == ‘S’) < rmc->latitude = -rmc->latitude; >buf = nmea_next_field( buf ); rmc->longitude = atof( buf ); buf = nmea_next_field( buf ); if( *buf == ‘W’) < rmc->longitude = -rmc->longitude; >buf = nmea_next_field( buf ); rmc->speed = atof( buf ); buf = nmea_next_field( buf ); rmc->direction = atof( buf ); buf = nmea_next_field( buf ); rmc->data = atol( buf ); return 0; >

Функция поиска следующего поля nmea сообщения

char *nmea_next_field( char* buf)

Результат работы программы:

Скачать исходники для avr-gcc (WinAvr) можно тут

post scriptum

Рассмотренный пример программы демонстрирует возможность разбора nmea сообщений, и содержит большой простор для оптимизации. К примеру, можно избавиться от работы с переменными типа float и duble, так как микроконтроллеры avr не имеют аппаратной поддержки чисел с плавающей запятой.

Запись опубликована в рубрике Микроконтроллеры avr с метками avr, gps. Добавьте в закладки постоянную ссылку.

13 комментариев: AVR: подключаем GPS приёмник

Доброго времени суток. Нагуглил Вашу статью, появилось пару вопросиков. Нет кода ф-ции nmea_next_field — нет, это так и задумано? Случайно не делали разбор предлодения GSV? Если да, можете поделиться кодом? ;)

День добрый. Код функции nmea_next_field есть в архиве с исходниками, но на всякий случай добавлю и в заметку. Разобор GSV не делал.

Возник ещё вопросик…
К примеру есть поле, в предложении NMEA0183, со таким сожержанием:
…,-147.2,M,…
как его преобразовать в hex вид?
Спасибо.

Не совсем понял, что значит «преобразовать в hex вид».

к примеру, поле структуры имеет размерность int32_t, а в нмеа0183 данные в виде: …,-147.2,M,…, значит что-бы информацию «положить» в инт32, нужно умножить на 10, и за одно в бинарном виде, 1472 = 5C0 (в хексе), а сам процесс? atof ? или как-то иначе?

Спасибо! С мира по нитке — наберем на хостинг :)

Читайте также:
Делаем из стеклопластика

Да, самый простой способ atof, но можно и свою функцию преобразования написать. Вот два варианта.

Добрый день!
Пролистал много Ваших статей, очень увлекательно и познавательно, как начинающему так и продвинутому микроконтроллерщику. Только один вопрос — почему Вы так не любите прерывания? В идеале main пустой и контроллер постоянно спит, пробуждаясь по соответствующему прерыванию, в крайнем случае в main идёт обработка сложной процедуры, по флагу всё того же прерывания.
Это поможет сделать Ваш код встраиваемым в разносторонние задачи.
Например, с библиотечкой delay.h, когда таймеры могут быть заняты чем-то полезным, далеко не уедешь…

Доброго времени суток! Спасибо за комментарий.
Я совершенно не против прерываний, я двумя руками (и другими конечностями) за их использование. Просто в заметках пытаюсь больше сконцентрироваться на основной теме, и не усложнять второстепенными деталями. Программы которые приводятся в заметках — это пример использования а не завершенный программный продукт. Но вы правы, думаю стоит как-нибудь написать заметку об использовании прерываний и режимов энергосбережения.

Доброго времени суток!
Пользуюсь Вашим кодом, за это большое спасибо. Видел несколько разных парсеров, но Ваш вариант наиболее мне подходит :) Ещё раз спасибо.
Ну и в догонку вопросец :)
А не приходилось часом делать обратное? Т.е. не парсить NMEA предложения, а собирать их? Если будет возможность, буду очень рад вашей помощи в очередной раз :)
Вашу ф-цию парсинга RMC слегонца подпилил под свои нужды:
[code]uint8_t nmea_rmc_parser ( uint8_t *buf, void *data )
//$GPRMC,090916.00,A,4912.3898,N,03151.9493,E,00.00,024.3,120314. A*5C
rmc_data_t* rmc = ( rmc_data_t* ) data;
memset ( rmc, 0, sizeof ( rmc_data_t ) );

//090916.00,A,4912.3898,N,03151.9493,E,00.00,024.3,120314. A*5C
rmc->time = atof ( buf );
sscanf ( buf , «%02d %02d %02d», &rmc->timehh, &rmc->timemm, &rmc->timess);//, &nanosec );

buf = nmea_next_field ( buf );
rmc->status = *buf;

buf = nmea_next_field ( buf );
rmc->latitude = atof ( buf );
sscanf ( buf , «%02d %02d .%04d», &rmc->latgr, &rmc->latmin, &rmc->latdecmin);

buf = nmea_next_field ( buf );
rmc->podcot_lat = *buf;
if( *buf == ‘S’)
rmc->latitude = -rmc->latitude;
rmc->latgr = -rmc->latgr;
>

buf = nmea_next_field ( buf );
rmc->longitude = atof ( buf );
sscanf ( buf , «%03d %02d .%04d», &rmc->longr, &rmc->lonmin, &rmc->londecmin);

buf = nmea_next_field( buf );
rmc->podcot_lon = *buf;
if( *buf == ‘W’)
rmc->longitude = -rmc->longitude;
rmc->longr = -rmc->longr;
>

buf = nmea_next_field( buf );
rmc->speedN = atof ( buf );

buf = nmea_next_field( buf );
rmc->kurs = atof ( buf );

buf = nmea_next_field( buf );
rmc->date = atoi ( buf );
sscanf ( buf , «%02d %02d %02d», &rmc->datedd, &rmc->datemm, &rmc->dateyy);

GPS модуль с интерфейсом на AVR для радиомаяка

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

Это устройство можно поместить в машине и если ее украдут, оно объявит тревогу. Фактически, устройство может сказать, где находится машина. Уже существующие мобильные устройства слежения показались мне слишком дорогими и ограниченными для моих нужд. Другой возможностью было приобрести одну из Nokia N95, которые имеют встроенную GPS. Они действительно хороши, но на тот момент стоили около 600€, что совсем не дешево. Так что я решил сделать свое собственное устройство.

Итак, моей первой идеей было соединить микроконтроллер с GSM и GPS модулями. На www.sparkfun.com, например, очень много таких модулей. Просматривая их магазин, я нашел Telit GM862, который является GSM модулем со встроенным GPS приемником. Это было то, что нужно. И они высылают замечательные печатные руководства, чтобы любителям было легче получить использовать эти модули.

Вот некоторые характеристики этого GSM-GPS модуля:

  • Четырехполосный GSM
  • Потребление в среднем 17 мА в безнагрузочном, 3.5 мА в режиме пониженной мощности
  • Потребление в среднем 250 мА в рабочем режиме
  • Встроенный SiRF III GPS приемник
  • Пересылка данных, голоса, СМС и факсов
  • Скорость передачи данных до 57,6 кб/с
  • Напряжение питания: 3,4 – 4,2 В
  • КМОП-элементы совместимые с фотокамерой
  • Встроенный интерпретатор Python Возможность передачи голоса означает, что вы не ограничены только применением в качестве устройства слежения. Чтобы собрать полноценный мобильный телефон вы можете подсоединить микрофон и спикер.

Вот список того, что я приобрел для первой попытки сборки.

  • Telit GM862-GPS модуль, 126€
  • Отладочная плата GM862, $29.95
  • Четырехполосная антенна, $7.95
  • GPS антенна 3В, $14.95
  • 2 интерфейсных кабеля для антенны, $8.95
  • необязательно: Полимерные ионно-литиевые батареи, $7.95
  • необязательно: Зарядное устройство для ионно-литиевых батарей, $16.95
  • Микроконтроллер ATmega8, ок. 2€
  • Резисторы: 100, 10k, 22k, 27k, 2 x 47k, 2 x 100k, ок. 1€
  • Конденсаторы: 2 x 22p, 100n, 10u, ок. 2€
  • Светодиод, 0.10€
  • Транзистор, BC337, 0.10€
  • Макетная плата, 3€

Суммарно все детали будут стоить около 220€ или $286. Ой! А кто сказал, что паять электронику дешевое увлечение? Но, опять-таки, если вы пойдете этим путем, вы сможете реализовать все что только пожелаете.

Просмотрев техническую документацию на GM862, вы поймете, что она сложнее, чем вы предполагали. Проблемой для меня, еще начинающего в электронике, была разница использованных в модуле напряжений. Источник питания должен быть 3,4 – 4,2 В. Это нормально, поскольку AVR может работать при таком напряжении. Но последовательному порту нужен более низкий уровень, 2,8 В (для КМОП). Это означает, что вы не можете подсоединить UART контроллера (универсальный асинхронный приемопередатчик) напрямую к модулю.

Читайте также:
Прослушка в автомобиле

К счастью, эта проблема была уже решена в проекте Trackbox2. Другой заслуживающей внимание вещью был сам источник питания. Для пикового тока ему требуется как минимум 2 А. Я использовал полимерные ионно-литиевые аккумуляторные батареи, которые полностью удовлетворяют моим потребностям. Если вам придется воспользоваться 5 В источником питания, вам также придется использовать хороший регулятор напряжения и иметь дело с проблемой уровня напряжения для КМОП.

Как вы можете видеть, для GM862 нужно очень мало соединений. На плате вам нужно соединить следующее:

  • Rх, последовательный модемный коммуникатор
  • Tх, последовательный модемный коммуникатор
  • RTS к земле, подтверждение связи не используется
  • Сигнальный светодиод
  • Выключатель для управления модулем
  • VCC и GND

Пожалуйста запомните, это не производственная разработка или готовое устройство, так что прочитайте перед монтированием компонентов какую-нибудь документацию. Я вас предупредил.

Работа устройства

На сегодняшний день я могу включать или выключать модуль, посылать посредством модуля СМС и получать с него данные GPS.

Вот пример ответа GPS:

Request GPS AT$GPSACP got: AT$GPSACP GPSACP: 131924.999,5333.9291N,00954.8841E,2.6,34.0,3,29.78,0.32,0.17,130707,07

OK Теперь вы знаете, где я живу ;)

Вот и все. Это отняло у меня немного денег и сил, но оно того стоило. В следующий раз поговорим о программном обеспечении и о том, как общаться с GSM модулем.

Объединение AVR-контроллера с GPS модулем

Моей целью было сконструировать мобильный трекер (радиомаяк). Есть много различных вариантов его использования, но самый очевидный, это то, что он может сообщить о своем местонахождении. Это устройство можно поставить в автомобиле и оно включит сигнализацию при краже. В сущности оно может сообщить, где машина находится.

В продаже уже есть трекеры, но они слишком дорогие. Другая альтернатива – это телефон со встроенным GPS, например Nokia N95, но они тоже дорогие. Поэтому я решил сделать сам, соединив микроконтроллер к модулю GSM и GPS. Купил готовый модуль GM862, который включает в себя узел GSM и GPS приемник.

Объединение AVR-контроллера с GPS модулем

При изучении спецификации на GM862, я понял, что поставленная задача сложнее, чем я мог предположить вначале. Проблема для меня, начинающего в электронике, была в разнице напряжений модулей. Предполагалось питать устройство от 3.4 – 4.2В, что вполне подходит для AVR – контроллера. Но для серийных портов требуется напряжение 2.8В (КМОП – уровень). Это значит, что нельзя напрямую подключить универсальный асинхронный приемопередатчик (UART) AVR – контроллера к модулю. Требуется преобразование уровней.

Основные технические характеристики модулей GM862.

Параметр Тип модуля
GM862-GPRS GM862-PCS
Диапазоны GSM EGSM900/DCS1800 EGSM900/DCS1800/PCS1900
Мощность излучения, вт (макс.) 2/1 2/1/1
Чувствительность, dBm -102/-102 -102/-102/-102
Класс GPRS 8 10
Номинальное напряжение питания, В 3,8
Допустимый диапазон напряжения питания, В 3,4 … 4,2
Средний ток потребления, А 0,350
Пиковый ток потребления, А 1,9
Размеры корпуса, мм 43,9х43,9х6,9
Вес, гр. 23
Номинальный диапазон рабочих температур, ?С -10 … +55
Расширенный диапазон рабочих температур, ?С (с уменьшением чувствительности и производительности) -20 … +70

В качестве блока питания я использовал литий-полимерные (Li-Poly) батареи 3.4 – 4.2В, с возможностью обеспечить пиковые токи до 2А. При использовании блоков питания с другим напряжением, например 5В, следует использовать соответствующий DC-DC преобразователь. Обязательно внимательно прочитайте все инструкции и спецификации прежде, чем соединять компоненты!

Объединение AVR-контроллера с GPS модулем

Выводы подачи питания GM862

Наименование Назначение в GM862-GPRS Назначение в GM862-PCS № вывода
VBATT Напряжение питания Напряжение питания 1,3,5 и 7
GND Общий Общий 2,4 и 6
CHARGE Общий Напряжение заряда батареи 8

Работа устройства

Теперь я могу включить/выключить модуль, послать с него СМС и отследить местонахождение с помощью GPS. Вот пример GPS отклика:

Request GPS
AT$GPSACP got: AT$GPSACP
GPSACP: 131924.999,5333.9291N,00954.8841E,2.6,34.0,3,29.78,0.32,0.17,130707,07
OK

Светодиодная индикация состояния GM862

Состояние светодиода Состояние GM862
Не светится Выключен
Быстрое прерывистое свечение (период 1 сек. время свечения 0,5 сек) Или поиск сети/Или не зарегистрирован в сети/Или выключение модуля
Медленное прерывистое свечение (период 3 сек. время свечения 0,3 сек) Зарегистрирован в сети
Постоянное свечение Соединен с другим модемом или телефоном

Интерфейсные сигналы включения/выключения и контроля состояния GM862

Наименование Тип Альтернативная функция в GM862-PCS № вывода
ON/OFF Вход 17
RESET Вход 23
STAT_LED Выход с открытым коллектором 39
PWRCTL Выход с подтягивающим резистором CAM_SYNC (вход) 21

Объединение AVR-контроллера с GPS модулем imgp1490

Так что затраченные время и деньги того стоили! В дальнейшем займемся подробнее программированием и командами общения с устройством.

Читайте также:
Ставим газовый амортизатор на капот ВАЗа

Подключение GPS модуля к микроконтроллеру AVR ATmega16/32

GPS модули широко используются в современной электронике для определения местоположения, основываясь на координатах долготы и широты. Системы мониторинга транспортных средств, часы GPS, системы предупреждения о чрезвычайных происшествиях, системы наблюдения – это лишь небольшой список приложений, в которых может потребоваться технология GPS. Система GPS обеспечивает информацию о высоте, долготе, широте, реальном времени и ряд другой информации о местоположении, которая берется с нескольких спутников. В данной статье мы рассмотрим подключение GPS модуля к микроконтроллеру AVR, с помощью которого мы будем считывать информацию из данного модуля (широту и долготу) и отображать ее на жидкокристаллическом (ЖК) дисплее 16×2.

Подключение GPS модуля к микроконтроллеру AVR ATmega16/32: внешний вид конструкции

Необходимые компоненты

  1. Микроконтроллер ATmega16/32 (купить на AliExpress).
  2. Программатор AVR-ISP (купить на AliExpress), USBASP (купить на AliExpress) или другой подобный.
  3. GPS модуль (uBlox Neo 6M GPS (или 7M) (купить на AliExpress или более дешевый).
  4. ЖК дисплей 16×2 (купить на AliExpress).
  5. Антенна типа “длинный провод”.
  6. Резисторы 2,2 кОм, 1 кОм (купить на AliExpress).
  7. Конденсатор 1000 мкФ (купить на AliExpress).
  8. Конденсатор 10 мкФ (купить на AliExpress).
  9. Преобразователь напряжения LM7805 (купить на AliExpress).
  10. DC Jack.
  11. Адаптер 12 В.
  12. Макетная плата.
  13. Соединительные провода.
  14. Burgstips (соединительные колодки).

Получение данных местоположения от GPS модуля

Ublox Neo 6M представляет собой последовательный GPS модуль, который передает детали местоположения через последовательный порт. Он имеет 4 контакта, назначение которых представлено в следующей таблице.

Контакт Описание
Vcc 2.7 – 5V питающее напряжение
Gnd земля
TXD передача данных
RXD прием данных

Его внешний вид представлен на следующем рисунке.

Внешний вид GPS модуля Ublox Neo 6M

GPS модуль Ublox neo 6M является TTL совместимым и его спецификация представлена в следующей таблице.

Время захвата холодный старт – 27 сек., горячий старт – 1 сек.
Протокол связи NMEA
Последовательная связь 9600 бод/с , 8 бит данных , 1 стоповый бит , нет контроля четности и управления потоком
Потребляемый ток 45 мА

GPS модуль будет передавать данные в виде последовательности строк на скорости 9600 бод/с. Если мы будем использовать последовательный терминал (UART) на скорости 9600 бод/с мы сможем принимать данные от GPS модуля.

GPS модуль передает данные местоположения в реальном времени в NMEA формате. NMEA формат состоит из нескольких предложений (частей), четыре из которых представлены ниже. Более подробно данный формат можно изучить в соответствующей литературе – информации о нем в сети достаточно много.

• $GPGGA: фиксированные данные глобального позиционирования;
• $GPGSV: спутники GPS в зоне видимости;
• $GPGSA: GPS DOP и активные спутники;
• $GPRMC: минимум специфических данных GPS/транзитных данных.

Пример данных, передаваемых GPS модулем на скорости 9600 бод/с, выглядит следующим образом:

$GPRMC,141848.00,A,2237.63306,N,08820.86316,E,0.553,,100418. A*73
$GPVTG,,T,,M,0.553,N,1.024,K,A*27
$GPGGA,141848.00,2237.63306,N,08820.86316,E,1,03,2.56,1.9,M,-54.2, M,,*74
$GPGSA,A,2,06,02,05. 2.75,2.56,1.00*02
$GPGSV,1,1,04,02,59,316,30,05,43,188,25,06,44,022,23,25,03,324,*76
$GPGLL,2237.63306,N,08820.86316,E,141848.00,A,A*65

Когда мы используем GPS модуль для определения местоположения нам из всего этого набора данных будут нужны только координаты, поэтому из представленных данных нам будет нужна только строка $GPGGA, в которой содержатся фиксированные данные системы глобального позиционирования (Global Positioning System Fix Data):

$GPGGA,141848.00,2237.63306,N,08820.86316,E,1,03,2.56,1.9,M,-54.2,M,,*74

Расшифровка данной строки (данных глобального позиционирования):

  1. Строка всегда начинается со знака “$”.
  2. Аббревиатура GPGGA означает фиксированные данные системы глобального позиционирования.
  3. “,” означает разделение между двумя значениями.
  4. 141848.00: всемирное время по Гринвичу 14(hr):18(min):48(sec):00(ms).
  5. 2237.63306,N: Широта (Latitude) 22(градуса) 37(минут) 63306(секунд) North (Север).
  6. 08820.86316,E: Долгота (Longitude) 088(градуса) 20(минут) 86316(секунд) East (Восток).
  7. 1 : Fix Quantity (Фиксированное количество) 0= неправильные данные, 1= достоверные данные, 2=DGPS fix.
  8. 03 : число спутников, которые мы в данный момент видим.
  9. 1.0: HDOP.
  10. 2.56,M : высота над уровнем моря (в метрах).
  11. 1.9,M : Geoids height (геоидная высота).
  12. *74 : контрольная сумма.

То есть, фактически, нам будут необходимы только п.5 и п.6 из представленных данных чтобы получить информацию о местоположении модуля.

Схема устройства

Схема устройства приведена на следующем рисунке.

Схема подключения GPS модуля к микроконтроллеру AVR ATmega16/32

Устройство запитывается от адаптера на 12В постоянного тока, но, поскольку схема работает от напряжения 5В, то в схеме присутствует регулятор напряжения LM7805. ЖК дисплей 16×2 сконфигурирован для работы в 4-битном режиме. GPS модуль также запитывается от напряжения 5В и его вывод передачи (tx pin) напрямую подсоединен к приемному выводу (Rx) микроконтроллера Atmega. Для задания тактовой частоты микроконтроллера используется кварцевый генератор на 8 МГц.

Подача питающего напряжения и подключение антенны

Последовательность действий по подключению GPS модуля к микроконтроллеру AVR

  1. Установить конфигурацию микроконтроллера, включая установку тактовой частоты.
  2. Установить необходимый для подключения ЖК дисплея порт.
  3. Подсоединить GPS модуль к микроконтроллеру используя USART (универсальный синхронно-асинхронный приемопередатчик).
  4. Инициализировать систему UART в режиме ISR (Interrupt Service Routine – процедура обработки прерывания), со скоростью 9600 бод/с и ЖК дисплеем в 4-битном режиме.
  5. Задать в программе 2 символьных массива, в которые будем сохранять широту и долготу.
  6. Принимать по одному символу в каждый момент времени и проверять является ли символ $ или нет.
  7. Если мы приняли $ (нашли его в составе принимаемой строки символов) нам необходимо проверить $GPGGA, то есть эти 6 букв, включая и символ $.
  8. Если это действительно GPGGA, то принимаем всю эту строку и устанавливаем необходимые флаги.
  9. Извлекаем из этой строки широту и долготу и записываем их в наши массивы.
  10. Выводим значения этих массивов на экран ЖК дисплея.
Читайте также:
Продажа машины через CaPrice – отзыв

Пример работы схемы

Объяснение кода программы

Полный код программы вместе с видео, демонстрирующем работу схемы, приведены в конце статьи. В этом разделе объяснены наиболее важные участки кода.

В начале подключим необходимые заголовки и запишем макросы для поразрядной маски для ЖК дисплея и конфигурирования последовательного порта (UART).

Объединение AVR-контроллера с GPS модулем

Продолжаем осваивать работу с 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

Спам

Скажите пожалуйста Ublox GY-NEO6MV2 GPS он сюда подойдет в место EB-500? Какие фюзы выстовлять и как убрать ноль после Е? За ранее спасибо.

vovanxp , в принципе можно ставить любой из стандартного набора частот (4, 6, 8, 12, 16 МГц). Ошибка будет составлять всего 0,16%, в работе этого заметно не будет.
Но лучше поставить кварц на 11059200 Гц, на этой частоте передача будет без ошибок вообще.

Спам

Здравствуйте,есть GPS uBlox NEO-6M ,работает на 9600,подскажите пожалуйста какой кварц ставить?Спасибо

Спам

это относительно не сложно сделать, главное нужно знать в каком формате телефону нужно отсылать данные.

+1 Спам

Великолепная штука вот бы ещё к нему bluetooth модуль прикрутить что бы отправлять не на дисплей 3310, а на мобильное устройство. К примеру у меня Nokia 5320 с GPS дружит только через блютуз. а самого GPS в тел нету.

Спам

diger, без проблем, можно выводить информацию на что угодно.
вот похожий проект на баскоме
http://bascom.at.ua/publ/gps_spidometr/1-1-0-81

Спам

+4 Спам

Наконец, закончил Свой проект 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 метров, то показывает в километрах).

Также использовал симулятор «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

+1 Спам

+1 Спам

Недавно решил проблему с приёмом “Всех нужный данных (строки $GPRMC” и “$GPGGA)” с GPS приёмника – всё работает (прошивка выложена в №36 комментарии).
Теперь появилась необходимость рассчитывать расстояние (в метрах), зная “начальную широту и долготу” и “конечную широту и долготу”. Пример использования: вводишь “конечную широту и долготу”, и на экране пишется остаточное расстояние (в метрах) до “конечной точки”, это очень удобно.
Пробовал использовать формулы из Интернета. Думал, скопирую формулу и всё заработает, но нет, BASCOM постоянно неверно подсчитывал (вероятно из-за округления значений). Поэтому пришлось написать свою формулу, исходя из формул в Интернете.
Результат меня радует. Погрешность, исходя из Яндекс-карты = допустимая для GPS.
Прошивка испытана в Proteus. Думаю, в Жизни тоже будет работать.
Расстояние выводится через UART-терминал, расстояние пишет в метрах (Мне так удобнее), каждый может изменить прошивку под Себя.

Читайте также:
Ставим сетку на бампер и решётку радиатора

Может кому пригодится “Рассчитывать расстояние в метрах, зная начальную и конечную точку”.
Прошивку Я закачал на Яндекс-диск:
http://yadi.sk/d/S43Wort54ihO8

+1 Спам

У меня как раз была такая задумка – вбиваешь координаты места назначения, а на экране отображается оставшееся расстояние до него

Спам

По теореме Пифагора – квадрат гипотенузы=сумма квадратов катетов. Катетами будет разница широт и долготы двух точек. Но надо будет решить проблему, что с увеличением широты изменяется и соотношение градуса к расстоянию (т.е. на экваторе один градус равен ххх км, а на другой широте уже будет равен ууу км.)

Спам

А кто знает, как рассчитывать расстояние (в метрах), зная широту и долготу двух точек? То-есть (например) известна координата “дом” и координата “магазин”, как теперь высчитать расстояние между точками.
Может есть какие-то формулы?

+1 Спам

Спам

+1 Спам

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, без затемнения экрана.

+2 Спам

На днях написал прошивку для опроса “всех нужных данных” с 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) при потере спутников ( =>>> При необходимости, можно заменить выводимые данные на другие (из верхнего списка).

GPS-модуль uBOX NEO6M

Попал мне в руки GPS модуль uBOX NEO6M. Поиграл с ним, на свет родилась небольшая платка для исследования его возможностей. Использовал ардуино-нано на ATmega328P, LCD NOKIA5110, GPS модуль uBOX NEO6M. Все фотки ниже. Кому нужно — копируйте, архив с печаткой, исходник на ассемблере, модель в Протеусе, yadi.sk/d/Sp7UrJNmsSyRG

Читайте также:
Цифровой вольтметр в панель приборов

Comments 25

А как хорошо ловит GPS модуль и сколько времени занимает холодный старт?

Ловит достаточно хорошо, холодный старт порядка 40 сек.

А можно архив перезалить в обычном формате, без ехе?

напрасно вы свои изделия пакуете самораспаковывающимся архивом. Обычно файлы с таким расширением отстреливаются на лету .

Больше не буду, учту на будущее.

Добрый день.
Немогли бы вы мне помочь.

Дело в том что этот модуль мне удалось запустить на ардуино через сериал.

Но так же дуинка шлет на семисегментный индикатор динамической индикацией с него цифры.

немогли б вы показать код по протоколу nmea

Этот модуль работает только с UART-портом. Какой кусок кода интересует, прием координат, количества спутников, фиксации?

прием передача
насколько я понял во время передачи приема по юарт он тормозит исполнение программ на всех пинах. я сделал индикацию через прерывания тогда индикация не прерывается но и информацию с джипиэс он толком получить не может вот мой код если интересно arduino.ru/forum/programm…-serial-iz-za-preryvaniya

Я, если честно, не понимаю Си, я программирую только в AVR-ассемблере. GPS приемник ничего не тормозит, он только раз в секунду отдает свои данные, есть координаты или нет, есть фиксация по спутникам или нет, он все равно будет отдавать свои данные раз в секунду. В описании Вашего кода (начало, зеленым цветом) описывается скорость обработки программой 4800 бит/с, а для NEO6M установлена скорость 9600 бит/с, если код исправный, то проблема кроется в несоответствии скоростей NEO6M и Вашего устройства.

может отдавать данные быстрей?

Может, максимальная скорость, если не изменяет памать, 115200 бит/с

скорость передачи то да, смутило утверждение что только раз в секунду обмен данными.
у себя неонку настроил на 115200
сейчас пришел еще свисток usb neo 7, с поддержкой глонасс, хочу его переделать
жаль что нельзя одновременно использовать и gps и глонасс(

Частота обновления информации меняется настройками или нет, незнаю, но у меня частота обновления настроена по заводскому раз в секунду.

5 герц, ublox 7m — 10 герц
по умолчанию 1 герц

Ну наверно так, в этот вопрос я не углублялся, одного герца мне было достаточно, хотя контроллер обработает и 10 Герц

контролер и больше обработает, ublox настроить можно в u-center, специальная программа для настройки
завтра наверное попробую трекер сделать на нано + 6m+sd (gsm модуль не пришел((( хотел еще писать на сервер по gprs)
у меня в бортовике есть как спидометр сделал, все отлично работает
но так хочется это сделать как вы, на азме, чистом, как в былые времена, но так лень все вспоминать, доучивать ))) всегда любил asm
пока наше си)

Я, если честно, не понимаю Си, я программирую только в AVR-ассемблере. GPS приемник ничего не тормозит, он только раз в секунду отдает свои данные, есть координаты или нет, есть фиксация по спутникам или нет, он все равно будет отдавать свои данные раз в секунду. В описании Вашего кода (начало, зеленым цветом) описывается скорость обработки программой 4800 бит/с, а для NEO6M установлена скорость 9600 бит/с, если код исправный, то проблема кроется в несоответствии скоростей NEO6M и Вашего устройства.

Прошу прощения за тупой вопрос, принципиально пишете программы на ассемблере?
Я только-только начинаю изучать МК, читаю самоучитель Белова, где он приводит пример решения задач на ассемблере и С. Забегая вперёд, я понял, что на С намного быстрее пишется код.
Хочется узнать, какие именно для Вас плюсы в ассемблере? Спасибо.

Я принципиально пишу только на AVR-ассемблере и только для AVR-контроллеров. Очень часто нужно отмерить временной интервал с очень большой точностью, а на Си такого не сделать, да и просто привык уже, 13 лет уже пишу программы. Да и за столько лет накопил достаточно своих библиотек для различных контроллеров, оптимизированных и с точки оптимальности кода и с точки быстроты выполнения.

Спасибо за ответ!
Мне еще нужно будет оооочень много читать и практиковаться…

Купите ардуино, срузу будет платформа для отладки. Для ассемблера используйте AVR-Studio, для виртуализации можно пользоваться Proteus, правда его частенько посещают глюки, особенно если программа прыгает из прерывания в прерывание. Глюки можно преодалеть, если программу по кускам отлаживать. Не бойтесь экспериментировать, иногда нестандартный подход к решению задачи бывает оптимальнее стандартного. Если чего, пишите, покумекаем над проблемой вместе.

С ардуино знаком, уже реализовал два небольших проекта. Код писал с помощью “ардуиновского” языка. Игрушка хорошая, ардуино мне задала некий старт. Но хочется идти дальше.
Стараюсь прислушиваться к радиолюбителям, многие рекомендуют отказываться от ардуино. Т.е. для серьёзных проектов лучше взять отдельный МК и делать всё с нуля. Многие пишут на С, но мне реально хочется понять и ассемблер и С. В любом случае изучить оба языка, думаю, не помешает. Вот только времени уйдёт прилично на это =)
Для изучения взял россыпью тини13, тини2313, атмегу326. Пока учу матчасть.
Спасибо за советы! Буду иметь в виду с кем можно будет пообщаться на тему ассемблера!

Читайте также:
Убираем царапины на пластике, просто.

Без проблем, помогу чем могу.

Модель вижу, каковы возможности и практическое применение? Вариант трекера не рассматривали?

Целью было исследование протокола NMEA в целом и GPS модуля NEO6M в частности, просто до этого с такими приборами не сталкивался. А в принципе, зная протокол NMEA, можно и трекер сделать, и любой прибамбас для авто и не только, где требуется геопозиционирование.

Принимаем данные с 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 и он уже определял координаты. В общем годная и весьма интересная штуковина.
Тестовая программа

Наконец, закончил Свой проект 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 метров, то показывает в километрах).

Читайте также:
Ставим видеокамеру заднего вида на автомобиль VW Beetle

Также использовал симулятор «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) при потере спутников ( =>>> При необходимости, можно заменить выводимые данные на другие (из верхнего списка).

Ещё раз СПАСИБО автору exersizze, за предложенные способ опроса GPS.

Может кому пригодится, в Своё время Мне бы это пригодилось.
Прошивку Я закачал на Яндекс-диск:
http://yadi.sk/d/1vZfydt24YGdd

Просто заменить в исходнике строку $baud = 115200 на $baud = 9600 и снова скомпилировать в bascom-avr

GPS выдает время по “Гринвичу”, Я просто прибавляю +7 к часам, но дата переводится на следующий день по “Гринвичу” (получается дата переводится в 7 часов утра по Моему поясу). Можно написать “фильтровальный календарь”, но тогда нужно высчитывать високосный год.
Может у кого есть способ проще (учитывать разность поясов)? или уже так оставить.

А зачем “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А.

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: