Приемник выдает следующие данные:
Приемник имеет память на 200 точек. В память могут быть занесены координаты точки, определяемые приемником в данный момент времени, а так же предусмотрена возможность записывать в память приемника координаты точек с географических карт.
С помощью приемника можно определять расстояние и истинный (не путать с магнитным) азимут от точки, в которой находится приемник, до любой точки, выбранной из его памяти.
Модуль ЕВ-500 прекрасно подходит для мобильных приложений, потому что имеет небольшие габариты и малое потребление тока.
Точность координат зависит от числа спутников, сигнал с которых поступает на модуль, их должно быть не менее 3.
Для обнаружения спутников модуль использует 66 каналов, при этом, если антенна пассивная, потребляет 28 мА. После обнаружения спутников число каналов и, следовательно, потребляемый ток уменьшаются.
Напряжение питания от 3 до 4.2 вольт.
Связь с модулем – по двум равноценным UART.
Выводы UART — TX0,RX0 и TX1,RX1.
На вывод GPS status подключен через резистор светодиод. Пока связь со спутниками не установлена на выходе логическая 1-светодиод горит постоянно, при обнаружении спутников мигает с частотой 1 Гц. После отладки схемы его можно снять.
Вывод V_RTC_3V3 – на этот вывод необходимо подать питание, без этого модуль не запустится. Можно соединить с питанием модуля, но лучше подключить стандартную литиевую батарейку типа CR на 3 вольта, тогда все настройки сохранятся в памяти модуля и после отключения приемника. Потребление RTC всего 1 мкА, так что батарейки хватит надолго.
Питание подается на вывод VIN_3V3.
Антенна подключается на вывод RF_INPUT. Дорожка, соединяющая вывод модуля с фидером антенны должна быть как можно короче с земляным полигоном по бокам. У меня антенна пассивная
35*35 с полигоном под ней 70*70. Запустилась без проблем даже в тумане на лесной поляне. И точность весьма приличная.
Хорошая активная антенна дорого стоит, хороший МШУ вещь не из дешевых. Дешевая китайская антенна, в условиях сильных помех показала себя хуже пассивной, как видно там усилитель не совсем малошумящий. Кроме того питается она от 3,3 вольт минимум, а с модуля подается в линию
2,8 В. Потому надо отсекать конденсатором постоянное напряжение на выводе RF_INPUT, вскрывать антенну, заводить внешнее питание — много мороки.
Антенну не стоит размещать рядом с модулем, чтобы шумы от модуля не мешали.
Это на карту GOOGLE нанесены координаты измеренной точки. Расстояние от стенки дома до воды метров 10. Мы с приемником стояли метрах в 3-х от воды.
После того, как модуль будет распаян на плате, подключено питание VIN_3V3 и V_RTC_3V3, антенна и по свечению светодиода вы убедились, что все у вас работает — надо проверить скорость обмена UART. Это необходимо для программирования USAR(синхронно асинхронный приемопередатчик) микроконтроллера.
Соедините RX1,TX1 или RX0,TX0 через MAX3232(работает от 3 вольт) с COM портом компьютера. Для USB можно спаять переход на FT232RL -недорогая надежная микросхема с драйверами для всех ОС. У меня заработала сразу без проблем.
Проверьте скорость, на которой отзовется модуль, по даташиту это 9600 у меня заработал на 115200. Если не отзовется – перебирайте скорости. Сигнал для этого не обязателен – светодиод может и не мигать. Я пользуюсь терминалом в CVAVR или программой Terminal v1.9b бесплатная и очень удобная.
Обмен происходит по протоколу NMEA 0183.
Обвязка ATMEGA 16 стандартная. Вывод REZET подтянут к питанию резистором 10 кОм. Тактовая частота задается кварцевым резонатором 7.3728 мГц. Питание на АЦП микроконтроллера подается через LC фильтр — дроссель 10 мкГн, конденсатор 1 мкФ. Вывод источника опорного напряжения АЦП AREF соединен с выводом питания АЦП. Разъем для программатора на схеме не показан. К порту B подключен LCD дисплей WH1604B — 4 строки по 16 символов. Подстроечным резистором R2 20 кОм регулируется контрастность. Кнопка на подсветке тактовая с целью экономии заряда аккумулятора.
Между UART модуля и USART микроконтроллера в качестве гальванической развязки установлена микросхема ADUM1201. Максимальная амплитуда импульсов от модуля, если смотреть осциллографом не больше 2,8 В. Микроконтроллер воспринимает импульс, как единицу от 2.5 В. Микросхема поднимет амплитуду импульса до 5 вольт — величины напряжения питания микроконтроллера. Во избежание сбоев ADUM лучше поставить.
AT24C128 микросхема электрически стираемого и программируемого постоянного запоминающего устройства (ЭСППЗУ) с интерфейсом шины I2C – память приемника, где и будут храниться данные всех 200 точек, но об этом позже. Выводы CDL –синхронизации последовательной связи и CDA -последовательной передачи данных и адреса должны быть подтянуты к питанию резистором 4.7-5.1кОм. Вывод WP- защита от записи соединен с GND. Выводы A0,A1- выводы адресации используются, если на шину подключены несколько микросхем, возможны 4 комбинации. У нас одна микросхема, поэтому выводы A0,A1 соединены с GND – адрес равен нулю.
На операционном усилителе собран делитель. Напряжение от аккумулятора делится пополам и подается на вход АЦП микроконтроллера — бит 0 порта A, для контроля величины напряжения литиевого аккумулятора.
Клавиатура для общения с приемником собрана на тактовых кнопках. Кнопки ЧТЕНИЕ и ЗАПИСЬ – тактовые. Кнопка НАВЕДЕНИЕ – с фиксацией. Резисторы 300 Ом нужны для ограничения тока, чтобы случайно не спалить порт микроконтроллера.
Теперь о питании приемника. У меня стоит литиевый аккумулятор на 3.7 вольта, при полной зарядке примерно 4.15 В. Для питания микроконтроллера с кварцем 7.3728 мГц и дисплея WH1604 надо 5 вольт. Хотя в даташите на дисплей и стоит Vdd от 3 до 5 вольт, но при стандартной схеме регулирования контрастности и напряжении питания 3.3 вольта не видно ничего.
На модуль EB-500 желательно подавать 3.3 вольта. На микросхеме LM2623 собран повышающий импульсный стабилизатор на 5 вольт. Микросхема LM2623 разработана специально для цифровой аппаратуры, у нее низкий уровень шумов и минимум обвязки. Конденсаторы C4 и C5 установлены дополнительно для уменьшения шумов.
Питание для модуля EB-500 получаем с выхода линейного стабилизатора LP2980-3.3. Микросхема с очень низким собственным потреблением, потери на ней максимально 50 мВт, очень мало греется, а получаем стабилизированные 3.3 вольта практически без шумов.
Теперь о программе. Использован компилятор CodeVisionAVR.
Протокол NMEA 0183 содержит много всякой полезной информации, но нас интересуют лишь координаты, время, высота над уровнем моря, число видимых и используемых спутников. Потому выбираем лишь 3 сообщения (нужная информация выделена красным):
1.$GPRMC,181057.000,A,5542.2389,N,03741.6063,E,0.47,74.50,190311,,,A*51
Здесь нас интересует символ под номером 18 (отсчет начинаем с 0) это если это A то данные достоверны (есть сигнал), если V — недостоверны.
2.$GPGGA,181058.000,5542.2389,N,03741.6063,E,1,8,1.34,115.0,M,14.6,M,,*54
Отсюда берем почти всю информацию.
181058.000 — время
5542.2389,N — широта
03741.6063,E — долгота
1 — GPS fix ( 0 = Данные не верны, 1 = Позиция зафиксирована, 2 = DGPS (повышенная точность))
8— количество использованных спутников
1.34 — HDOP, горизонтальная точность
115.0,M — высота над уровнем моря
14.6,M — Геоидальное различие — различие между земным эллипсоидом WGS-84 и уровнем моря(геоидом)
— время с момента последнего обновления DGPS, отсутствует.
*54 — КС
3.$GPGSV,4,1,13,28,65,075,17,26,53,202,37,15,50,278,17,27,39,290,24*7D
Здесь нас интересует символы номер 11 и 12.
13 — Полное число видимых спутников.
Сразу после включения приемника запускается АЦП (установкой единицы в 6 бит регистра ADCSRA АЦП микроконтроллера) для проверки уровня заряда литиевого аккумулятора. В подпрограмме прерывания по завершению преобразования АЦП забираются и суммируются 100 значений из регистра данных, а далее вычисляется среднее значение напряжения аккумулятора. Если напряжение на аккумуляторе ниже или равно 3.2 вольта на экран дисплея выводится сообщение “Аккумулятор разряжен”. Предельное напряжение, до которого может разрядиться аккумулятор 2.7 вольта. Лучше покупать аккумулятор с контроллером заряда.
Регистр USART микроконтроллера UCSRB=0x90 это означает, что разрешено прерывание по завершению приема и включен приемник. Функция обработки прерывания по завершению приема состоит в следующем:
Данные забираются из буферного регистра UDR при условии, что (UCSRA&=0x18)==0 ,то есть в регистре UCSRA не стоит флаг ошибки кадрирования и флаг переполнения. Если приемник находится в режиме записи или чтения (переменная flag=1), то данные просто забираются из буфера приемника USART , чтобы не было переполнения буфера. Попытки отключать на это время приемник USART приводили к потере связи с модулем. Если flag=0, принятые из буфера данные анализируются. Если найдено начало строки — символ $ по коду ASCII это 36, вся строка до конца — код 13(возврат каретки) помещается в массив gps. Затем проверяем символы из gps[3], gps[4] и gps[5], ищем сочетание RMC, GGA или GSV все остальные сообщения игнорируются. Если сообщение RMC, переменную a приравниваем к элементу массива gps[18], если GSV – вычисляем из символов, находящихся в gps[11]и gps[12] число видимых спутников. Если это GGA переходим из функции обработки прерывания в основную программу. В программе сначала проверяем переменную а, если она равна 86 это символ V по коду ASCII — отсутствие сигнала, на дисплей выводится сообщение “Нет сигнала”
Если переменная a = 65 — символ A это значит, что появился сигнал. Извлекаем из массива gps, куда помещено все сообщение GGA все интересующие нас данные. Вычисляем время, координаты, число спутников с которыми установлена связь, высоту над уровнем моря. Все эти данные плюс число видимых спутников, вычисленных в подпрограмме прерывания, помещаем в буферы для вывода на LCD, и выводим на экран дисплея. Получается вот такая картинка:
В первую строку выводится широта точки и число спутников, с которыми установлена связь, их семь. Вторая строка – долгота и число видимых спутников — 11. Третья строка – время по гринвичу и высота над уровнем моря или океана.
Для записи данных нажимаем кнопку “Запись”. Все данные сохраняются во внешней памяти микросхеме ЭСППЗУ EEPROM AT24C128 с интерфейсом шины I2C. Память микросхемы организована как 16384 слов по 8 бит в каждом. Внутренне 16384 байта памяти разделены на 256 страниц по 64 байта в каждой. Запись может производиться как побайтно, так и страницами. Для упрощения жизни выбрана постраничная запись. Адрес микросхемы один байт: три старших бита адрес AT24C он всегда 101, последний бит обозначает запись или чтение. Если ноль – запись, единица – чтение. Адресация памяти — два байта, старшие биты номер страницы младшие – номер слова в этой странице. Получается: номера страниц от 0 до 255 это 8 бит плюс номера слов в странице от 0 до 63 ещё 6 бит, так что для адресации памяти надо 14 бит. Чтобы получить старший байт берем номер страницы и сдвигаем его вправо на две позиции — два старших бита обнулятся, а в шесть младших переместятся 6 старших бита адреса страницы. Затем тот же номер страницы сдвигаем влево на шесть позиций и получаем младший байт адреса, где два старших бита это два младших бита адреса страницы остальные шесть – нули. Теперь надо запомнить номер адреса внешней памяти для записываемой точки. Для этого используем энергонезависимую память микроконтроллера — EEPROM. Для ATMEGA16 EEPROM составляет 512 байт. Размещаем в EEPROM два массива eeprom unsigned char ad[201] и eeprom unsigned char opred[201]. Массив ad указывает на свободную страницу памяти АТ24С128, единица означает, что страница занята, ноль — свободна. К примеру: ad[20]=0 означает, что страница 20 памяти АТ24С128 свободна, а если ad[20]=1 , тогда занята. Перед тем, как записать данные во внешнюю память перебираем все элементы массива ad, инкременируя номер элемента g от 0, пока не будет найдено условие ad[g]=0. Адрес страницы внешней памяти будет равен g. Теперь запоминаем соответствие адреса страницы памяти АТ24С128 номеру запоминаемой точки. opred[номер точки]=g (адресу страницы памяти АТ24С128). Если надо стереть данные точки, то в ad[номер стираемой точки] записываем ноль, а в массиве opred перемещаем номера элементов, так чтобы, начиная от номера точки на единицу больше стираемой: opred[номер точки]= opred[номер точки-1], а номер общего числа записанных точек уменьшаем на единицу. Если же надо стереть все данные из памяти, то число записанных точек и массив ad обнуляем. При записи новых данных в память АТ24С128 старые данные стираются. Переменная nomer указывающая на общее число записанных точек так же размещается в EEPROM микроконтроллера.
Запись происходит так:
— Нажимаем и удерживаем 50 мс (задержка в 50 мс – защита от дребезга контактов установлена на всех кнопках) кнопку “ЗАПИСЬ”. На экран дисплея в первую строку выводится: “ Tочка:(№точки)” номер точки, записанной в EEPROM микроконтроллера при этом инкременируется. Если номер точки больше 200, появляется сообщение “ Память занята ” и приемник выходит из режима запись. Во вторую строку надо ввести с клавиатуры название точки до 16 символов из цифр и строчных букв русского алфавита. Принцип ввода такой же, как в мобильном телефоне: нажимать на кнопку клавиатуры, пока не появится нужный символ. При ошибке набора стирается символ решеткой. Выводы клавиатуры подключены к битам 3,4 , 5 порта D и к битам 2,3,4,5 порта C. Биты порта D сконфигурированы как выходы, биты порта C как входы с подтяжкой. На биты порта D с частотой 5мс подается низкий уровень и при этом считывается значение битов порта С. К примеру если на PIND.3 подан ноль и логический ноль появился на PINС.2 значит, активна кнопка К4 – 3дежз. Кнопка активна 2.2 секунды — 16 битный таймер T1 запускается с частотой 28800 Гц при появлении нуля на соответствующем бите порта C. При переходе таймера через значение 65535 генерируется прерывание и программа переходит в функцию обработки прерывания по переполнения таймера. Если до истечения 2.2 секунды стала активна другая кнопка, то, как и в случае переполнения таймера — таймер останавливается, а все значения, набранные на ранее активной кнопке, обнуляются. После набора названия точки — нажимаем *. В третью строку выводиться сообщение “Текущая точка?” Если надо запомнить точку, определяемую приемником в данный момент времени нажимаем *, на дисплей выводится сообщение “Точка записана ” и приемник выходит из режима запись. Если вводятся координаты с карты, тогда нажимаем #, на экране выводится запрос “Широта?” Вводим координаты широты восемь цифр без точек — 49˚52’16.54″ вводятся, как 49521654 далее нажимаем *, выводится запрос “Долгота?” так же вводится и долгота, вместо 36˚18’51.57″ — 36185157 и далее *.
На дисплей выводится сообщение “Точка записана ” и приемник выходит из режима запись. При записи координат с карты значение высоты не записывается и при чтении координат этой точки высота равна нулю. Запись в EEPROM AT24C128 постранично происходит так:
Для чтения данных из памяти приемника надо нажать кнопку “Чтение” ( при этом с 7 бита порта C считывается логический ноль ) и на дисплей выводится: “ Точка:”. Набираем номер точки координаты, которой хотим прочитать, и жмем *. На экран выводятся координаты нашей точки. При вводе номера точки в режиме чтения, на клавиатуре доступны лишь цифры. Если вводится число номер, которого превышает число записанных точек — выводится сообщение “Нет данных”, далее возвращается сообщение: “ Точка:”. Если в памяти прибора нет сохраненных данных, то при нажатии на кнопку “Чтение” выводится сообщение “Нет данных” и прибор выходит из режима чтения. Читаем из EEPROM AT24C128 так: стартовые, стоповые условия и адресация такие же, как при записи. Адрес, по которому записаны координаты считываемой точки (в программе номер этой точки обозначен переменной nomer_1) находим в массиве opred EEPROM микроконтроллера. Старший байт адреса будет opred[nomer_1]>>2, младший opred[nomer_1]<<6. Только после передачи второго байта с адресом памяти посылается байт с адресом микросхемы 10100001, где последний бит 1 – чтение. В программе чтение идет побайтно, сначала считываются байты с названием точки. Считывается байт, по номеру кода в считанном байте определяется строка, содержащая код знакогенератора LCD модуля и символ соответствующий этому коду выводится на экран, далее младший байт адреса памяти инкременируется. Так выводятся 16 символов названия точки. Затем считываются байты с данными широты, долготы и высоты точки. После считывания очередного байта младший байт адреса памяти инкременируется. Все считанные параметры помещаются в буферы для вывода на LCD и выводятся на экран дисплея:
Листать данные можно по возрастанию номеров точек цифрой 2 на клавиатуре, по убыванию нулем. Выход из режима чтения #. В режиме чтения данные можно стереть по одной точке или все разом. Выводим на экран точку, данные которой надо стереть и нажимаем *. В конце первой строки появляется “Стр?” Для подтверждения *, если нет — #. Если надо стереть все данные, тогда последовательно нажимаем *, появляется “Стр?” , жмем на 1, вместо “Стр?” появляется “Все?” если подтверждение — *, нет — жмем на #. При стирании в массив EEPROM микроконтроллера — ad, указывающим на свободный адрес страницы в памяти AT24C128 записывается ноль в элемент, с номером равным адресу страницы в AT24C128 стираемой точки. Данные из этой страницы стираются при записи в нее других данных, поэтому не стоит отключать приемник в режиме запись, пока не появится сообщение “Точка записана”.
В приемнике предусмотрен режим наведения. В этом режиме определяется расстояние и истинный азимут от точки, в которой находится приемник до любой точки, выбранной из памяти приемника. Для перевода приемника в режим наведения нажмем кнопку “Наведение” при этом со второго бита порта D считывается логический ноль. На экран дисплея выводится запрос “Точка: ” необходимо ввести номер точки расстояние и азимут, до которой будет вычисляться, и нажать *. Координаты этой точки помещаются в массив kr размещенный в EEPROM микроконтроллера. На экран дисплея выводится номер и название точки, далее выводится сообщение “Наведение” и экран дисплея приобретает следующий вид:
В начало четвертной строки выводится азимут (287˚1’48»), за ним расстояние до интересующей нас точки(3284 метра). Так что можно ходить по азимуту, если конечно, компас есть. Магнитное склонение – разница между магнитным и истинным азимутом указано на многих картах. Формулы, по которым вычисляются азимут и расстояние взяты из учебника по геодезии и переработанны для работы с переменной типа float. Координаты точки наведения хранятся в энергонезависимой памяти микроконтроллера, поэтому, если оставить кнопку “Наведение” нажатой и выключить прибор, то после включения прибора продолжится наведение на ту же точку. Для того, чтобы изменить точку наведения надо отжать кнопку, дождаться появления сигнала и набрать номер новой точки.
Дизайн прибора, конечно оставляет желать лучшего но что вышло, то вышло.
Что касается фьюзов, у меня запрограммированы лишь BODEN – включена схема сброса при снижении напряжения питания и SUT1 – управляет режим запуска тактового генератора при включенной схеме сброса. Остальные не запрограммированы, то есть равны единице.
Список радиоэлементовОбозначение
Тип
Номинал
Количество
ПримечаниеМагазинМой блокнот
Схема 1.U1
ИС RS-232 интерфейсаMAX32321
EB1
GPS-модульEB-5001
D1
Светодиод1
С1-С5, С12
Конденсатор0.1 мкФ6
С8
Конденсатор100 пФ1
С9, С10
Конденсатор4.7 мкФ2
С11
Конденсатор0.01 мкФ1
R7
Резистор1
J1
РазьемRS-2321
Antenna1
Антенный разьем1
L1
Катушка индуктивности1
В1
Батарея питания3 В1
Схема 2.U2
Микроконтроллер1
AD1
МикросхемаADUM12011
ОУ1
Операционный усилитель1
AT1
МикросхемаAT24C1281
С6, С7
Конденсатор0.15 мкФ2
С13, С17
Конденсатор0.1 мкФ2
С14, С16
Конденсатор22 пФ2
С15
Конденсатор1 мкФ1
R1, R3
Резистор20 кОм2
R2
Подстроечный резистор20 кОм1
R4
Резистор10 Ом1
R5, R6
Резистор4.7 кОм2
R8
Резистор10 кОм1
Y1
Кварцевый резонатор7.3728 мГц1
L2
Катушка индуктивности10 мкГн1
DS1
LCD-дисплейWH1604B1
К1
Тактовая кнопка1
Схема 3.D2-D4
Диод3
R9-R15
Резистор300 Ом7
К2-К15
Тактовая кнопка14
Кн1
Кнопка с фиксированным положением1
Схема 4.DD1
Линейный регуляторLP2980-3.31
DC1
Микросхема1
D1
Диод1
С1
Конденсатор4.7 пФ1
С2
Электролитический конденсатор100 мкФ1
С3
Электролитический конденсатор22 мкФ1
С4
Конденсатор33 пФ1
С5, С7
Конденсатор4.7 мкФ2
С6
Конденсатор0.1 мкФ1
R1
Резистор150 кОм1
R2
Резистор100 кОм1
R3
Резистор300 кОм1
L1
Катушка индуктивности4.7 мкГн1
Кн1
Кнопка с фиксированным положением1
В1
Литиевый аккумулятор3.7-4.2 В1
Добавить все
Скачать список элементов (PDF)
Прикрепленные файлы:
- gps3.eep (1 Кб)
- gps3.hex (44 Кб)
- программа.docx (26 Кб)