在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何將GPS模塊與PIC微控制器連接以獲取當(dāng)前位置的緯度和經(jīng)度

科技觀察員 ? 來源:circuitdigest ? 作者:蘇拉夫·古普塔 ? 2022-11-16 17:28 ? 次閱讀

GPS是全球定位系統(tǒng)的簡稱。它是一個提供準(zhǔn)確的高度,緯度,經(jīng)度,UTC時間和更多信息的系統(tǒng),這些信息來自2,3,4或更多衛(wèi)星。要從GPS讀取數(shù)據(jù),我們需要一些微控制器,我們已經(jīng)將GPS與Arduino和Raspberry Pi連接在一起。

我們選擇了由U-blox制造的G7020 GPS模塊。我們將從衛(wèi)星接收特定位置的經(jīng)度和緯度,并將在 16x2 字符 LCD 上顯示相同的經(jīng)度和緯度。因此,在這里我們將通過微芯片將GPS與PIC16F877A微控制器連接。

所需組件:

Pic16F877A – PDIP40 封裝

面包板

皮基特-3

5V 適配器

液晶顯示器 JHD162A

uBLOX-G7020 全球定位系統(tǒng)模塊

用于連接外圍設(shè)備的電線。

4.7k 電阻器

10k鍋

20mHz 晶體

2 個 33pF 陶瓷電容器

電路圖和說明:-

pYYBAGN0rMGADYMNAAJAc1IU4Hk014.png

16x2字符LCD通過PIC16F877A微控制器連接,其中RB0,RB1,RB2分別連接到LCD引腳RS,R / W和E.RB4,RB5,RB6和RB7通過LCD的4針D4,D5,D6,D7連接。液晶屏以4位模式或半字節(jié)模式連接。

一個 20MHz 的晶體振蕩器,帶有兩個 33pF 的陶瓷電容器,連接在 OSC1 和 OSC2 引腳上。它將為微控制器提供恒定的20 MHz時鐘頻率。

uBlox-G7020 GPS模塊,使用UART接收和傳輸數(shù)據(jù)。PIC16F877A由芯片內(nèi)部的一個USART驅(qū)動器組成,我們將通過USART從GPS模塊接收數(shù)據(jù),因此將從微控制器Rx引腳到GPS的Tx引腳和USART接收引腳通過GPS的傳輸引腳連接進行交叉連接。

uBlox-G7020 具有引腳的顏色代碼。正極或5V引腳為紅色,負極或GND引腳為黑色,傳輸引腳為藍色。

我已經(jīng)在面包板上連接了所有這些。

從 GPS 獲取位置數(shù)據(jù):

讓我們看看如何使用 USART 連接 GPS,并在 16x2 字符 LCD 中查看結(jié)果。

該模塊將以 9600 波特率在多個字符串中傳輸數(shù)據(jù)。如果我們使用波特率為9600的UART終端,我們將看到GPS接收的數(shù)據(jù)。

GPS模塊以NMEA格式發(fā)送實時跟蹤位置數(shù)據(jù)(請參見上面的屏幕截圖)。NMEA格式由幾個句子組成,其中四個重要句子如下。

這是GPS在9600波特率連接時接收的數(shù)據(jù)。

$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

當(dāng)我們使用GPS模塊跟蹤任何位置時,我們只需要坐標(biāo),我們可以在字符串中找到$GPGGA。只有$GPGGA(全球定位系統(tǒng)修復(fù)數(shù)據(jù))字符串主要用于程序,其他字符串被忽略。

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

這句話是什么意思?

該行的含義是:-

1. 字符串始終以“$”符號開頭

2. GPGGA 代表 全球定位系統(tǒng)定位數(shù)據(jù)

3. “,”逗號表示兩個值之間的分隔

4. 141848.00:格林威治標(biāo)準(zhǔn)時間為 14(小時):18(分鐘):48(秒):00(毫秒)

5. 2237.63306,N:北緯22度(度)37(分)63306(秒)北緯

6. 08820.86316,E:東經(jīng)088(度)20(分)86316(秒)

7. 1:修復(fù)數(shù)量0=無效數(shù)據(jù),1=有效數(shù)據(jù),2=DGPS修復(fù)

8. 03 : 當(dāng)前查看的衛(wèi)星數(shù)量。

9. 1.0: HDOP

10. 2.56,米:海拔高度(海拔高度,單位:米)

11. 1.9,M : 大地水準(zhǔn)面高度

12. *74 : 校驗和

因此,我們需要 5 號和 6 號來收集有關(guān)模塊位置或模塊位置的信息。

將GPS與PIC微控制器連接的步驟:-

設(shè)置微控制器的配置,包括振蕩器配置。

設(shè)置LCD的所需端口,包括TRIS寄存器

使用 USART 將 GPS 模塊連接到微控制器。

在連續(xù)接收模式下初始化系統(tǒng) USART,波特率為 9600,LCD 具有 4 位模式。

根據(jù)緯度和經(jīng)度的長度采用兩個字符數(shù)組。

一次接收一個字符位,并檢查它是否從 $ 開始。

如果 $ 接收,那么它是一個字符串,我們需要檢查 GPGGA、這 5 個字母和逗號。

如果是 GPGGA,那么我們將跳過時間,并尋找緯度和經(jīng)度,我們將緯度和經(jīng)度存儲在兩個字符數(shù)組中,直到 N(北)和 E(東)未收到。

我們將在LCD中打印陣列。

清除陣列。

pYYBAGN0rVaAC34ZAAB1XZukCHQ219.jpg

代碼說明:

讓我們逐行查看代碼。前幾行用于設(shè)置配置位,這些配置位在上一個教程中已經(jīng)解釋過,所以我現(xiàn)在跳過它們。本教程末尾給出了完整的代碼。

這五行用于包括庫頭文件,lcd.h 和 eusart.h 分別用于 LCD 和 USART。xc.h 用于微控制器頭文件。

#include

#include

#include

#include "supporing_cfilelcd.h"

#include "supporing_cfileeusart1.h"

在 void main() 函數(shù)中,system_init();函數(shù)用于初始化LCD和USART。

Void main(void) {

TRISB = 0x00; // Setting as output

system_init();

lcd_init(); 和 EUSART_Intialize(); 從兩個庫 lcd.h 和 eusart.h 調(diào)用

void system_init(void){

lcd_init(); // This will initialise the lcd

EUSART1_Initialize(); // This will initialise the Eusart

}

在 while 循環(huán)中,我們中斷 GPGGA 字符串以獲取經(jīng)度和緯度坐標(biāo)。我們一次接收一位,并將其與 GPGGA 字符串中存在的單個字符進行比較。

我們打破了我們將得到的代碼:-

incomer_data=EUSART1_Read(); // Check the string '$GPGGA,'

/*------------------------------ Step by step finding the GPGGA line----------------------------*/

if(incomer_data=='$'){ // First statement of the GPS data start with a $ sign

incomer_data=EUSART1_Read(); // If the first if become true then the next phase

if(incomer_data=='G'){

incomer_data=EUSART1_Read();

if(incomer_data=='P');{

incomer_data=EUSART1_Read();

if(incomer_data=='G');{

incomer_data=EUSART1_Read();

if(incomer_data=='G'){

incomer_data=EUSART1_Read();

if(incomer_data=='A'){

incomer_data=EUSART1_Read();

if(incomer_data==','){ // first , received

incomer_data=EUSART1_Read(); // At this stage Final check in done, GPGGA is found.

通過使用此代碼,我們跳過了 UTC 時間。

while (incomer_data != ','){ // skipping GMT Time

incomer_data=EUSART1_Read();

}

此代碼用于將緯度和經(jīng)度數(shù)據(jù)存儲在字符數(shù)組中。

incomer_data=EUSART1_Read();

latitude[0] = incomer_data;

while(incomer_data != ','){

for(array_count=1;incomer_data!='N';array_count++){

incomer_data=EUSART1_Read();

latitude[array_count]=incomer_data; // Store the Latitude data

}

incomer_data=EUSART1_Read();

if(incomer_data==','){

for(array_count=0;incomer_data!='E';array_count++){

incomer_data=EUSART1_Read();

longitude[array_count]=incomer_data; // Store the Longitude data

}

}

最后,我們在LCD上打印了經(jīng)度和緯度。

array_count=0;

lcd_com(0x80); // LCD line one selection

while(array_count<12){ // Array of Latitude data is 11 digit

lcd_data(latitude[array_count]); // Print the Latitude data

array_count++;

}

array_count=0;

lcd_com(0xC0); // Lcd line two selection

while(array_count<13){ // Array of Longitude data is 12 digit

lcd_data(longitude[array_count]); // Print the Longitude data

array_count++;

}

這就是我們?nèi)绾螌PS模塊與PIC微控制器連接以獲取當(dāng)前位置的緯度和經(jīng)度。

/*

* File: main.c

* Author: Sourav Gupta

* By:- circuitdigest.com

* Created on April 1, 2018, 2:26 PM

*/


// PIC16F877A Configuration Bit Settings


// 'C' source line config statements


// CONFIG

#pragma config FOSC = HS // Oscillator Selection bits (HS oscillator)

#pragma config WDTE = OFF // Watchdog Timer Enable bit (WDT disabled)

#pragma config PWRTE = OFF // Power-up Timer Enable bit (PWRT disabled)

#pragma config BOREN = ON // Brown-out Reset Enable bit (BOR enabled)

#pragma config LVP = OFF // Low-Voltage (Single-Supply) In-Circuit Serial Programming Enable bit (RB3/PGM pin has PGM function; low-voltage programming enabled)

#pragma config CPD = OFF // Data EEPROM Memory Code Protection bit (Data EEPROM code protection off)

#pragma config WRT = OFF // Flash Program Memory Write Enable bits (Write protection off; all program memory may be written to by EECON control)

#pragma config CP = OFF // Flash Program Memory Code Protection bit (Code protection off)





#include

#include

#include

#include "supporing_cfilelcd.h"

#include "supporing_cfileeusart1.h"


/*

Hardware related definition

*/

#define _XTAL_FREQ 200000000 //Crystal Frequency, used in delay


/*

Other Specific definition

*/

void system_init(void);


unsigned char incomer_data = 0;

unsigned char longitude[13];

unsigned char latitude[13];

unsigned int array_count=0;



/* Sample line received from the GPS :-



[$GPGGA,100156.000,2690.9416,N,07547.8441,E,1,08,1.0,442.8,M,-42.5,M,,0000*71]


1. string always starts with a ?$? sign

2. GPGGA : Global Positioning System Fix Data

3. ?,? Comma indicates the separation between two values

4. 100156.000 : GMT time as 10(hr):01(min):56(sec):000(ms)

5. 2650.9416,N: Latitude 26(degree) 50(minutes) 9416(sec) North

6. 07547.8441,E: Longitude 075(degree) 47(minutes) 8441(sec) East

7. 1 : Fix Quantity 0= invalid data, 1= valid data, 2=DGPS fix

8. 08 : Number of satellites currently viewed.

9. 1.0: HDOP

10. 442.8,M : Altitude (Height above sea level in meter)

11. -42.5,M : Geoids height

12. __ , DGPS data

13. 0000 : DGPS data

14. *71 : checksum

*/



void main(void) {

TRISB = 0x00; // Setting as output

system_init(); // System getting ready and initialising the LCD and USART driver.

//LCD_ScrollMessage("Circuitdigest.com");

while(1){

incomer_data=EUSART1_Read(); // Check the string '$GPGGA,'

/*------------------------------ Step by step finding the GPGGA line----------------------------*/

if(incomer_data=='$'){ // First statement of the GPS data start with a $ sign

incomer_data=EUSART1_Read(); // If the first if become true then the next phase

if(incomer_data=='G'){

incomer_data=EUSART1_Read();

if(incomer_data=='P');{

incomer_data=EUSART1_Read();

if(incomer_data=='G');{

incomer_data=EUSART1_Read();

if(incomer_data=='G'){

incomer_data=EUSART1_Read();

if(incomer_data=='A'){

incomer_data=EUSART1_Read();

if(incomer_data==','){ // first , received

incomer_data=EUSART1_Read(); // At this stage Final check in done, GPGGA is found.

while (incomer_data != ','){ // skipping GMT Time

incomer_data=EUSART1_Read();

}

incomer_data=EUSART1_Read();

latitude[0] = incomer_data;

while(incomer_data != ','){

for(array_count=1;incomer_data!='N';array_count++){

incomer_data=EUSART1_Read();

latitude[array_count]=incomer_data; // Store the Latitude data

}



incomer_data=EUSART1_Read();

if(incomer_data==','){

for(array_count=0;incomer_data!='E';array_count++){

incomer_data=EUSART1_Read();

longitude[array_count]=incomer_data; // Store the Longitude data

}

}

array_count=0;

//lcd_com(0x80); // LCD line one selection

while(array_count<12){ // Array of Latitude data is 11 digit?

lcd_data(latitude[array_count]); // Print the Latitude data

array_count++;

}

array_count=0;

lcd_com(0xC0); // Lcd line two selection

while(array_count<13){ // Array of Longitude data is 12 digit?

lcd_data(longitude[array_count]); // Print the Longitude data

array_count++;

}

//lcd_com(0x01); //clear LCD

}

}

}



}

}

}

}

}

for(array_count=0;array_count<=13;array_count++){?

incomer_data=0;

latitude[array_count]=0;

longitude[array_count]=0;



}

array_count = 0;

}

}


/*

This Function is for system initialisations.

*/


void system_init(void){

lcd_init(); // This will initialise the lcd

EUSART1_Initialize(); // This will initialise the Eusart

}

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 微控制器
    +關(guān)注

    關(guān)注

    48

    文章

    7578

    瀏覽量

    151735
  • gps
    gps
    +關(guān)注

    關(guān)注

    22

    文章

    2899

    瀏覽量

    166413
  • PIC16F877A
    +關(guān)注

    關(guān)注

    2

    文章

    43

    瀏覽量

    21841
收藏 人收藏

    評論

    相關(guān)推薦

    伺服電機與PIC微控制器連接的教程

    在本教程中,我們將了解伺服電機以及如何將伺服與 MSP430 連接。MSP-EXP430G2 是德州儀器提供的開發(fā)工具,又名 LaunchPad,用于學(xué)習(xí)和練習(xí)如何使用其微控制器。該板屬于 MSP430 超值系列類別,我們可以在
    的頭像 發(fā)表于 11-14 16:33 ?2856次閱讀
    <b class='flag-5'>將</b>伺服電機與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b><b class='flag-5'>連接</b>的教程

    如何使用PIC微控制器旋轉(zhuǎn)步進電機

    在本教程中,我們步進電機與PIC微控制器PIC16F877A連接
    發(fā)表于 11-15 17:25 ?1508次閱讀
    如何使用<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>旋轉(zhuǎn)步進電機

    如何將超聲波傳感HC-SR04與PIC微控制器連接

    為了讓任何項目活躍起來,我們需要使用傳感。傳感充當(dāng)所有嵌入式應(yīng)用的眼睛和耳朵,它幫助數(shù)字微控制器了解這個真實模擬世界中實際發(fā)生的事情。在本教程中,我們學(xué)習(xí)
    的頭像 發(fā)表于 01-01 10:08 ?3942次閱讀
    <b class='flag-5'>如何將</b>超聲波傳感<b class='flag-5'>器</b>HC-SR04與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b><b class='flag-5'>連接</b>

    SIM900A與PIC微控制器連接起來實現(xiàn)GSM模塊撥打和接聽電話

    在本教程中,我們學(xué)習(xí)如何將GSM模塊**(SIM900A)與我們的PIC微控制器連接,并通過使
    的頭像 發(fā)表于 01-25 17:27 ?4659次閱讀
    <b class='flag-5'>將</b>SIM900A與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b><b class='flag-5'>連接</b>起來實現(xiàn)GSM<b class='flag-5'>模塊</b>撥打和接聽電話

    如何處理51單片機從GPS數(shù)據(jù)中讀取的數(shù)據(jù)得到經(jīng)度緯度坐標(biāo)

    本人在做一個單片機定位系統(tǒng),利用GPS模塊定位,傳回的數(shù)據(jù)如圖:求一份基于51單片機的GPS模塊數(shù)據(jù)讀取經(jīng)緯度坐標(biāo)的C程序,可以通過51單片
    發(fā)表于 05-21 20:32

    如何將微控制器與FPGA連接

    晚上好,如何將微控制器與FPGA連接?如何使用微控制器配置FPGA?如何使用微控制器或軟件程序為FPGA創(chuàng)建.bit文件以使用
    發(fā)表于 03-25 09:22

    如何將伺服電動機與PIC微控制器連接

     此電路的電路圖實驗如下所示。伺服控制輸入來自PIC16F628A微控制器的RB1引腳,該PIC16F628A
    的頭像 發(fā)表于 12-05 17:54 ?4407次閱讀

    如何使用PIC微控制器制作GPS時鐘

    在本文中,我向您展示一種使用 PIC 微控制器GPS 模塊獲取時間和日期的方法。
    的頭像 發(fā)表于 04-26 17:13 ?2348次閱讀
    如何使用<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>制作<b class='flag-5'>GPS</b>時鐘

    如何將SD卡模塊PIC微控制器連接并在其中存儲數(shù)據(jù)

    在本文中,我們向您展示如何簡單地 SD 卡模塊PIC 微控制器連接并在其中存儲數(shù)據(jù)。
    發(fā)表于 08-03 16:47 ?1565次閱讀
    <b class='flag-5'>如何將</b>SD卡<b class='flag-5'>模塊</b>與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b><b class='flag-5'>連接</b>并在其中存儲數(shù)據(jù)

    GPS模塊與ATmega16接口查找位置坐標(biāo)的方式

    、UTC 時間和有關(guān)特定位置的許多其他信息,這些信息來自多顆衛(wèi)星。要從 GPS 讀取數(shù)據(jù),需要一個微控制器,因此我們GPS
    的頭像 發(fā)表于 08-24 15:19 ?2304次閱讀
    <b class='flag-5'>GPS</b><b class='flag-5'>模塊</b>與ATmega16接口查找<b class='flag-5'>位置</b>坐標(biāo)的方式

    如何使用STM32F103C8的GPS模塊獲取位置坐標(biāo)

    在本教程中,我們GPS 模塊與 STM32F103C8 微控制器連接查找
    的頭像 發(fā)表于 09-08 15:03 ?8528次閱讀
    如何使用STM32F103C8的<b class='flag-5'>GPS</b><b class='flag-5'>模塊</b><b class='flag-5'>獲取</b><b class='flag-5'>位置</b>坐標(biāo)

    如何將GPS模塊與Arduino連接

    電子發(fā)燒友網(wǎng)站提供《如何將GPS模塊與Arduino連接.zip》資料免費下載
    發(fā)表于 10-21 09:47 ?3次下載
    <b class='flag-5'>如何將</b><b class='flag-5'>GPS</b><b class='flag-5'>模塊</b>與Arduino<b class='flag-5'>連接</b>

    如何將指紋傳感PIC微控制器連接

    目前,我們在日常生活中隨處可見基于指紋的系統(tǒng),例如辦公室考勤,銀行員工驗證,自動取款機中的現(xiàn)金提取或存款,政府辦公室的身份驗證等。我們已經(jīng)將其與Arduino和Raspberry Pi接口,今天我們指紋傳感PIC
    的頭像 發(fā)表于 11-07 16:08 ?3294次閱讀
    <b class='flag-5'>如何將</b>指紋傳感<b class='flag-5'>器</b>與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b><b class='flag-5'>連接</b>

    MAX1169 ADC與PIC微控制器接口

    本應(yīng)用筆記介紹如何將MAX1169模數(shù)轉(zhuǎn)換(ADC)連接PIC?微控制器。它包括PIC18F
    的頭像 發(fā)表于 02-25 12:11 ?625次閱讀
    MAX1169 ADC與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>接口

    MAX1169 ADC與PIC微控制器接口

    本應(yīng)用筆記介紹如何將MAX1169模數(shù)轉(zhuǎn)換(ADC)連接PIC微控制器。它包括PIC18F4
    的頭像 發(fā)表于 03-30 11:29 ?949次閱讀
    MAX1169 ADC與<b class='flag-5'>PIC</b><b class='flag-5'>微控制器</b>接口
    主站蜘蛛池模板: 亚洲一级色| 一级特黄国产高清毛片97看片| 久草资源站在线| 理论毛片| 一级做α爰片久久毛片| 免费久久精品国产片香蕉| 免费簧片视频| brazzersvideosexhd欧美高清| 免费日本黄色| 久久国产乱子伦精品免| 日本大片免费观看视频| 亚洲国产成人精品久久| 天天摸天天做天天爽水多| 日韩毛片免费在线观看| 免费在线观看一级毛片| 狠狠色丁香久久婷婷| 在线观看天堂| 美女被免费网站91色| 黄网站播放| 在线激情网| 日本大片免费观看视频| 国内在线观看精品免费视频| 欧美色视频日本| 黄a网站| 亚洲免费mv| 永久手机看片福利盒子| 日日久| h国产| 91大神视频在线播放| 久久精品国产免费高清| 天天色综合久久| 精品一区二区三区免费爱| 亚洲综合五月天欧美| 国产精品免费看久久久香蕉| 久久福利国产| 中文字幕第一| 色吧综合网| 九九九国产在线| 色婷婷精品视频| 欧美一区二区三区免费| 给个网站可以在线观看你懂的|