新闻  |   论坛  |   博客  |   在线研讨会
****R项目范例
tvb2058 | 2007-09-19 15:05:10    阅读:4232   发布文章

****R项目范例

这是一个完整的项目文件,程序我已经全部调试完毕,现将软硬件资料全部上传,供大家参考学习。里面包含了M16ADEEPROM、定时器、中断、看门狗等内部资源的使用,以及菜单程序、浮点数的存放与取出和显示、液晶显示、数字滤波、按键复用等内容。项目硬件比较简单,AD0AD1读取两路420ma电流信号(由RCV420转换成05V的电压信号),AD2读取电压信号

该系统主要完成这样一个工作,从AD0读出温度、AD1读取差压,由这两个值根据一个公式计算出流量并显示,AD2读出全压并显示。系统有4个按键,分别接在4IO口上,这是个按键是 “设置/退出向上/1”向下/右移确认/保存,这些按键用于设置3路模拟量的上下限值和其他的一些系统参数。整个系统不算复杂,但程序稍微繁琐,调试较费时。PCB绘制好,正准备制版,等焊好了再发上来吧

因为赶时间,并且项目对运行时间无要求,程序中使用了较多的浮点数,导致HEX文件较大。菜单程序使用了全局变量screen_status来记录菜单的状态。

对于AD值的处理,我使用了一种自己摸索出来的滤波方法,对于AD值在正负2以内的跳动非常有效。具体如下实现:用一个全局变量last_ad来存放上一次AD转换的值,每次显示AD值时都要拿本次的AD值与last_ad做比较,若比last_ad1,则本次值减1,大2则减2,依此类推,并把处理之后的AD值放入last_ad中作为下次比较的值。这样就可以滤出正负2以内的跳动(对于这样的跳动,平均值滤波是无能为力的,具体原因嘛,自己试验一下便知道了)


使用ATMAN****R4.5编译通过,GCC版本为3.4.1  GCC提供了较为丰富的库函数,这个程序中的AD、浮点、EEPROM等都是使用函数完成的,稍后我会贴一篇专门介绍浮点数应用的文章,敬请关注。


另外我把12864液晶的驱动单独做了一个范例文件,放在另一个帖子里了

注:仅供学习使用,请勿用于其他用途


项目文件,包括SCH、熔丝、程序

点击此处下载armok0166341.rar


项目硬件

正常画面

主菜单1

主菜单2

主菜单3








测试模式,显示AD值、电压值、电流值


项目中使用的焊接式变压器

电流转电压芯片RCV420

液晶近照

液晶近照


液晶型号LCM128645,北京青云创新科技生产,零售价120左右,建议购买成都飞宇达的,与之兼容(管脚不兼容),大概90多吧,还有几种颜色可选,北京网上中发也有买的

对于AD值的处理,我使用了一种自己摸索出来的滤波方法,对于AD值在正负2以内的跳动非常有效。具体如下实现:用一个来存放上一次AD转换的值,每次显示AD值时都要拿本次的AD值与last_ad做比较,若比last_ad1,则本次值减1,大2则减2,依此类推,并把处理之后的AD值放入last_ad中作为下次比较的值。


我也来聊下对于AD显示数据跳动的处理吧   同样是用全局变量last_ad  但我还加多两个标志位和一个计数寄存器   标志位用来标志数据是上升还是下降  计数寄存器用来计算上升或下降时比较的次数  AD值计算出来后 last_ad 比较  上升还是下降  标志不同的标志位  同时计数寄存器加1  当然显示数值由升转降或 “降转升都清计数寄存器   连续为升且计数寄存器为3次以上才能变化  否则不变 并把处理之后的AD值放入last_ad中作为下次比较的值   这样可以减少显示跳动的次数

 

滤波程序不会改变分辨率的,分辨率还是1,只不过更稳定了

*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。

参与讨论
登录后参与讨论
推荐文章
最近访客