一乐电子

一乐电子百科

 找回密码
 请使用微信账号登录和注册会员

QQ登录

只需一步,快速开始

快捷登录

手机号码,快捷登录

搜索
查看: 14772|回复: 40
收起左侧

[其他综合] GPS自动授时万年历12864大数字翻页版

[复制链接]
发表于 2013-12-7 21:05 | 显示全部楼层 |阅读模式
本帖最后由 gongzhu 于 2013-12-10 20:04 编辑

GPS自动授时总算完成了。先上硬件: 001.jpg

002.jpg

万年历空板来自*宝店铺: 大脸福猫。12元/块。原理图见下载包。
板上元器件除了12864稍贵些,其他元件总价应该在30元内。原版电源部分加了交流整流二极管和7805稳压,可废除,5V电源到处都是,或为安全起见可加个二极管防反接。
板载rs232、TTL、ISP下载口,GPS四线(空一线)可直接用4p端子接到板载TTL接口(供电带接收)
该板32768晶振未并两个20p电容,所以走时偏快,约快20s/天,只好自己搭桥。在小林电子淘了个示波器准备把DS1302的走时精度调到1s/天内。


GPS模块(二手韩国产,内置天线):JSA-S100 ATMEL方案。来自*宝店铺: 伊扬lcd。15元/个,坛友买2送1。
GPS.jpg

信号线定义:红黄蓝白。红:+5V; 黄:TTL-232输出 ;蓝:无所谓,悬空;白:GND。电源TTL公共负极

    运行图片就不发了,详见已发布的GPS万年历进展帖子中:
   GPS自动授时万年历第三阶段成果汇报        https://www.yleee.com.cn/thread-29141-1-1.html

    12M和11.0592M晶振在串口定义上还是差别蛮大的,反正我直接用11.0592的串口初始化收到的数据都是乱码,后不得不改为T2才正常。

串口解析的原理:
    串口中断中判断标志头--'$',接着判断命令头"GPRMC",不符合则抛弃数据,符合则等待接收标志尾--回车符'\r'。
    收到完整的标志头尾数据后判断数据长度:有完整时间数据长度38--72(不含回车符),再进行数据校验(防止夹杂错、乱、断码),然后解析。
    解析串口数据后剥离出时分秒、年月日进行时区修正计算。其实后来想想,因为出现定位数据至少需要3颗卫星(3颗定位、1颗修正),而且消耗时间过长,测试都在3min以上。而时间数据只需1颗卫星即可,因此可以将卫星信息$GPGSV字符串也采集出来,判断第3个逗号后的数据只要不为00即可($GPGSV,1,1,02,.....)说明此刻$GPRMC收到的时间数据准确,这样耗时一般不超过30s。接收数据时就需要判断两个命令头了,或是不判断命令头,接收所有的标志头尾在解析的时候判断命令头亦可。

    毕竟是菜鸟,买了个51开发板就自学入门了,因为有比较完整的视频,一周就差不多学完了,因为有C++的基础,边学边练还比较顺利。单独编GPS信息采集也还算顺利,中途就发现ISP下载偶尔会不正常,即下载的并非最后一次修改的内容。因为有LCD显示,所以在每次修改编译前都把LCD初始化后的开机信息中附加个“0”或“1”之类的信息,以辅助判断是否下载了最新程序,这样调试就快捷多了。同时为了方便调试,将GPS输出TTL信号并联一路通过TTL转接板送至电脑,做了个GPS解析程序和校验程序(前面过程贴子中已发布)可同步监控单片机运行情况。电脑只有一个串口供单片机下载,另一个串口是使用的串口服务器。
在GPS信息采集测试了几天后感觉该有的异常情况都考验了一遍没什么大问题了就集成进了大数字版万年历,谁知问题重重,甚至开机就死机。好容易把问题逐步解决能正常显示了GPS信息了,可又发现在C++环境中完全没问题的自编校验函数不正常了——校验的数据长度逐渐增加都正常,可数据长度一旦减少就不正常了,可这个函数在单独的GPS信息采集中是不存在这个问题的,同时还发现“正”、“待”等汉字都无法显示。咨询了大脸福猫后,他建议换个Keil版本,因为V8.05有bug,崩溃!第一次知道这个软件竟然有bug。重新下载了个号称最完美的keil C51 2013版的V8.02汉化版,安装包才12M比原来22M小了近一半,编译下载后校验函数也正常了,特意测试了“正、待、三”等汉字,都正常了,也明白了原来万年历中程序为何把“三”转换了内码。
    真诚建议新手使用好软件配合好硬件,这样入门会快些。不然硬件软件毛病一起扑来都会让人丧失学习的信心的。有能力的尽量玩玩“二手”硬件,不仅是为了省钱不败家,也可利用“二手”不稳定的特性锻炼自己程序的“健壮度”。
    建议菜鸟们一定要搞清楚16进制,见好多程序把16进制绕来绕去的,看得眼花缭乱。
    毕竟不是电子科班出身,程序bug难免,欢迎批评指正,共同进步。


GPS自动授时万年历12864大数字翻页版:
Big_Gps.rar (900.01 KB, 下载次数: 8730)


GPS辅助调试软件:
GPS辅助调试软件.rar (431.65 KB, 下载次数: 8571)



T2波特率设置接口 更新main.c文件 见8楼下载!!



发表于 2013-12-7 21:17 | 显示全部楼层
羡慕啊
发表于 2013-12-8 00:25 | 显示全部楼层
楼主的GPS模块的波特率是多少?
程序中有波特率设置吗,没找到
发表于 2013-12-8 00:30 | 显示全部楼层
强力支持折腾 超给力
发表于 2013-12-8 09:09 | 显示全部楼层
感谢楼主的无私分享,
 楼主| 发表于 2013-12-8 09:18 | 显示全部楼层
本帖最后由 gongzhu 于 2013-12-8 10:33 编辑
xiaomage 发表于 2013-12-8 00:25
楼主的GPS模块的波特率是多少?
程序中有波特率设置吗,没找到

看样子你还得多深入研究:
void InitBps()
{
    //T2设置
    //RCLK = 1;
    //TCLK = 1; //选用T2作为串口时钟          /** 这两句多余了,T2CON = 0x34 就全包含了**/

        SCON = 0x50;            //8-bit variable UART         

    TL2 = RCAP2L = 0xD9;    //9600-----12M晶振
    TH2 = RCAP2H = 0xFF;               

    T2CON = 0x34;                //TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RL2                 //串口工作模式1,接收使能

    ET2 = 0;
    ES = 1; //串口中断允许
    PS = 1; //串口中断优先
    EA = 1; //总中断
    //TR2 = 1; //启动T2   /** 这句也多余了**/

    Delay(500);
}

 楼主| 发表于 2013-12-8 09:40 | 显示全部楼层
本帖最后由 gongzhu 于 2013-12-8 10:30 编辑

TIMER2作为波特率发生器,要注意以下几点:
1.C / T位清零,选择OSC / 2作为时钟;
2.TH2和TL2串联成16位时钟,溢出后自动重装;重装常数存放在RCAP2H和RCAP2L;
3.置RCLK和TCLK为1,将特率生成器切换到TIMER2;
4.置TR2,启动TIMER2。

代码如下:
void Uart0_Init()
{
    //12M晶振9600波特率对应 FFD9H
    TL2 =RCAP2L = 0xD9;
    TH2 =RCAP2H = 0xFF;

    //RCLK = 1;    TCLK = 1;
    //TR2=1
    T2CON = 0x34;

    //串口工作模式1,接收使能
    SCON = 0x50;
   
    //允许串口中断
    ES = 1;
    return;
}



点评

超给力[/backcolor]  详情 回复 发表于 2020-2-3 12:42
 楼主| 发表于 2013-12-8 10:07 | 显示全部楼层
本帖最后由 gongzhu 于 2013-12-8 10:09 编辑

为方便大家更通用,彻底奉献了T2波特率设置接口
只有main.c文件: 引出波特率设置接口.rar (7.86 KB, 下载次数: 7994)



说明:因为在家没东西实际测试,理论计算没有问题。


 楼主| 发表于 2013-12-9 18:19 | 显示全部楼层
main.c中修正两点:
1.void GPS_JS(void)  函数最后加个 Beep_y(); 提醒校时成功。
2.void GetRs232_Data() interrupt 4 中有段废语句删掉:

                if(byte_count == 20)
                {
                    if(RsBuf[20] != 'A')         /** A 为数据有效 **/
                    {
                        mode = 0;
                        byte_count = 0;
                    }
                }
发表于 2013-12-10 12:21 | 显示全部楼层
我的还在调无线传输模块,我是准备把GPS放在户外,然后通过NRF24L01把GPS串口数据发给室内时钟,再解码校时。这样就不用把时钟拿到窗台校时了。LZ进度很快呀。

本版积分规则

QQ|一淘宝店|手机版|商店|电子DIY套件|一乐电子 ( 粤ICP备09076165号 ) 公安备案粤公网安备 44522102000183号

GMT+8, 2024-3-29 10:19 , Processed in 0.074802 second(s), 51 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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