Gps приемник своими руками

Gps приемник своими руками

Во многих современных телефонах есть GPS, но для работы навигатора необходима подгрузка карт через интернет, что в дали от GSM вышек является проблемой. Также большая проблем — это быстрый разряд аккумулятора смартфонов, особенно в холодное время года. За раз путешественник остаётся не только без навигации, но и без связи. Иметь с собой независимое навигационное устройство будет очень кстати. Подобное устройство и будет предлагаться в статье, ниже.

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

Схема самодельного навигатора

Схема строится на микроконтроллере ATMega64 с тактированием от внешнего кварцевого резонатора на 11,0592 МГц. За работу с GPS отвечает NEO-6M от U-blox, это хоть и старенький, но очень распространенный и недорогой модуль с достаточно точным определением координат. Информация выводится на дисплей от Nokia 3310 (5110). Еще в схеме присутствуют магнитометр HMC5883L и акселерометр ADXL335.

  1. SCL — вход тактирования шины I2C
  2. VDD — вход для подключения питания (кормится эта козявка напряжением в диапазоне 2,16-3,6 вольт)
  3. не используется
  4. S1 — дополнительное питание для портов ввода/вывода. Подключается напрямую к выводу VDDIO
  5. не используется
  6. не используется
  7. не исползуется
  8. SETP — первый вход для подключения керамического конденсатора на 0,22uF
  9. GND — земля
  10. С1 — еще один вход для подключения конденсатора. Электролитичиского или танталового на 4,7uF (другой конец конденсатора подключается к земле)
  11. GND — земля
  12. SETC — второй вход для подключения керамического конденсатора на 0,22uF
  13. VDDIO — вход для подключения напряжения которое будет на портах ввода/вывода
  14. не используется
  15. Выход прерывания, когда данные готовы на этом выводе появляется логическая 1
  16. SDA — линия данных интерфейса I2C

Печатная плата навигатора

Схема и плата спроектированы в системе EasyEDA.

Перед прошивкой контроллера рекомендую отключить GPS приемник, так как ножка RXD совмещена c линией MOSI и модуль может начать отправлять данные во время прошивки, что вызовет ошибку в загружаемой программе.

Включение и выключение устройства происходит длинным нажатием на кнопку S5. После включения и поиска спутников (при холодном старте может уйти до 10 минут или даже больше) мы можем посмотреть текущие координаты, нажав на кнопку S2.

Координаты конечной точки можно посмотреть нажав на кнопку S3.

Нажав кнопку S4 попадаем в меню сохранения точки. Сохранить точку можно двумя способами:

  1. сохранить текущие координаты

2. забить координаты вручную

Вводим по очереди градусы, минуты и секунды. Выбранное значение для редактирования мигает.

Вернуться в режим следования к точке можно по короткому нажатию на кнопку S5

Теперь об использовании магнитометра и акселерометра. Для расчета азимута используются данные полученные с GPS приемника, поэтому в случае если рассчитать координаты не возможно (например если спутники не видны или их мало) пропадает возможность и рассчитать направление в котором нужно двигаться, чтобы придти к точке. И первоначально моя задумка была в том, чтобы использовать магнитометр как вспомогательное средство для указания курса. Но столкнулся с некоторыми трудностями.

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

Во-вторых, заметно сказывается различие магнитного склонения в разных частях Земли. Например в Поволжье магнитное склонение составляет 13°, а на другом конце страны склонение уже 11° и в другую сторону. А ведь есть еще и магнитное наклонение — когда линии магнитного поля входят или выходят под углом к горизонту, и много других факторов влияющих на показания.

Конечно, для примерного указания направления можно использовать и такие не калиброванные данные с магнитометра, но пока решил оставить эту задумку и сделал простой компас, который тоже может быть полезен. Компас включается нажатием на кнопку S1. А для того чтобы он указывал более менее правильное направление на север (точнее на северный магнитный полюс), устройство необходимо держать горизонтально. Для помощи в этом по бокам экрана бегают две черточки, которые показывают наклон в ту или иную сторону.

Осталось распечатать на 3-D принтере под устройство корпус, а пока о результатах уличных испытаний. Девайс получился очень интересным и вполне очень даже помогающим выйти к сохраненной точке. Но нужно понимать, что миллиметровой точности ожидать не следует. Ошибка определения GPS координат всего в одну секунду даст неточность определения положения в 20 метров. Также погрешность неизбежно накапливается при округлении в математических расчетах. Но тем не менее устройство даже в городских условиях плотной застройки позволило вернутся к точке с точностью в несколько метров.

Это устройство станет незаменимым помощником тем, кто любит побродить по лесу, грибникам, лыжникам, туристам и другим любителям природы!

Используемые в устройстве компоненты (их можно заказать в интернет-магазине из Китая):

  • GPS модуль NEO-6M
  • ЖК дисплей
  • Магнитометр HMC5883
  • Акселерометр ADXL335

Корпус для направлятора

ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ

П О П У Л Я Р Н О Е:

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

К недостатку прототипов данного устройства можно отнести то, что они ориентированы на решение только узкой измерительной задачи, а именно определения воздухопроницаемости трикотажного полотна, с учетом его фактической плотности.

Цеппер (Zapper) — простой, но эффективный медицинский прибор. Принцип работы основывается на исследованиях доктора Р. Кларка Халда, которая опубликовала свои работы в книге «Источник всех болезней», которую можно скачать бесплатно в конце статьи. Также были опубликованы и последующие книги по биорезонансной терапии. Д-р Кларк, как и многие другие исследователи показали, что слабый импульсный ток определенной частоты убивает паразитов в организме. А это — все виды червей, бактерий, вирусов и грибков, а также раковых клеток… Интересная связь с исследованиям Райха, который считал, что паразитические организмы образуют из распадающейся биомассы обесточенной ткани раковые клетки.

Самодельный Ветряк — (прототип ветряной электростанции)

Я дома сделал некое подобие мини ветряной электростанции, и хочу поделиться её сборкой с вами.

Читайте также:  Cyberlink powerdirector инструкция на русском

Xakep #248. Checkm8

В далёком 1992 году радиолюбитель Матиас Видмар (Matjaz Vidmar) из Словении закончил сборку самодельного приёмника GPS/ГЛОНАСС из кучи разрозненных комплектующих, которые были под рукой. Подробную инструкцию по сборке он опубликовал на своём сайте, включая все схемы и софт. Вот как выглядит GPS-приёмник двадцатилетней давности:

В наши дни один из последователей Матиса, вдохновившись чтением его статей, решил сконструировать нечто более современное, из ныне доступных деталей. Но главное, сделать дизайн самому. Вот что из этого вышло: GPS-приёмник на двух печатных платах. Первая плата изображена на фотографии внизу, а вторая плата — это Xilinx FPGA, через которую осуществляется подключение к компьютеру по кабелю Xilinx Platform USB JTAG.

Дизайн приёмника основан на тех же принципах, что у Матиаса Видмара, который задействовал DSP и 1-битный АЦП с жёстким ограничением. Последняя версия приёмника способна одновременно обрабатывать сигнал не с четырёх, а уже с восьми спутников. По традиции, дизайн устройства и софт опубликованы в свободном доступе, так же как и ссылки на справочные материалы.

Приемник выдает следующие данные:

  1. Координаты – широту, долготу и высоту точки, в которой находится
  2. Время по гринвичу – часы, минуты, секунды
  3. Общее число спутников, обнаруженных приемником
  4. Число спутников, с которых принимается сигнал.

Приемник имеет память на 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. Мы с приемником стояли метрах в трех от воды.

После того, как модуль будет распаян на плате, подключено питание 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 вольта не видно ничего.

Читайте также:  Digital to analog audio converter

На модуль 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,0 3741.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, отсутствует.

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 микроконтроллера.

Читайте также:  Ansys workbench русская версия

Запись происходит так:

— Нажимаем и удерживаем 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 постранично происходит так:

  1. Формируется условие старта – переход из высокого в низкое состояние на выводе SDA при высоком уровне на выводе SCL.
  2. Передается байт с адресом микросхемы 10100000 последний бит 0 – запись.
  3. Предается первый байт адреса памяти, затем второй байт адреса памяти.
  4. Передаются байты данных, адреса слов в странице при этом инкременируются. Изменения на выводе SDA происходят, когда на выводе SCL низкий уровень.
  5. Формируется условие останова – переход из низкого в высокое состояние на выводе SDA при высоком уровне на выводе SCL.

Для чтения данных из памяти приемника надо нажать кнопку “Чтение” ( при этом с 7 бита порта C считывается логический ноль ) и на дисплей выводится: “ Точка:”. Набираем номер точки координаты, которой хотим прочитать, и жмем *. На экран выводятся координаты нашей точки. При вводе номера точки в режиме чтения, на клавиатуре доступны только цифры. Если вводится число номер, которого превышает число записанных точек — выводится сообщение “Нет данных”, затем возвращается сообщение: “ Точка:”. Если в памяти прибора нет сохраненных данных, то при нажатии на кнопку “Чтение” выводится сообщение “Нет данных” и прибор выходит из режима чтения. Читаем из EEPROM AT24C128 так: стартовые, стоповые условия и адресация такие же, как при записи. Адрес, по которому записаны координаты считываемой точки (в программе номер этой точки обозначен переменной nomer_1) находим в массиве opred EEPROM микроконтроллера. Старший байт адреса будет opred[nomer_1]>>2, младший opred[nomer_1] Листать данные можно по возрастанию номеров точек цифрой 2 на клавиатуре, по убыванию нулем. Выход из режима чтения #. В режиме чтения данные можно стереть по одной точке или все разом. Выводим на экран точку, данные которой надо стереть и нажимаем *. В конце первой строки появляется “ Стр? ” Для подтверждения *, если нет — #. Если надо стереть все данные, тогда последовательно нажимаем *, появляется “ Стр? ” , жмем на 1, вместо “ Стр? ” появляется “ Все? ” если подтверждение — *, нет — жмем на #. При стирании в массив EEPROM микроконтроллера — ad, указывающим на свободный адрес страницы в памяти AT24C128 записывается ноль в элемент, с номером равным адресу страницы в AT24C128 стираемой точки. Данные из этой страницы стираются при записи в нее других данных, поэтому не стоит отключать приемник в режиме запись, пока не появится сообщение “ Точка записана ”.

В приемнике предусмотрен режим наведения. В этом режиме определяется расстояние и истинный азимут от точки, в которой находится приемник до любой точки, выбранной из памяти приемника. Для перевода приемника в режим наведения нажмем кнопку “Наведение” при этом со второго бита порта D считывается логический ноль. На экран дисплея выводится запрос “Точка: ” необходимо ввести номер точки расстояние и азимут, до которой будет вычисляться, и нажать *. Координаты этой точки помещаются в массив kr размещенный в EEPROM микроконтроллера. На экран дисплея выводится номер и название точки, затем выводится сообщение “Наведение” и экран дисплея приобретает следующий вид:

В начало четвертной строки выводится азимут (287˚1’48"), за ним расстояние до интересующей нас точки(3284 метра). Так что можно ходить по азимуту, если конечно, компас есть. Магнитное склонение – разница между магнитным и истинным азимутом указано на многих картах. Формулы, по которым вычисляются азимут и расстояние взяты из учебника по геодезии и переработанны для работы с переменной типа float. Координаты точки наведения хранятся в энергонезависимой памяти микроконтроллера, поэтому, если оставить кнопку “Наведение” нажатой и выключить прибор, то после включения прибора продолжится наведение на ту же точку. Для того, чтобы изменить точку наведения надо отжать кнопку, дождаться появления сигнала и набрать номер новой точки.

Дизайн прибора, конечно оставляет желать лучшего но что вышло, то вышло.

Что касается фьюзов, у меня запрограммированы только BODEN – включена схема сброса при снижении напряжения питания и SUT1 – управляет режим запуска тактового генератора при включенной схеме сброса. Остальные не запрограммированы, то есть равны единице.

Ссылка на основную публикацию
Adblock detector