切换到宽版
  • 32707阅读
  • 230回复

[工仪]DIY 6位数码管GPS授时时钟,GPS数据格式讲解(开源共享) [复制链接]

上一主题 下一主题
离线aqxgm
 

发帖
5810
M币
15271
专家
151
粉丝
469
只看楼主 倒序阅读 我要置顶 楼主  发表于: 2015-01-20
— 本帖被 mydigit 设置为精华,作者+3000M币+5专家(2015-01-22) —
楼主是一名非专业的电子“发烧友”,经常DIY一些小东西来打发一下业余时间,比如说功放、收音机啊等等电子爱好者经常玩的东东。这些日子又迷上了单片机,做过好几个时钟,做好后发现这些时钟不管怎么调试都存在时间并不十分准确的问题,前些日子受手头PCB大小限制做了一个4位的数码管时钟,一直用着还算不错。但是感觉没有秒显示有点对不住GPS的精准,就去淘了些空PCB,开工DIY6位时钟。

再恶补一下GPS的数据格式,接收到的一帧数据如下图所示:



我们最关心的时间,日期、经纬度、速度、海拔等信息都在这里了,用逗号分隔,两个逗号之间为空说明没有数据
主要数据解读:
$GPGGA
114839.914 这是标准时间,比北京时间晚8个小时,这里换算成北京时间就是19:48:39点后面的914是毫秒,但GPS输出的毫秒并不怎么准确。
XXXX.2743, N: 纬度信息,N是北纬
XXXXX.5447,E:经度信息, E是东经
1:质量因子 (0=没有定位 1=实时GPS 2=差分GPS)
04 :可使用的卫星数(0~8)
2.4:水平精度(1.0~99.9)
151.0,M:天线高程 (海平面 -9999.9~99999.9单位:m)
3.0,M:(大地椭球面相对海平面的高度-999.9-9999.9,单位:m)
0000 :差分基准站号(0000~1023)实时GPS为0000
$GPRMC
114839.914 这是标准时间,比北京时间晚8个小时,这里换算成北京时间就是19:48:39。
A:成功定位(未能定位这里是V)
XXXX.2743, N: 纬度信息,N是北纬
XXXXX.5447,E:经度信息, E是东经
0.00和空数据:相对位移速度和位移方向(在这里因为是固定使用,速度是0,所以移动方向的数据为空)
041114:日期(数据格式为dd/mm/yy)即2014年11月14日

    从解读的这两组主要数据可以看出,如果只是做简单的时间日期显示,只用最下面的一行$GPRMC就可以了。
    在串口中断里面不停的接收GPS发过来的数据,然后将这些数据保存到一个数组(buf[10])里面,然后取出时间来显示就行了,程序如下:
   void Uart_Receive(void) interrupt 4     //串口中断,用于GPS数据接收
   {
       unsigned char ch,num;
       ES = 0;
       if (RI)                    //如果接收完成则进入
       {
           ch = SBUF;
           if (ch == 'R')  //如果收到字符'$',便开始接收
           {
               rev_start = 1;
               rev_stop  = 0;          //接收停止标志
           }

           if (rev_start == 1)       //标志位为1,开始接收
           {
               buf[num++] = ch;  //字符存到数组中
               if (ch == '.')       //如果接收到换行
               {
                   buf[num] = '\n';
                   rev_start = 0;
                   rev_stop  = 1;      //接收停止标志
                   num = 0;
               }
           }
       }
       RI = 0;     //RI清0,重新接收
       ES = 1;     //串口1中断允许            
   }        

     显示方式选择了比较实用的数码管,用8550三极管来驱动位。选择了4个1.5英寸的显示小时和分钟,2个0.8英寸的用来显示秒,这样看起来比较协调一点。由于晚上拉上窗帘后就收不到GPS信号了,就加了一片实时时钟DS1302,这样在没有GPS信号的时候也能正常使用。

电路图和PCB(使用Altium Designer 绘制)


当显示GPS的时间时,时钟是精确的无须调整;但是当没有GPS信号或没有插入GPS模块时,时间是需要调整的,就加入了一个红外接收头,这样就可以用遥控器调整时间了。

制作PCB使用的方法是热转印。
先把PCB图打印到热转印纸上


裁好一段空覆铜板,用砂纸或钢丝球打磨干净


加热工具是一把老式的电熨斗,当温度达到180度左右时开始转印(激光打印机的碳粉熔化温度大约是180度左右)。



转印好后用三氯化铁腐蚀。做好的PCB涂一层松香酒精溶液防氧化



打孔、焊接好了





单片机型号是PLCC封装的STC89C52RC,手头没有IC座就将管脚折出来当贴片用。因为需要串口通信晶振频率选择了11.0592mhz



这是使用的遥控器



放在窗台上面的GPS模块,其实放在室内也是可以正常使用的,只是初始化速度慢一点。


硬件做好后开始了漫长的程序调试,用了几个晚上的时间,反复烧写多次后终于达到了自己的设计要求。
这是从网络获取的标准北京时间



这是DIY时钟的当前时间


插入GPS后,自动与卫星同步,时间就想当的准确了


使用5V的电源,没有插入GPS模块时电流100ma左右,功耗大约是0.5W


插入GPS后,电流增加了一倍多,不过1W左右的功耗也不算太大。


数码管倒装,用左上角的小点指示GPS信号的有无。当没有GPS信号时,小点不亮,从DS1302里读出时间来显示;当有GPS信号时,自动与卫星同步并将准确的时间写入DS1302,这样即使GPS信号消失,在一段时间内还是相当的准确的(时间长短与DS1302的精度有关)


为了DIY“作品”的美观,特意从网上订购的半透明亚克力。个人认为还是非常简洁漂亮的。




再来一张漂亮的效果图



后记:
     本次DIY以实用为主,没有添加日期、星期、闹钟等功能,因为我需要的只是一个时间精准的钟,DIY爱好者可以根据需要自行添加。如果有疑问可以联系,定当知无不言,让我们共同进步。

公布邮箱后收到了好几个兄弟的邮件,发送太麻烦了。还是上传到这里吧
C程序、原理图及PCB





[ 此帖被aqxgm在2015-01-23 19:36重新编辑 ]
本文内容包含图片或附件,获取更多资讯,请 登录 后查看;或者 注册 成为会员获得更多权限
本帖最近打赏记录:共147条打赏M币+484专家+4
qwecczj M币 +3 優秀文章 2016-03-13
guishan987 M币 +3 謝謝分享。 2016-03-13
mousebat04 M币 +3 優秀文章,板子做得好漂亮,装好后更漂亮 2016-03-09
yhj9282 M币 +3 也想仿个,技术有限 2015-12-24
无忧过客 M币 +3 優秀文章 2015-12-23
vcnc M币 +3 - 2015-12-22
li117433395 M币 +3 謝謝分享 2015-10-08
yufei8051 M币 +2 谢谢你的分享,有时间的话我也想要这样的 2015-08-29
郁闷_boy M币 +3 原創內容 2015-08-15
季yy M币 +3 認真發帖 2015-07-12
123456...15下一页
到第
离线aqxgm

发帖
5810
M币
15271
专家
151
粉丝
469
只看该作者 1楼 发表于: 2015-01-20
一个帖子从上午开始发,一直到晚上9点多才有空编辑完毕,我容易吗
[ 此帖被aqxgm在2015-01-20 21:24重新编辑 ]
本帖最近打赏记录:共24条打赏M币+85专家+1
ladenaiqq M币 +3 - 2015-05-28
lujipeng M币 +3 - 2015-05-17
3369348 专家 +1 優秀文章 2015-04-23
壹切皆有可能 M币 +3 原創內容 2015-03-21
x392924035 M币 +3 優秀文章 2015-03-11
csnyj001 M币 +3 優秀文章 2015-03-10
freediy99 M币 +3 謝謝分享 2015-03-10
lsyswh M币 +3 優秀文章 2015-03-01
zhbq M币 +3 優秀文章 2015-02-16
hc605 M币 +3 認真發帖 2015-02-14
离线希望

发帖
17122
M币
253
专家
5
粉丝
4652
只看该作者 2楼 发表于: 2015-01-20
很好,做出来,很给力的,
本帖最近打赏记录:共1条打赏M币+1
社建电子 M币 +1 - 2015-01-24
离线hongo

发帖
49394
M币
129383
专家
240
粉丝
15121
只看该作者 3楼 发表于: 2015-01-20
GPS模块要多少银子?
本帖最近打赏记录:共2条打赏M币+2
社建电子 M币 +1 - 2015-01-24
aqxgm M币 +1 淘的二手货,不包好坏5块一个,有好有坏 2015-01-20
离线aqxgm

发帖
5810
M币
15271
专家
151
粉丝
469
只看该作者 4楼 发表于: 2015-01-20
淘的二手货,不包好坏5块一个,有好有坏
本帖最近打赏记录:共1条打赏M币+1
社建电子 M币 +1 - 2015-01-24
在线72hour

发帖
375
M币
3128
专家
4
粉丝
25
只看该作者 5楼 发表于: 2015-01-20
diy心中永远的痛.永远找不到合适的外壳!
本帖最近打赏记录:共2条打赏M币+4
社建电子 M币 +1 - 2015-01-24
小陈兔 M币 +3 深有同感 2015-01-24
离线aqxgm

发帖
5810
M币
15271
专家
151
粉丝
469
只看该作者 6楼 发表于: 2015-01-20
回 72hour 的帖子
72hour:diy心中永远的痛.永远找不到合适的外壳! (2015-01-20 10:15) 回 72hour 的帖子

这个其实不需要外壳的,贴一片亚克力就灰常的漂亮了
本帖最近打赏记录:共1条打赏M币+1
社建电子 M币 +1 - 2015-01-24
在线jpdd521

发帖
21681
M币
6851
专家
15
粉丝
319
只看该作者 7楼 发表于: 2015-01-20
看到技术贴总是想顶一下。。。做的是真不错,很漂亮。
本帖最近打赏记录:共1条打赏M币+1
社建电子 M币 +1 - 2015-01-24
离线bluenight

发帖
10974
M币
5576
专家
23
粉丝
89
只看该作者 8楼 发表于: 2015-01-20
优秀文章,不知道用的GPS模块是什么?
本帖最近打赏记录:共1条打赏M币+1
社建电子 M币 +1 - 2015-01-24
离线jpyj299

发帖
283
M币
300
专家
0
粉丝
10
只看该作者 9楼 发表于: 2015-01-20
做的真漂亮啊,
快速回复
限80 字节
如果您提交过一次失败了,可以用”恢复数据”来恢复帖子内容
 
上一个 下一个