在本文中,我將向您展示一種使用PIC微控制器從GPS模塊獲取時(shí)間和日期的方法。
要求
帶有MPLABX和XC8編譯器的計(jì)算機(jī)。
PICKIT3.5或同等PIC編程器。
一個(gè)GPS模塊,用于發(fā)送NMEA語(yǔ)句。
面包板和跳線、液晶顯示器和一個(gè)5K電位器。
零件清單中的零件。
介紹
在之前的文章使用Arduino制作GPS時(shí)鐘和使用PICAXE制作GPS時(shí)鐘中,我已經(jīng)使用Arduino和PICAXE制作了GPS時(shí)鐘。在本文中,我使用的是PIC16F628A。有關(guān)GPS和導(dǎo)航的簡(jiǎn)要介紹,請(qǐng)閱讀第一個(gè)鏈接中的文章。
在本文中,我使用的GPS模塊與之前的文章中使用的不同。波特率是9600,所以我必須配置uart端口來(lái)匹配這個(gè)。為了讀出時(shí)間,我將使用GPRMC語(yǔ)句。這句話看起來(lái)像這樣:
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
GPRMC語(yǔ)句和其他語(yǔ)句每秒發(fā)送一次。該軟件將搜索正確的并使用其中的信息。
硬件
以下原理圖建立在面包板上。注意顯示LCD輸出模塊。D6和D7連接到PIC引腳12和13。這恰好是編程引腳PGC和PGD。我不會(huì)從LCD上讀取數(shù)據(jù),所以我將RW引腳接地。我也將D0-D3接地。像這樣將未使用的引腳接地是一種很好的做法,但是如果我要向項(xiàng)目添加更多功能,我喜歡將安裝在PCB上的PIC上未使用的引腳路由到焊盤(pán)以便于訪問(wèn)。這里不是這種情況,因?yàn)殡娐肥敲姘宓摹?/p>
點(diǎn)擊圖片為全尺寸。
零件清單
以下是EagleCAD中BOMulp的編輯列表。
軟件
該軟件已被評(píng)論,但我將在這里大致介紹它。
首先是包含庫(kù)、配置位、變量聲明和函數(shù)原型。然后我有驅(qū)動(dòng)液晶顯示器的功能。要使LCD顯示屏正常工作,您必須遵循特定的方法。之后是uart函數(shù)和兩個(gè)函數(shù),用于在接收到的時(shí)間和日期無(wú)效時(shí)顯示消息。
主程序以一些指令開(kāi)始:關(guān)閉比較器,為端口設(shè)置正確的方向,并將所有端口設(shè)置為低。然后初始化LCD端口和uart端口。在主while循環(huán)中,RX接收到的每個(gè)字節(jié)都放在一個(gè)變量中。比較變量以查看它是否是美元符號(hào)$。如果它是一個(gè)美元符號(hào),我現(xiàn)在知道我在NMEA句子的開(kāi)頭,但我不知道是哪一個(gè)。然后它讀取接下來(lái)的六個(gè)字節(jié)并將它們放入一個(gè)數(shù)組中。然后將該數(shù)組與預(yù)定義的數(shù)組進(jìn)行比較。如果相等,那么我知道兩件事:一,我有一個(gè)句子,二,我有正確的句子?,F(xiàn)在遵循許多for循環(huán),以讀取正確的值并將其放置在正確的位置。在這個(gè)例子中,它讀取時(shí)間、日期、緯度和經(jīng)度,
當(dāng)程序接近主while循環(huán)結(jié)束時(shí),它會(huì)在LCD上顯示時(shí)間和日期。顯示的時(shí)間通常稱(chēng)為GPSZULU時(shí)間。
您可以下載下面的c源代碼。
結(jié)論
在本文中,我向您展示了一種使用PIC微控制器從GPS模塊獲取時(shí)間和日期的方法。只需對(duì)代碼進(jìn)行少量更改,您就可以在不同的PIC上使用它。該程序讀取時(shí)間、日期、緯度和經(jīng)度,但它只顯示時(shí)間和日期。我挑戰(zhàn)讀者顯示緯度和經(jīng)度。
圖片和視頻
這是面包板的一些圖片。
啟動(dòng)畫(huà)面。
在PIC接收到有效數(shù)據(jù)之前。
該模塊有一個(gè)小型備用電池,有助于在衛(wèi)星修復(fù)之前更快地啟動(dòng)時(shí)鐘。
現(xiàn)在NMEA語(yǔ)句中有有效信息。
-
微控制器
+關(guān)注
關(guān)注
48文章
7552瀏覽量
151423 -
PIC微控制器
+關(guān)注
關(guān)注
0文章
17瀏覽量
7393 -
GPS模塊
+關(guān)注
關(guān)注
0文章
87瀏覽量
16438
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論