找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 8036|回复: 10
收起左侧

万年历集大成版之调试程序

  [复制链接]
ID:233911 发表于 2017-9-18 17:47 | 显示全部楼层 |阅读模式
因上次转让出的万年历集大成版控制板主要是针对我的数码管设计的,测试中的程序没法直接给LCD12864和LCD240128使用,这两天应个别坛友要求,特调制了两个小程序供买板的坛友直接拿过去使用。仅调试了个把小时,没实际进行老化试验,bug难免。还是老话,我主攻的数码管显示,没精力折腾其他程序。而且工作合同即将到期,很多杂事要处理!
发现bug自己修改,并欢迎技术回帖!

第一个:GPS+LCD12864+DS3231
图片:
大字体主界面(我故意调到911,以测试自动校时用的):

1.jpg


郑重提示:下载程序时必须将GPS断开!
万年历运行中使用GPS时,电脑串口断不断开无所谓。

K4切换至GPS显示界面:
2.jpg

在此界面随时使用K1(MOD)键强制手动校时。

GPS信息完整显示界面:
3.jpg

经纬度第一个小数点前为度,第一个小数点后为分。
如:东经118度59.00分。如需显示秒,自己转换:0.00*60=0.0秒。
定位信息出现后5分钟自动与DS3231校时。


一广州坛友打电话要求设个定时几小时校准一次DS3231。
我说首先DS3231已经很准了,日误差远低于1s;第二如果把GPS一直挂在万年历上,还不如直接把GPS当RTC得了,何须浪费个DS3231!
因此特专做了个GPS+LCD12864的程序供选择。

二、GPS+LCD12864
大字体主界面(早上手机拍的,将就看):
4.jpg

GPS没有温度了,需要的自己加18B20。

K4切换至GPS信息界面:
5.jpg


在运行模式下K3键是屏幕背景灯开关,GPS支持热插拔。
只要波特率是9600,NMEA-0183协议就可以直接使用。
如果波特率是4800(GPS常用就这两个波特率),就可以在程序里面将宏定义BAUD 9600改为 BAUD 4800
#define BAUD 9600  
不建议使用4800,虽然波长大抗干扰好,毕竟速度慢,个人意见。


淘宝2手gps风险大,几块钱一个,一般都是随机选择不包好,本人曾买过8个坏了两个,那两个明显受了外伤的,没办法,卖家连这最基本的常识都不知道?
最后教大家一招如何简单测试GPS好坏的方法。
6.jpg

外壳上有 9.6kps,恭喜你,我的程序你可以直接使用了。淘宝最常见的二手GPS八成以上都是韩国货,质量也还过得去。

拆开,接线端子上一般是四根线,最外端的红黑一般是5V供电+-。
如果不是红黑色,那么在端子旁边有个小纽扣电池,电池上有标正负。万用表测短路档,一端接电池-,另一端去测试接线端子,找到-。其次可以顺着电池+极找到3.3v的稳压块,可以在稳压块上找到5V供电+。
5V接上通电后板载指示灯会亮:
7.jpg


拿一发光二极管,二极管-接电源-。正极接任意一根未知端子。
如果发光二极管有规律的一秒亮一次就确定了这根是TX,即接万年历的RX。因为GPS是每秒发送一次数据,不管有没有接受到卫星信号。如果两根线分别接上发光二极管都常亮或不亮,那就只有默哀了。

常规情况下靠近电源+极的就是TX。
另一根线应该是RX用来刷机用的,我们空置不管。
因为常规的TTL排序是 VCC  TX  RX GND。

8.jpg

还有个别种类gps带绿色寻星指示灯,寻星中为绿色闪烁,定位成功为绿色常亮。如果刚送电就常亮绿灯显然是坏了。

原本想淘它几百个来测试挑选出无故障的再来一乐论坛转让的,但实在没精力了……
最后向此次买万年历控制板的几个坛友说声抱歉。
本人平常上班,晚上下班回来都6:30过了,故平常没法发快递。所以我转让的东西都是挑周末或节假日发布。
这次刚好撞上了中秋节快递爆仓,虽然是两家小快递,平常也还能实现江浙沪次日达的,这次居然发货后3天都还没出本地中转,实在意外。
所以补发两个GPS程序以精神安慰!
各收一个币,象征一下:
GPS+LCD12864+DS3231大字体翻页版:
GPS 3231 12864.rar (99.22 KB, 下载次数: 89)

评分

参与人数 1黑币 +5 收起 理由
陈润源home + 5 很给力!

查看全部评分

回复

使用道具 举报

ID:233911 发表于 2017-9-18 17:50 | 显示全部楼层
问:仿制成功,温度显示有问题,不能大于26度,是哪的问题啊
答:
  1. 好多人反应都有这个问题,一超过25.5就回到了20多,暂时没条件测试了,等我的新的大数字万年历板子回来了再测试。
  2. 怀疑是DS3231.h中的 uint    read_temp()   是否有问题(26度的临界bug)。
  3. uint    read_temp()       /* -------- read temperature -------- */
  4. {
  5.                 int     itemp;
  6.                 float   ftemp;
  7.                 //温度数据是以2 进制格式存储的并不需要数制转换
  8.                 write_byte(0x0e,0x20);//0x0e寄存器的CONV位置1开启温度转换

  9.         itemp = ( (int) read_random(0x11) << 5 );          //放大32倍
  10.         itemp += ( read_random(0x12)>> 3);
  11.         Stop_I2C();
  12.         if(itemp & 0x1000)
  13.                         itemp += 0xe000;        /* if sign bit set, make 16 bit 2's comp */

  14.         ftemp = 0.3125 * (float) itemp+0.5;    /* 放大10倍 */
  15.                 return  (uint) ftemp;
  16. }
  17. 该read_temp() 函数放在C++编译环境中测试是可以大于26度的。

  18. 和温度相关的另一个函数是displaytime.h中的:
  19. /*温度值显示-----------------------------------------------------------------*/
  20. void displaytemp()
  21. {
  22.         uint tvalue=read_temp();

  23.         set1616pic(5,4,0,1);                                         //显示"温度计图标"
  24.         write_com(0x30); write_com(0x06);        
  25.         write_com(0x9d);           //在液晶上显示温度起始位置:"28.8°C"
  26.         if(tvalue>=100)
  27.         write_data(tvalue%1000/100+0x30);    //显示十位
  28.         else
  29.                  write_data(0x20);    //不显示十位
  30.         write_data(tvalue%100/10+0x30);    //显示个位         
  31.         write_data(0x2e);          //显示小数点         
  32.         write_data(tvalue%10+0x30);    //显示小数位
  33.         set1616pic(8,4,0,0);           //在第8列第4行不反白的°C图标
  34. }
复制代码

此函数似乎没多大问题。

但是我用同样的DS3231.h做的其他几个时钟温度是可以大于26度的:
1.jpg

2.jpg

3.jpg

29度!

希望其他懂单片机的坛友看到了此回复有精力就帮忙测试下DS3231的温度函数问题。

如果温度不够,可以用手触摸ds3231芯片让其升温至26度上!

原因已找到,  ds3231芯片的问题  ,换了个就没事了,用的是一年前买的不带#号的片子。
回复

使用道具 举报

ID:82765 发表于 2017-9-18 19:55 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

ID:225681 发表于 2017-10-28 09:51 | 显示全部楼层
没看到电路图是什么个意思?可否提供下
回复

使用道具 举报

ID:90212 发表于 2018-2-17 21:59 | 显示全部楼层
2014年的测试图片,2017年发帖……
回复

使用道具 举报

ID:116551 发表于 2018-6-28 22:11 | 显示全部楼层
楼主,想问一下,P2.0用PNP三极管控制的液晶屏的背光有什么作用吗,可不可以直接接电源的负,谢谢
回复

使用道具 举报

ID:116551 发表于 2018-7-14 20:24 | 显示全部楼层
您好,我做了一个您设计的时钟,第一个,您的程序里不是有一个12小时自动对时一次吗,我测试了好几天这个功能都实现不了,我又改了一下,1小时自动对时一次,也不行,是程序的问题吗,想问一下您做的第一个时钟有没有这个问题,我用的GPS是GPS模块 NEO-7N UBLOX。麻烦您能解答一下,谢谢
回复

使用道具 举报

ID:116551 发表于 2018-12-31 22:11 | 显示全部楼层
您好,我做了一个您设计的时钟,第一个,您的程序里不是有一个12小时自动对时一次吗,我测试了好几天这个功能都实现不了,我又改了一下,1小时自动对时一次,也不行,是程序的问题吗,想问一下您做的第一个时钟有没有这个问题,我用的GPS是GPS模块 NEO-7N UBLOX。麻烦您能解答一下,谢谢
回复

使用道具 举报

ID:190223 发表于 2019-3-22 23:42 来自手机 | 显示全部楼层
为什么gps校准不了时间啊
回复

使用道具 举报

ID:567636 发表于 2019-7-16 19:34 | 显示全部楼层
看上去好像不错了!
回复

使用道具 举报

ID:138130 发表于 2019-9-18 18:42 | 显示全部楼层
各位朋友,大家好!谁有以上不带#号的ds3231芯片购链接,帮忙发一下,将不胜感谢!(因本人DIY的时候碰到以上的温度问题得不到解决。)
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表