雷竞技注册
项目

用PIC微控制器制作GPS时钟

2016年1月29日经过Jens Christoffersen.

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

使用PIC微控制器从GPS模块获取时间和日期。

要求

介绍

在以前的文章中用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连接到PICS引脚12和13.这恰好是PGC和PGD,编程引脚。我不会从液晶显示器读取,所以我将RW PIN接地。我也接地D0-D3。它是良好的做法,如此接地未使用的针脚,但是在PCB上安装在PCB上的未使用的引脚,我喜欢路由到垫,如果我为项目添加一些更多功能,则可以轻松访问。由于电路是面包电路,因此这不是这种情况。

点击图片为全尺寸。

零件清单

以下是Eaglecad中BOM ULP的编辑列表。

软件

该软件被评论,但我会在这里一般走过它。

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

主程序使用某些说明开始关闭:关闭比较器,将正确的方向设置为端口,并将所有端口S设置为低电平。然后它初始化LCD端口和UART端口。在主循环中,Rx上接收的每个字节被放置在变量中。比较变量,以查看它是否是美元符号,$。如果它是一美元的符号,我现在知道我在一个nmea句子的开始,但我不知道哪一个。然后它读取下一个六个字节并将它们放在数组中。然后将该阵列与预定义数组进行比较。如果它是平等的,那么我知道两件事:一个,我有一个句子和两个,我有右句子。现在跟随很多循环,读取并将正确的值放在正确的位置。在此示例中,它读取时间,日期,纬度和经度,但仅在LCD上显示时间和日期。

当程序靠近主循环的主循环结束时,它会显示LCD上的时间和日期。显示的时间通常被称为GPS zulu时间。

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

JC_PIC16F628A-GPSCLOCK-v2.c.zip.

结论

在本文中,我向您展示了一种使用PIC微控制器从GPS模块获取时间和日期的方法。在代码中的小变化中,您可以在不同的照片上使用它。该程序读取时间,日期,纬度和经度,但它只显示时间和日期。我挑战读者展示Lat和Lon。

图片和视频

这是面包板的一些照片。

启动屏幕。

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

该模块有一个小备用电池,有助于在卫星修复程序之前更快地开始时钟。

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

自己试试这个项目吧!得到BOM.

17评论
  • P.
    菲尔斯 2016年2月6日

    漂亮,抛光的项目。
    我需要一个相当准确的时间来源的项目周围的房子(可编程恒温器等),所以这将是理想的。
    我一般不使用PICAXE和坚持Arduino(没有时间学习其他东西),所以可能会使用你的Arduino版本

    喜欢。 回复
  • 吉姆点哦 2016年2月6日

    谢谢你的项目。这也是用pic32上的mmbasic运行完成的。很少有零件​​,像冠军一样工作。看看这里的项目......

    http://geoffg.net/Micromite_GPS_Clock.html

    只有8个部分来制作这项工作。

    Viscomjim

    喜欢。 回复
  • F
    Fgv 2016年4月15日

    我试图在普雷斯8中成功编译这个电路,没有成功,我想知道为什么!

    喜欢。 回复