一乐电子

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

QQ登录

只需一步,快速开始

微信扫码登录

手机号码,快捷登录

手机号码,快捷登录

搜索
查看: 3605|回复: 14

[其他综合] GPS自动授时万年历第二阶段成果汇报

[复制链接]
发表于 2013-11-28 20:57 | 显示全部楼层 |阅读模式
     这两天忙里偷闲略有进展,发现了几个问题:    1.测试过程中偶尔发现LCD时间不跳动不知是何原因,后把TTL信号并联一路通过TTL2Com转接板接到电脑同步监控,发现:

        接收到的 $GPRMC 有效数据包并不一定都是72字节,除了开机寻星过程中会有较短数据外,正常情况下偶尔也会有70字节和71字节的。日期前面的航向会出现不固定的位数。

     2.89c52单片机容量太小,用89C58rd测试,定义了一个二维数组变量或一个GPRMC结构就溢出了,只能xdata,C++中常用的编程方法在keil中总要变换下,累。

     3.关于时区问题,C++中定义一个TDateTime t; ...........t+= 1.0/3(1/3 天=8h)..自然就变成了东8区了。而Keil中非得判断8-16点,再判断12个月份的天数等等,年月日都涉及到累加,稍一疏忽就容易出错。

     4.下载了几个gps授时的程序,发现毕竟不是C语言科班出身,虽然在判断GPRMC 字符串加了各种各样的验证,可是最基本也是最好用的自带异或验证没有一个人用到,也许是不懂也许是嫌啰嗦。此验证机制为:$后至*前所有位异或 取两位16进制码,即*后的两位。

     第二季进展照片:

坐标给解析出来了

坐标给解析出来了



度分秒分开

度.分.秒

度.分.秒



出现假死,并联ttl信号到电脑同步接收数据才发现原因:

并联电脑同步接收

并联电脑同步接收



并联电脑同步接收

并联电脑同步接收



花了点儿时间做了个验证小程序,免费放送。
   

自编校正码ruanj

自编校正码ruanj



异或验证小工具:
异或验证.rar (187.52 KB, 下载次数: 854)



评分

参与人数 2一乐金币 +24 收起 理由
xiaomage + 12
DIY + 12

查看全部评分

发表于 2013-11-29 18:21 | 显示全部楼层
先前有網友教導以 , 來計算他的接收位置,好像比較簡單!!
//0819 跳過幾個逗號

void JPDM(unsigned char DM)
{
  rec=0;
  while(DM)//>dmt
   {
    while(rec==0);
//        if (rec==1)
         {
     if(REV_DATA == ',')
         {
         rec=0;
         DM--;//dmt++
         }
         }
   }
}

我最近作了一個機車超速警報器

unsigned char  Get_Gps(void)//改寫 gps 讀取程式 把 Gok=GPRMC_K() 取消
{
unsigned char TT;
  if(rec==1)
    {
    if(REV_DATA == '$')
     {
      rec=0;
     }
         }
         else
         {
         return 0;
         }
         while(rec==0);
     if(REV_DATA == 'G')
                  {
          rec=0;
          }
         while(rec==0);      
     if(REV_DATA == 'P')           
                {
        rec=0;
        }
         while(rec==0);        
     if(REV_DATA == 'R')//一路比較下去全部要相同 "GPVTG,"           
                  {
          rec=0;
          }
                   else
          {
                 return 0;     
           }
                     while(rec==0);        
          if(REV_DATA == 'M')//一路比較下去全部要相同 "GPRMC,"   
           {      
                        rec=0;     
           }
                     while(rec==0);      
          if(REV_DATA == 'C')//一路比較下去全部要相同 "GPRMC,"           
                   {
                 rec=0;
            }
          while(rec==0);     
          if(REV_DATA == ',')//一路比較下去全部要相同 "GPRMC,"
                   {
             rec=0;
             }
                  else
                    {
              return 0;
            }

  CLCKFL(6);//取 時分秒

    JPDM(1);
        while(rec==0);
        {
    GPS_AV = REV_DATA;
        }
   

  JPDM(5);//跳過5個逗號取速度000.00km
        SPEDFL(6);//取 速度000.00km
  TRNUM();

  TT=CLCK[0]*10+CLCK[1]+8;//時間補差格林威治對中原標準
  if(TT>23)
     TT-=24;
         CLCK[0]=TT/10;
         CLCK[1]=TT%10;

  return 1;
  
  }


// ---------  GPS MAIN PROGRAM -------------

void main(void)
{
        unsigned char STR_DIS=5;
Init_Timer0();
UART_Init();
  CLCK[0]=1;
        CLCK[1]=2;
        CLCK[2]=0;
        CLCK[3]=0;

while(1)
{
Get_Gps();
Gok=1;//----------------------------test
  if(Gok==1)
      {
                                if(dispt_flag)
                                {
                                        Display_tData_Operation ();       
                                }
                                else
                                {
       Display_Data_Operation ();//轉換相關值到顯示
           }
         }
                if(ALRMSPEED>26 && ALRMSPEED<30)//時速在 50~60之間警報
                {
                        alrm_flag=0;//-
                        BZ=0;
                }
                else
                {
                        alrm_flag=1;//*
            BZ=1;
                }               

if(disp_flag==1)
   {
     disp_flag=0;
     Display();
    }
   Display();
  }
}
//$GPRMC,115900.000,A,,N,,E,00.38,,    test pattern
回复

使用道具 举报

发表于 2013-11-28 21:14 | 显示全部楼层
期待楼主早日完成
回复

使用道具 举报

发表于 2013-11-28 21:36 | 显示全部楼层
不错哩,支持下!
回复

使用道具 举报

发表于 2013-11-28 21:39 | 显示全部楼层
绝对的高人!只可惜我单片机还没学会。
回复

使用道具 举报

发表于 2013-11-28 22:00 | 显示全部楼层
期待lz早点搞出来。
回复

使用道具 举报

发表于 2013-11-28 22:48 | 显示全部楼层
1\ 应该是LCD易受干扰,可以算是LCD的通病。LED可靠得多。
2、 不理它是不是72字节,拿逗号来分隔应该没错的。
4、现在的人太浮躁了,省了验算的步骤,其实那对程序的鲁棒性很有帮助,强烈建议要有。

楼主有心,顶一个。
回复

使用道具 举报

发表于 2013-11-29 00:30 | 显示全部楼层
呵呵    也刚准备做个gps授时时钟
回复

使用道具 举报

发表于 2013-11-29 07:19 | 显示全部楼层
支持......高手 ...关注下一步
回复

使用道具 举报

发表于 2013-11-29 07:53 | 显示全部楼层
我的GSP时钟搞几天了,还是不行
回复

使用道具 举报

发表于 2013-11-29 08:55 | 显示全部楼层
还是不行,爱。。。
回复

使用道具 举报

本版积分规则

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

GMT+8, 2025-11-1 01:24 , Processed in 0.040090 second(s), 34 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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