- Необхідні компоненти:
- Електрична схема та пояснення: -
- Отримання даних про місцезнаходження з GPS:
- Кроки до взаємодії GPS з мікроконтролером PIC: -
- Пояснення коду:
GPS є короткою формою системи глобального позиціонування. Це система, яка забезпечує точну висоту, широту, довготу, час UTC та багато іншого, що береться з 2, 3, 4 або більше супутника. Для зчитування даних з GPS нам потрібен мікроконтролер, і ми вже зв’язали GPS з Arduino та Raspberry Pi.
Ми вибрали GPS-модуль G7020, який виготовлений U-blox. Ми отримаємо довготу та широту певної позиції із супутника та відобразимо їх на РК-дисплеї розміром 16x2. Отже, тут ми взаємодіємо GPS з мікроконтролером PIC16F877A за допомогою мікрочіпу.
Необхідні компоненти:
- Pic16F877A - пакет PDIP40
- Хлібна дошка
- Пікіт-3
- Адаптер 5 В
- РК-дисплей JHD162A
- GPS-модуль uBLOX-G7020
- Провід для підключення периферії.
- 4.7k резистори
- 10к горщик
- Кристал 20 мГц
- 2 шт. Керамічні конденсатори 33pF
Електрична схема та пояснення: -
РК-дисплей розміром 16x2 підключений через мікроконтролер PIC16F877A, в якому RB0, RB1, RB2 підключені відповідно до виводу РК, який є RS, R / W та E., D6, D7. РК-дисплей підключається в 4-бітному режимі або режимі гризти. Дізнайтеся більше про взаємодію РК з мікроконтролером PIC.
Кристалічний генератор 20 МГц з двома керамічними конденсаторами 33pF, підключеними через штифт OSC1 та OSC2. Він забезпечить мікроконтролеру постійну тактову частоту 20 МГц.
GPS-модуль uBlox-G7020, приймає та передає дані за допомогою UART. PIC16F877A складається з одного драйвера USART всередині мікросхеми, ми будемо отримувати дані від GPS-модуля USART, тому буде здійснено перехресне з'єднання від мікроконтролера Rx pin до PIN-коду Tx GPS та PIN-коду прийому USART, з'єднаного через Transmit-штифт GPS.
UBlox-G7020 має кольоровий код для штифтів. Позитивний або 5-контактний штифт має червоний колір, негативний або GND - чорний, а передавальний - синій.
Я все це пов’язав у макет.
Отримання даних про місцезнаходження з GPS:
Давайте подивимося, як взаємодіяти GPS за допомогою USART, і побачимо результат на РК-дисплеї 16x2 символів.
Модуль передаватиме дані в декількох рядках зі швидкістю передачі 9600 бод. Якщо ми використовуємо термінал UART зі швидкістю 9600 бод, ми побачимо дані, отримані GPS.
Модуль GPS надсилає дані про положення відстеження в реальному часі у форматі NMEA (див. Знімок екрана вище). Формат NMEA складається з декількох речень, у яких нижче наводяться чотири важливі речення. Детальніше про речення NMEA та його формат даних можна знайти тут.
- $ GPGGA: дані виправлення глобальної системи позиціонування
- $ GPGSV: супутники GPS на увазі
- $ GPGSA: GPS DOP та активні супутники
- $ GPRMC: Рекомендовані мінімальні конкретні дані GPS / Транзиту
Дізнайтеся більше про дані GPS та рядки NMEA тут.
Це дані, отримані 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. Тільки рядок $ 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: GMT час як 14 (год.): 18 (хв.): 48 (сек.): 00 (мс)
5. 2237.63306, N: Широта 22 (градус) 37 (хвилини) 63306 (сек) Північ
6. 08820.86316, E: Довгота 088 (градус) 20 (хвилини) 86316 (сек) схід
7. 1: Виправити кількість 0 = недійсні дані, 1 = дійсні дані, 2 = виправлення DGPS
8. 03: Кількість супутників, які зараз переглядаються.
9. 1.0: HDOP
10. 2,56, М: Висота над рівнем моря (Висота над рівнем моря в метрах)
11. 1.9, М: Висота геоїдів
12. * 74: контрольна сума
Отже, нам потрібні №5 та №6 для збору інформації про розташування модуля або про те, де він знаходиться.
Кроки до взаємодії GPS з мікроконтролером PIC: -
- Встановіть конфігурації мікроконтролера, які включають конфігурацію осцилятора.
- Встановіть бажаний порт для РК-дисплея, включаючи реєстр TRIS.
- Підключіть модуль GPS до мікроконтролера за допомогою USART.
- Ініціалізуйте систему USART у режимі безперервного прийому, зі швидкістю передачі даних 9600 бодів та РК-дисплеєм у 4-бітному режимі.
- Візьміть два масиви символів залежно від довжини широти та довготи.
- Отримуйте по одному символьному біту за раз і переконайтеся, що він починається з $ чи ні.
- Якщо $ Receive, то це рядок, нам потрібно перевірити GPGGA, ці 5 літер і кому.
- Якщо це GPGGA, тоді ми будемо пропускати час і шукатимемо широту та довготу. Ми будемо зберігати широту та довготу у двома символьними масивами, поки N (північ) та E (схід) не будуть отримані.
- Ми надрукуємо масив на РК-дисплеї.
- Очистити масив.
Пояснення коду:
Давайте розглянемо код рядка за рядком. Перші кілька рядків стосуються налаштування бітів конфігурації, про що було пояснено в попередньому підручнику, тому наразі я їх пропускаю. Повний код наведено в кінці цього підручника.
Ці п’ять рядків використовуються для включення файлів заголовків бібліотеки, lcd.h та eusart.h - для LCD та USART відповідно. А xc.h - це файл заголовка мікроконтролера.
#включати
У функції void main () - system_init () ; функція використовується для ініціалізації РК та USART.
Порожня основна (порожня) { TRISB = 0x00; // Встановлення як вихідного system_init ();
Lcd_init (); та EUSART_Intialize (); викликається з двох бібліотек lcd.h та eusart.h
void system_init (void) { lcd_init (); // Це ініціалізує lcd EUSART1_Initialize (); // Це ініціює Eusart }
У той час як цикл ми порушуємо рядок GPGGA, щоб отримати довгота і широта координат. Ми отримуємо по одному біту за раз і порівнюємо його з окремими символами, присутніми в рядку GPGGA.
Ми порушуємо отримані коди: -
incomer_data = EUSART1_Read (); // Перевірте рядок '$ GPGGA,' / * ------------------------------ Покроковий пошук лінії GPGGA- --------------------------- * / if (incomer_data == '$') {// Перший оператор даних GPS починається з $ sign incomer_data = EUSART1_Read (); // Якщо перший if стає істинним, то наступний етап if (incomer_data == 'G') { incomer_data = EUSART1_Read (); якщо (incomer_data == 'P'); { incomer_data = EUSART1_Read (); якщо (incomer_data == 'G'); { incomer_data = EUSART1_Read (); якщо (incomer_data == 'G') { incomer_data = EUSART1_Read (); якщо (incomer_data == 'A') { incomer_data = EUSART1_Read (); if (incomer_data == ',') {// перший, отриманий incomer_data = EUSART1_Read (); // На цьому етапі завершено остаточну реєстрацію, знайдено GPGGA.
Використовуючи цей код, ми пропускаємо час UTC.
while (incomer_data! = ',') {// пропуск часу GMT GMT incomer_data = EUSART1_Read (); }
Цей код призначений для зберігання даних широти та довготи в масиві символів.
incomer_data = EUSART1_Read (); широта = incomer_data; while (incomer_data! = ',') { for (array_count = 1; incomer_data! = 'N'; array_count ++) { incomer_data = EUSART1_Read (); широта = incomer_data; // Зберігаємо дані Latitude } incomer_data = EUSART1_Read (); if (incomer_data == ',') { for (array_count = 0; incomer_data! = 'E'; array_count ++) { incomer_data = EUSART1_Read (); довгота = incomer_data; // Зберігаємо дані довготи } }
І нарешті, ми надрукували довготу та широту на РК-дисплеї.
array_count = 0; lcd_com (0x80); // Рядок РК-ряд, вибір (array_count <12) {// Масив даних Latitude складає 11-значні дані lcd_data (широта); // Друк даних Latitude array_count ++; } array_count = 0; lcd_com (0xC0); // Вибір другого рядка РК при (array_count <13) {// Масив даних довготи - це 12-значні дані lcd_data (довгота); // Друк масиву даних масиву_count ++; }
Ось як ми можемо з'єднати модуль GPS з мікроконтролером PIC, щоб отримати широту та довготу поточного місцезнаходження.
Повні файли коду та заголовків наведені нижче.