在本文中,我将向您展示一种使用PIC微控制器从GPS模块获取时间和日期的方法。
要求
带有MPLABX和XC8编译器的计算机。
PICKIT3.5或同等PIC编程器。
一个GPS模块,用于发送NMEA语句。
面包板和跳线、液晶显示器和一个5K电位器。
零件清单中的零件。
介绍
在之前的文章使用Arduino制作GPS时钟和使用PICAXE制作GPS时钟中,我已经使用Arduino和PICAXE制作了GPS时钟。在本文中,我使用的是PIC16F628A。有关GPS和导航的简要介绍,请阅读第一个链接中的文章。
在本文中,我使用的GPS模块与之前的文章中使用的不同。波特率是9600,所以我必须配置uart端口来匹配这个。为了读出时间,我将使用GPRMC语句。这句话看起来像这样:
$GPRMC,161229.487,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,*10
GPRMC语句和其他语句每秒发送一次。该软件将搜索正确的并使用其中的信息。
以下原理图建立在面包板上。注意显示LCD输出模块。D6和D7连接到PIC引脚12和13。这恰好是编程引脚PGC和PGD。我不会从LCD上读取数据,所以我将RW引脚接地。我也将D0-D3接地。像这样将未使用的引脚接地是一种很好的做法,但是如果我要向项目添加更多功能,我喜欢将安装在PCB上的PIC上未使用的引脚路由到焊盘以便于访问。这里不是这种情况,因为电路是面包板的。
点击图片为全尺寸。
零件清单
以下是EagleCAD中BOMulp的编辑列表。
软件
该软件已被评论,但我将在这里大致介绍它。
首先是包含库、配置位、变量声明和函数原型。然后我有驱动液晶显示器的功能。要使LCD显示屏正常工作,您必须遵循特定的方法。之后是uart函数和两个函数,用于在接收到的时间和日期无效时显示消息。
主程序以一些指令开始:关闭比较器,为端口设置正确的方向,并将所有端口设置为低。然后初始化LCD端口和uart端口。在主while循环中,RX接收到的每个字节都放在一个变量中。比较变量以查看它是否是美元符号$。如果它是一个美元符号,我现在知道我在NMEA句子的开头,但我不知道是哪一个。然后它读取接下来的六个字节并将它们放入一个数组中。然后将该数组与预定义的数组进行比较。如果相等,那么我知道两件事:一,我有一个句子,二,我有正确的句子。现在遵循许多for循环,以读取正确的值并将其放置在正确的位置。在这个例子中,它读取时间、日期、纬度和经度,
当程序接近主while循环结束时,它会在LCD上显示时间和日期。显示的时间通常称为GPSZULU时间。
您可以下载下面的c源代码。
结论
在本文中,我向您展示了一种使用PIC微控制器从GPS模块获取时间和日期的方法。只需对代码进行少量更改,您就可以在不同的PIC上使用它。该程序读取时间、日期、纬度和经度,但它只显示时间和日期。我挑战读者显示纬度和经度。
图片和视频
这是面包板的一些图片。
启动画面。
在PIC接收到有效数据之前。
该模块有一个小型备用电池,有助于在卫星修复之前更快地启动时钟。
现在NMEA语句中有有效信息。
-
微控制器
+关注
关注
48文章
7542浏览量
151316 -
PIC微控制器
+关注
关注
0文章
17浏览量
7392 -
GPS模块
+关注
关注
0文章
87浏览量
16436
发布评论请先 登录
相关推荐
评论