如何使用PIC微控制器制作GPS时钟

描述

在本文中,我将向您展示一种使用PIC微控制器从GPS模块获取时间和日期的方法。

要求

带有MPLABX和XC8编译器的计算机。

PICKIT3.5或同等PIC编程器。

一个GPS模块,用于发送NMEA语句。

面包板和跳线、液晶显示器和一个5K电位器。

零件清单中的零件。

介绍

在之前的文章使用Arduino制作GPS时钟和使用PICAXE制作GPS时钟中,我已经使用Arduino和PICAXE制作了GPS时钟。在本文中,我使用的是PIC16F628A。有关GPS和导航的简要介绍,请阅读第一个链接中的文章。

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上未使用的引脚路由到焊盘以便于访问。这里不是这种情况,因为威廉希尔官方网站 是面包板的。

GPS模块

点击图片为全尺寸。

零件清单

以下是EagleCAD中BOMulp的编辑列表。

GPS模块

软件

该软件已被评论,但我将在这里大致介绍它。

首先是包含库、配置位、变量声明和函数原型。然后我有驱动液晶显示器的功能。要使LCD显示屏正常工作,您必须遵循特定的方法。之后是uart函数和两个函数,用于在接收到的时间和日期无效时显示消息。

主程序以一些指令开始:关闭比较器,为端口设置正确的方向,并将所有端口设置为低。然后初始化LCD端口和uart端口。在主while循环中,RX接收到的每个字节都放在一个变量中。比较变量以查看它是否是美元符号$。如果它是一个美元符号,我现在知道我在NMEA句子的开头,但我不知道是哪一个。然后它读取接下来的六个字节并将它们放入一个数组中。然后将该数组与预定义的数组进行比较。如果相等,那么我知道两件事:一,我有一个句子,二,我有正确的句子。现在遵循许多for循环,以读取正确的值并将其放置在正确的位置。在这个例子中,它读取时间、日期、纬度和经度,

当程序接近主while循环结束时,它会在LCD上显示时间和日期。显示的时间通常称为GPSZULU时间。

您可以下载下面的c源代码。

结论

在本文中,我向您展示了一种使用PIC微控制器从GPS模块获取时间和日期的方法。只需对代码进行少量更改,您就可以在不同的PIC上使用它。该程序读取时间、日期、纬度和经度,但它只显示时间和日期。我挑战读者显示纬度和经度。

图片和视频

这是面包板的一些图片。

GPS模块

启动画面。

GPS模块

在PIC接收到有效数据之前。

GPS模块

该模块有一个小型备用电池,有助于在卫星修复之前更快地启动时钟。

GPS模块

现在NMEA语句中有有效信息。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分