论坛风格切换切换到宽版
  • 29542阅读
  • 86回复

AVR M8+240128屏全中文显示航海用GPS解码装置 [复制链接]

上一主题 下一主题
离线BG4UVR
 
发帖
11201
只看楼主 倒序阅读 0楼 发表于: 2007-09-19
2020.4.14:
修正后的完整工程文件已保存在Github和Gitee
https://github.com/bg4uvr/gps
https://gitee.com/bg4uvr/gps

2020.2.9 BUG修正:
非常抱歉:本代码中发现存在一个错误,会造成星期显示为错误结果,因当年未仔细测试加之水平有限,此错误直到今天才被意外发现。

修正方法:

gps.c中,第15行至23行更改为:
  1. //计算星期
  2. extern unsigned char week(unsigned int y, unsigned char m, unsigned char d)
  3. {  
  4.     if(m<3)
  5.     {
  6.         m+=12;
  7.         y--;
  8.     }    
  9.     unsigned char w=(d+2*m+3*(m+1)/5+y+y/4-y/100+y/400)%7+1;
  10.     return w==7?0:w;
  11. }


main.c中,第366行更改为:
  1.     switch(week(Byear,Bmonth,Bday)){


以上更改由于未在板子上实际测试,如有问题请告知。


2009.10.19最新更新:公开源代码
原因是希望我的代码能对大家学习单片机或gps解码,能有所帮助。
a、本源代码任何人可免费使用,而不必通知我,但不得用于任何商业用途。
b、请遵守网络道德,禁止加入个人信息并声称为自己的作品,转帖请注明本帖原始地址:
http://www.hellocq.net/forum/showthread.php?t=160030
c、本代码不保证不存在缺陷。本人精力有限,不保证可以及时回复关于本程序的相关问题。


功能简介:
1、全中文显示
2、显示内容包括:航向、航速、经纬度、里程表(掉电记忆)、日期、时间、高度、定位状态、收星数
3、自动适应4800和9600bps的gps模块。(默认为4800的,9600时可以自动切换,不过启动时要多等上2秒钟。注意:更换gps后需要重新开机启动)。

代码已经过初步测试,如发现存在bug,欢迎指出,我会尽量加以改进。m8内部空间基本用完了,再加其他功能基本非常困难了。

atmega8(l)的熔丝配置说明:(熟悉avr的朋友可以跳过这段)
新的芯片,熔丝是出厂默认的状态,在此状态,读入熔丝配置。
以下关于熔丝的说明中:
1指不编程,在大多数的编程器中,是把勾去掉。
0指编程,在大多数的编程器中,是打上色。
1、必须更改的熔丝
sksel3:0=1111  sut1:0=11  
说明:这2组熔比是设置mcu的时钟源和上电启动时间的。这不是唯一可以工作的的组合,不过为了方便,请选用此组合。
2、建议更改的熔丝
eesave=0
说明:这个熔丝是设置在擦除芯片时,是否擦除内部eeprom。由于eeprom内存储了里程数据,为了再次编程时,保留原来的里程数据,可以编程此熔丝。
bodlevel=0
boden=0
说明:这2个熔丝设置掉电检测的电压值为4伏,和使能掉电复位功能。因为程序中对eeprom区进行写入和读出操作,为了避免掉电时出现意外改写,请编程此熔丝。
3、千万不能更改的熔丝
rstdisbl和ispen
如果改了这2个熔丝,你将无法再使用isp编程器来给芯片编程,必须使用并行编程器才能恢复。
wdton
如果改了这个熔丝,芯片将反复进入重新启动,无法正常工作。因为这个熔丝会使能看门狗,但本程序中未使用它。不过,这个熔丝即使设置错了,仍然可以用isp编程器来改正。
只更改以上的熔丝,并写入芯片,烧入代码后,应该就可以工作了。

代码更新历史记录:
2007.9.19 18[表情]
1、修正速度、航向输出屏蔽无效0位时的对位错误bug
2、修正未定位时仍然增加里程的bug
2007.9.19 19[表情]
1、完善高度数据处理部分的代码,现可对5位、6位格式的高度数据,带小数点与不带小数点的高度数据,带负号与不带负号的高度数据,都能正确对齐显示。
2007.9.20 13[表情]
1、修正上次更新造成的里程表不计数bug
2007.9.20 15[表情]
1、修正里程表计数值比实际值放大10倍的错误。
2007.9.22 12:27
1、实在无聊,加了一只led指示gps的定位状态。没连接灭,没定位闪,定位亮。
2007.9.26 14:51
1、更改原lcd的上电自复位为mcu软件复位,以降低原上电复位对电源上升速率的要求,彻底解决有时上电时lcd显示乱的问题。
2007.9.28 12:45
1、新增编译变量,支持公英制界面编译。可以分别编译出公英制显示界面的代码。
2、改led的状态为:未连接亮,未定位闪,定位灭
2007.9.29  8:15
1、根据朋友要求,更改日期和时间信息从gprmc语句取得,以适合绝大多数的gps模块。造成的问题是,即使gps模块接有备份电池,启动后未定位前,日期显示仍是不正确的。不过定位后自动更新,并在重新上电启动前,一直维持正确。
2007.10.03 15:09
1、修正上次更新造成的日期显示错误

附件已经是最新的更新版本。km_h.hex.txt和knot.hex.txt分别为公、英制显示版本的烧片文件,请下载后将.txt的扩展名删除即可。


[ 此帖被BG4UVR在2020-04-17 12:35重新编辑 ]
附件: M8_240128_GPS.pdf (0 K) 下载次数:1078
附件: hm_h.hex.txt (0 K) 下载次数:714
附件: knot.hex.txt (0 K) 下载次数:652
附件: M8_240128_GPS.rar (0 K) 下载次数:844
离线BA4WI
发帖
3769
只看该作者 1楼 发表于: 2007-09-19
偶没有船,能不能把转换成公里:)
离线BG4UVR
发帖
11201
只看该作者 2楼 发表于: 2007-09-19
转成公里比较容易。但里程表的部分,是这次头一次使用,没有经过实际移动测试,目前比较怀疑其准确性。准备有人做好进行移动测试后,对里程表部分的准确性进行评估,找出误差原因,改进代码。

然后,再改成公里数就可以了。不然改成公里,但不准确,等于没有,呵呵
离线BA4WI
发帖
3769
只看该作者 3楼 发表于: 2007-09-19
呵呵呵,上次烧的片子也是海里的。一开始我还想车怎么跑的那么慢的呢:)
离线BG4UVR
发帖
11201
只看该作者 4楼 发表于: 2007-09-20
公里数的版本,相信以后会发布一个,请有兴趣的各位朋友等待一下。现在主要存在的问题是,经过测试,发现moto的8通道gps板,在定位后,输出的方位角和速度,都有一定的漂移(我一个12通道的hp芯片的gps板不存在这个问题)。

由于这个漂移在存在,直接影响了里程的计算。因为里程是从速度计算出来的,静止时本应该里程不增加。现在为了尽量兼容这个moto的gps(这种板似乎在ham中的所有量还是比较多的),目前做了一个折中处理,就是速度低于一定值以下时,里程数不增加。

好处是,moto板的里程误差变小了。差的是,如果移动的速度足够慢(比如步行),那么显示的里程数,会小于实际里程数。

另外,由于没有经过实际装船测试,现在有些担心,船舶的左右摇摆,将会造成里程数比实际值有所增加,不过通过一定算法,这个误差是可以减小的。
离线BG4UVR
发帖
11201
只看该作者 5楼 发表于: 2007-09-20
'
你说的用moto的8通道gps板出现的现象, 在我用12864+moto的8通道gps板装的gps时也发现定位(经纬度)误差非常之大(在古狗地图对比近100米), 用古野gps模块就ok, 不知是moto的8通道gps板本身的问题?   期待您的公里数版本的 [表情] [表情]
'

应该是板的问题了(或者是测地系没有被正确设置),漂移肯定是大的,必竞是不同时代的产品
离线BG4UVR
发帖
11201
只看该作者 6楼 发表于: 2007-09-20
今天用我12通道的模块放在车上进行了移动测试。结果方位角及速度、高度的显示还算正常,没有出现预想中可能存在的问题。不过发现了一个极其严重的问题:里程表不计数!里程表,我刚写好时,是测试过的,当时虽然没有移动,但我把速度放大了,用moto的板,计数还算正常。下午过来马上查程序,发现用于判断定位与否的一个标志,'a',被我写成了'a'……

顶楼的代码已经更正了这个bug。
离线BG4UVR
发帖
11201
只看该作者 7楼 发表于: 2007-09-20
'
[表情] 上传的资料已更新了吗? 谢谢!
'

已经更新了啊
离线BG4UVR
发帖
11201
只看该作者 8楼 发表于: 2007-09-20
'
硬是要得呢 [表情] 介面非常好看, 快上一张.公里.的图片看一下 [表情] [表情]
'

公里的还没写改出来那,先做板吧,尽量找出问题,让那公里版本一次成吧
离线BG4UVR
发帖
11201
只看该作者 9楼 发表于: 2007-09-22
实在无聊,加了一只led指示gps的定位状态。没连接灭,没定位闪,定位亮。
离线BG4UVR
发帖
11201
只看该作者 10楼 发表于: 2007-09-22
'
[表情] [表情] 我的屏正在路上
'

我的屏回到盒子里继续睡觉了
离线yyh
发帖
1398
只看该作者 11楼 发表于: 2007-09-22
不错啊.......
发帖
547
只看该作者 12楼 发表于: 2007-09-22
来个套件!!!!
离线BG4UVR
发帖
11201
只看该作者 13楼 发表于: 2007-09-23
[quote=hzyckj_cn@sina.]来个套件!!!![/quote]

要的人不会超过5个
离线albert
发帖
4807
只看该作者 14楼 发表于: 2007-09-24
'
实在无聊,加了一只led指示gps的定位状态。没连接灭,没定位闪,定位亮。
'
没定位亮,定位闪比较习惯点
离线bd9cr
发帖
1202
只看该作者 15楼 发表于: 2007-09-26
里程可以用在一个相对短的时间里,用坐标求得。
就是在相对短的时间里,位移和路程相等
离线BG4UVR
发帖
11201
只看该作者 16楼 发表于: 2007-09-27
'
里程可以用在一个相对短的时间里,用坐标求得。
就是在相对短的时间里,位移和路程相等
'

用坐标计算,如果使用三角函数直接计算2个坐标间的距离,这个方法运算量非常大,而且对于小范围的位移,精度也一般。

如果先计算出坐标尾数对应的距离数,再根据尾数变化量来计算,运算量会小些,但仍然比较大,因为要把坐标的ascii码转换成二进值再计算,计算好后仍然要进行转换才能去显示。此方法运算量比第一种小,而且精度也一般。

相比之下,用速度和经过时间的方法计算,运算量会小很多,但精度仍然一般。

精度最高的方法,应该是第2种方法和第3种方法结合,这种运算量不会像第1种方法那么大,精度也比第2、第3种方法高。缺点是,编程复杂。

目前代码采用的第3种方法,准备看一下实际效果,如果尚能满足要求,就这样用了。因为改写代码还有一个难点,就是m8的空间已经所剩无几了
离线ba7ib
发帖
4569
只看该作者 17楼 发表于: 2007-09-27
字太多了,如图加点图形会好看些
离线BG4UVR
发帖
11201
只看该作者 18楼 发表于: 2007-09-28
是的,因为是软字库,光是这些汉字和ascii字符的字库,就已经用掉了很大一部分空间了。如果搞图形方式,估计要用32kb以上程序空间的芯片的才好。
离线BG4UVR
发帖
11201
只看该作者 19楼 发表于: 2007-09-28
公里的版本已经出来了,没有进行测试。已经做好板的朋友,我可以在qq上发hex先进行测试,没大问题在1楼发布。