- المكونات المطلوبة:
- مخطط الدائرة وشرحها: -
- الحصول على بيانات الموقع من GPS:
- خطوات واجهة GPS مع متحكم PIC: -
- شرح الكود:
GPS هو الشكل المختصر لنظام تحديد المواقع العالمي. إنه نظام يوفر الارتفاع الدقيق وخط العرض وخط الطول ووقت التوقيت العالمي المنسق والعديد من المعلومات الأخرى المأخوذة من قمر صناعي 2 أو 3 أو 4 أو أكثر. لقراءة البيانات من نظام تحديد المواقع العالمي (GPS) ، نحتاج إلى بعض وحدات التحكم الدقيقة وقد قمنا بالفعل بتوصيل GPS مع Arduino ومع Raspberry Pi.
لقد اخترنا وحدة G7020 GPS المصنوعة بواسطة U-blox. سوف نتلقى خط الطول وخط العرض لموقع معين من القمر الصناعي وسنعرض نفس الشيء على شاشة LCD مقاس 16 × 2 حرف. لذلك سنقوم هنا بواجهة GPS مع متحكم PIC16F877A بواسطة رقاقة دقيقة.
المكونات المطلوبة:
- Pic16F877A - حزمة PDIP40
- مجلس الخبز
- Pickit-3
- محول 5V
- شاشة LCD JHD162A
- وحدة GPS uBLOX-G7020
- أسلاك لتوصيل الأجهزة الطرفية.
- 4.7k المقاومات
- 10 كيلو وعاء
- 20 ميجا هرتز كريستال
- 2 قطعة 33pF مكثفات السيراميك
مخطط الدائرة وشرحها: -
يتم توصيل شاشة LCD مقاس 16 × 2 حرفًا عبر متحكم PIC16F877A ، حيث يتم توصيل RB0 و RB1 و RB2 على التوالي بدبوس LCD وهو RS و R / W و E. ، D6 ، D7. شاشة LCD متصلة في وضع 4 بت أو وضع nibble. تعرف على المزيد حول توصيل شاشة LCD بوحدة التحكم الدقيقة PIC.
مذبذب بلوري 20 ميجا هرتز مع اثنين من مكثف السيراميك 33pF متصل عبر OSC1 و OSC2 pin. سيوفر ترددًا ثابتًا على مدار الساعة يبلغ 20 ميجا هرتز للمتحكم الدقيق.
uBlox-G7020 GPS وحدة استقبال ونقل البيانات باستخدام UART. يتكون PIC16F877A من برنامج تشغيل USART واحد داخل الشريحة ، وسوف نتلقى بيانات من وحدة GPS بواسطة USART ، لذلك سيتم إجراء اتصال متقاطع من متحكم Rx pin إلى Tx pin الخاص بـ GPS و USART Receive pin المتصل عبر دبوس الإرسال الخاص بـ GPS.
يحتوي uBlox-G7020 على رمز لوني للمسامير. الدبوس الموجب أو 5V باللون الأحمر ، والدبوس السلبي أو GND باللون الأسود ودبوس الإرسال باللون الأزرق.
لقد ربطت كل هذا في اللوح.
الحصول على بيانات الموقع من GPS:
دعونا نرى كيفية واجهة GPS باستخدام USART ونرى النتيجة في شاشة LCD مقاس 16 × 2 حرف.
ستنقل الوحدة البيانات في سلاسل متعددة بمعدل 9600 باود. إذا استخدمنا محطة UART بمعدل 9600 Baud ، فسنرى البيانات التي يتلقاها 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 ، أ ، أ * 65
عندما نستخدم وحدة GPS لتتبع أي موقع ، فإننا نحتاج فقط إلى الإحداثيات ويمكننا العثور عليها في سلسلة $ GPGGA. يتم استخدام سلسلة GPGGA (بيانات نظام تحديد المواقع العالمي) فقط في الغالب في البرامج ويتم تجاهل السلاسل الأخرى.
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 (ساعة): 18 (دقيقة): 48 (ثانية): 00 (مللي ثانية)
5. 2237.63306 ، شمالاً: خط العرض 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، M: الارتفاع (الارتفاع فوق مستوى سطح البحر بالمتر)
11. 1.9 ، م: ارتفاع جيويدس
12. * 74: المجموع الاختباري
لذلك نحن بحاجة إلى الرقمين 5 ورقم 6 لجمع معلومات حول موقع الوحدة أو مكان وجودها.
خطوات واجهة GPS مع متحكم PIC: -
- اضبط تكوينات الميكروكونترولر التي تتضمن تكوين المذبذب.
- اضبط المنفذ المرغوب لشاشة LCD بما في ذلك سجل TRIS.
- قم بتوصيل وحدة GPS بالمتحكم الدقيق باستخدام USART.
- قم بتهيئة نظام USART في وضع الاستلام المستمر ، بمعدل 9600 باود وشاشة LCD مع وضع 4 بت.
- خذ صفيفين من الأحرف بناءً على طول خط العرض وخط الطول.
- احصل على حرف واحد بت في كل مرة وتحقق مما إذا كان يبدأ من $ أم لا.
- إذا كان $ Receive عبارة عن سلسلة ، فنحن بحاجة إلى التحقق من GPGGA وهذه الأحرف الخمسة والفاصلة.
- إذا كان GPGGA ، فسوف نتخطى الوقت ، ونبحث عن خطي الطول والعرض ، وسوف نقوم بتخزين خطي الطول والعرض في صفيف مكون من حرفين حتى لا يتم استلام N (شمال) و E (شرق).
- سنقوم بطباعة المصفوفة في شاشة LCD.
- امسح المصفوفة.
شرح الكود:
لنلق نظرة على الكود سطرًا بسطر. الأسطر القليلة الأولى مخصصة لإعداد بتات التكوين التي تم شرحها في البرنامج التعليمي السابق لذا فأنا أتخطىها الآن. يتم تقديم الكود الكامل في نهاية هذا البرنامج التعليمي.
تُستخدم هذه الخطوط الخمسة لتضمين ملفات رأس المكتبة ، و lcd.h و eusart.h مخصصان لشاشات الكريستال السائل و USART على التوالي. و xc.h لملف رأس متحكم دقيق .
#تضمن
في الدالة الرئيسية () الفارغة ، فإن system_init () ؛ تستخدم الوظيفة لتهيئة LCD و USART.
باطل رئيسي (باطل) { TRISB = 0x00 ؛ // الإعداد كإخراج system_init () ؛
و lcd_init ()؛ و EUSART_Intialize () ؛ يسمى من المكتبتين lcd.h و eusart.h
باطل system_init (باطل) { lcd_init () ؛ // سيؤدي هذا إلى تهيئة شاشة lcd EUSART1_Initialize () ؛ // سيؤدي هذا إلى تهيئة Eusart }
في حين حلقة ما تم كسر سلسلة GPGGA للحصول على خط الطول والعرض تنسيق. نتلقى بتة واحدة في كل مرة ونقارنها بالأحرف الفردية الموجودة في سلسلة GPGGA.
نكسر الرموز التي سنحصل عليها: -
incomer_data = EUSART1_Read () ، // تحقق من السلسلة 'GPGGA $ ،' / * ------------------------------ خطوة بخطوة لإيجاد خط GPGGA- --------------------------- * / if (incomer_data == '$') {// أول بيان من بيانات GPS يبدأ بـ $ sign incomer_data = EUSART1_Read () ، // إذا أصبح الأول صحيحًا ، فإن المرحلة التالية إذا (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 () ؛ إذا (incomer_data == '،') {// تم استلامها أولاً incomer_data = EUSART1_Read () ، // في هذه المرحلة تم الانتهاء من الفحص النهائي ، تم العثور على GPGGA.
باستخدام هذا الرمز ، نتخطى وقت UTC.
while (incomer_data! = '،') {// تخطي GMT Time incomer_data = EUSART1_Read () ؛ }
هذا الرمز لتخزين بيانات خطوط الطول والعرض في صفيف الأحرف.
incomer_data = EUSART1_Read () ، خط العرض = incomer_data ؛ while (incomer_data! = '،') { لـ (array_count = 1؛ incomer_data! = 'N'؛ array_count ++) { incomer_data = EUSART1_Read () ؛ خط العرض = incomer_data ؛ // تخزين بيانات Latitude } incomer_data = EUSART1_Read () ؛ إذا (incomer_data == '،') { لـ (array_count = 0؛ incomer_data! = 'E'؛ array_count ++) { incomer_data = EUSART1_Read () ؛ خط الطول = incomer_data ؛ // تخزين بيانات خط الطول } }
وأخيرًا قمنا بطباعة خطوط الطول والعرض على شاشة LCD.
array_count = 0 ؛ lcd_com (0x80) ؛ // LCD line one select while (array_count <12) {// Array of Latitude data is 11 digit lcd_data (latitude)؛ // طباعة Latitude data array_count ++ ؛ } array_count = 0 ؛ lcd_com (0xC0) ؛ // Lcd line two select while (array_count <13) {// Array of Longitude data is 12 digit lcd_data (longitude)؛ // طباعة Longitude data array_count ++ ؛ }
هذه هي الطريقة التي يمكننا بها ربط وحدة GPS بوحدة التحكم الدقيقة PIC للحصول على خط الطول وخط العرض للموقع الحالي.
يتم توفير ملفات التعليمات البرمجية الكاملة والرأس أدناه.