搜索
bottom↓
回复: 410

上传一个完整的项目范例(原创)

[复制链接]

出0入0汤圆

发表于 2005-8-30 20:08:01 | 显示全部楼层 |阅读模式
这是一个完整的项目文件,程序我已经全部调试完毕,现将软硬件资料全部上传,供大家参考学习。里面包含了M16的AD、EEPROM、定时器、中断、看门狗等内部资源的使用,以及菜单程序、浮点数的存放与取出和显示、液晶显示、数字滤波、按键复用等内容。项目硬件比较简单,AD0、AD1读取两路4-20ma电流信号(由RCV420转换成0-5V的电压信号),AD2读取电压信号



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

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

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



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



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

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



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

点击此处下载armok0166341.rar





项目硬件



正常画面



主菜单1



主菜单2



主菜单3

















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





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



电流转电压芯片RCV420



液晶近照



液晶近照










-----此内容被Jacky于2005-08-30,21:46:04编辑过

出0入0汤圆

发表于 2005-8-30 20:18:33 | 显示全部楼层
不错啊!
头像被屏蔽

出0入0汤圆

发表于 2005-8-30 20:27:07 | 显示全部楼层
哇! 谢谢,谢谢!





为Jacky的无私交流加200分!

出0入0汤圆

发表于 2005-8-30 21:09:50 | 显示全部楼层
哇,好啊!这里好久没有出现过这样的英雄了

这才叫真正的无私嘛。

出0入0汤圆

发表于 2005-8-31 00:18:14 | 显示全部楼层
精神可嘉,真正的英雄.



我想问一下,AD转换时转换后的值跳动一二百,你有什么好的建议吗?
-----此内容被dengchongguang于2005-08-31,00:21:55编辑过

出0入0汤圆

发表于 2005-8-31 08:04:14 | 显示全部楼层
向楼主致敬!!

出0入0汤圆

发表于 2005-8-31 08:32:44 | 显示全部楼层
不错

出0入0汤圆

 楼主| 发表于 2005-8-31 08:50:39 | 显示全部楼层
“跳动一二百”,单靠软件滤波可能对付不了,我想你的硬件电路可能还有问题。

出0入0汤圆

发表于 2005-8-31 09:08:48 | 显示全部楼层
下了,好好研究一下

出0入0汤圆

发表于 2005-8-31 09:33:42 | 显示全部楼层
Thanks

出0入0汤圆

发表于 2005-8-31 10:44:45 | 显示全部楼层
XIE XIE  !!!

出0入0汤圆

发表于 2005-8-31 20:03:06 | 显示全部楼层
我编译怎么通不过,GCCAVR是在OURAVR下的;

请问这个sig-avr.h我那里面怎么没有列?

楼主能不把 "float.h" 也贴上来咯!

提示为:

j.c:24:21: sig-avr.h: No such file or directory

j.c:48: error: syntax error before "float"

j.c:51: error: syntax error before "float"

j.c:54: error: syntax error before "float"

j.c:56: error: syntax error before "float"

j.c:59: error: syntax error before "float"

j.c:61: error: syntax error before "float"

j.c:64: error: syntax error before "float"

j.c:67: error: syntax error before "float"

j.c:69: error: syntax error before "float"

j.c:200: warning: return type defaults to `int'

j.c:200: warning: function declaration isn't a prototype

j.c: In function `SIGNAL':

j.c:200: warning: type of "__vector_8" defaults to "int"

j.c:231: warning: implicit declaration of function `cbi'

j.c:237: warning: implicit declaration of function `sbi'

j.c: At top level:

j.c:252: warning: return type defaults to `int'

j.c:252: warning: function declaration isn't a prototype

j.c:252: error: redefinition of 'SIGNAL'

j.c:200: error: previous definition of 'SIGNAL' was here

j.c: In function `SIGNAL':

j.c:252: warning: type of "__vector_14" defaults to "int"

j.c:254: error: `ADCW' undeclared (first use in this function)

j.c:254: error: (Each undeclared identifier is reported only once

j.c:254: error: for each function it appears in.)

j.c: In function `lcm_init':

j.c:349: warning: implicit declaration of function `delay'

rm -f j.elf

make.exe: *** [j.o] Error 1

出0入0汤圆

 楼主| 发表于 2005-8-31 20:27:15 | 显示全部楼层
注意:“使用ATMANAVR4.5编译通过,GCC版本为3.4.1”

我使用的编译器是ATMANAVR4.5,它虽然是使用GCC内核的,但是在WINAVR下我不知道能否编译通过。我上传的是完整的工程文件,在ATMANAVR4.5是绝对可以编译通过的。

至于float.h,只要你安装了ATMANAVR4.5,在它的安装目录下就可以找到了。






-----此内容被Jacky于2005-08-31,20:30:19编辑过

出0入0汤圆

发表于 2005-8-31 21:18:22 | 显示全部楼层
哦,看来我还的另外装一个拉!谢谢!

出0入0汤圆

发表于 2005-8-31 23:00:56 | 显示全部楼层
好像没有破解的列!有没有咯!浪子,能把你的破解版传上来,共享,行不咯!

出0入0汤圆

发表于 2005-8-31 23:41:08 | 显示全部楼层
那个液晶啥型号,多少钱一块呀,谢谢,我喜欢上了它

出0入0汤圆

发表于 2005-9-1 03:39:28 | 显示全部楼层
将以上范例改写为winavr下的代码。(未测试)

点击此处下载armok0166586.rar

可以用PN打开项目。

出0入0汤圆

 楼主| 发表于 2005-9-1 07:53:41 | 显示全部楼层
LCM128645,北京青云创新科技生产,零售价120左右,建议购买成都飞宇达的,与之兼容(管脚不兼容),大概90多吧,还有几种颜色可选,北京网上中发也有买的

出0入0汤圆

 楼主| 发表于 2005-9-1 07:58:02 | 显示全部楼层
烧入16楼的HEX代码测试了一下,系统一直不停的复位

出0入0汤圆

发表于 2005-9-1 12:28:08 | 显示全部楼层
英雄

楷模

出0入0汤圆

发表于 2005-9-1 20:05:50 | 显示全部楼层
顶一下,别让他沉下去了!

出0入0汤圆

发表于 2005-9-1 20:11:19 | 显示全部楼层
谁把他改成GCC或ICC的撒!

出0入8汤圆

发表于 2005-9-1 20:13:49 | 显示全部楼层
致敬,等待你12864液晶的例子!!!

出0入0汤圆

发表于 2005-9-1 20:38:20 | 显示全部楼层
不简单, 真是精神可嘉.





还有我也是用ATMANAVR的人, 再次感谢你.

出0入0汤圆

 楼主| 发表于 2005-9-1 21:58:16 | 显示全部楼层
to: fangmcu 方谭



12864范例早已经贴出来了呢

出0入0汤圆

发表于 2005-9-2 13:29:41 | 显示全部楼层
有很多厂家作LCD,128X64的30~40元,只是没有外框(放在设备里面也不需外框)。我们公司用的很多。

出0入0汤圆

发表于 2005-9-8 10:07:30 | 显示全部楼层
不错的东西!好!顶了!

出0入0汤圆

发表于 2005-9-8 20:43:16 | 显示全部楼层
支持支持~

我也期待自己的这一天,嘿嘿~~

出0入0汤圆

发表于 2005-9-8 21:45:32 | 显示全部楼层
如此好贴真不简单,谢谢楼主。不过对滤波算法不太理解,

出0入0汤圆

发表于 2005-9-17 10:55:47 | 显示全部楼层
25楼,avr1008你好,能否给出128X64 30~40元的厂家联系方式?

出0入0汤圆

发表于 2005-9-25 20:11:06 | 显示全部楼层
这个贴子怎么掉下来了啊.找了半天才给找回来.浇点水!!







感觉像是用来做空调或制冷机类控制的吧.
-----此内容被gongcsf于2005-09-25,20:12:07编辑过

出0入0汤圆

发表于 2005-9-25 21:54:04 | 显示全部楼层
好啊!我喜欢!

出0入0汤圆

发表于 2005-9-26 09:56:20 | 显示全部楼层
看到了,谢谢

出0入0汤圆

发表于 2005-11-30 15:11:24 | 显示全部楼层
不错,挺好。

出0入0汤圆

发表于 2005-11-30 16:13:33 | 显示全部楼层
现在很少有这样的开源精神的人了。支持一下!

出0入0汤圆

发表于 2005-12-1 00:20:24 | 显示全部楼层
支持,是呀精神可佳,学习......

出0入0汤圆

发表于 2005-12-1 09:53:12 | 显示全部楼层
强烈支持

出0入0汤圆

发表于 2005-12-4 10:04:33 | 显示全部楼层
好,顶上去!

出0入0汤圆

发表于 2005-12-4 10:32:28 | 显示全部楼层
晕~~~函数dtostrf()在什么地方???

出0入0汤圆

发表于 2005-12-4 11:25:43 | 显示全部楼层
include <stdlib.h>

char *dtostrf (double __val, char __width, char __prec, char * __s);

出0入0汤圆

发表于 2005-12-6 13:05:35 | 显示全部楼层
我顶!

出0入0汤圆

发表于 2005-12-17 11:30:50 | 显示全部楼层
向楼主致敬!

ATMANAVR4.5的破解版在哪里可以下到?我的是4.4的 没找到破解 用的郁闷死

有ICC版本的代码吗?

出0入0汤圆

 楼主| 发表于 2005-12-17 13:08:07 | 显示全部楼层
可以上网找一个破解包。

ICC的版本没有

出0入0汤圆

发表于 2005-12-31 11:48:42 | 显示全部楼层
谢谢的紧

出0入0汤圆

发表于 2006-3-17 00:03:52 | 显示全部楼层
楼主好样的!向你学习!

出0入0汤圆

发表于 2006-3-17 08:43:09 | 显示全部楼层
好帖

出0入0汤圆

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





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

出0入0汤圆

发表于 2006-5-27 09:17:56 | 显示全部楼层
呵呵...继续浇水...支持

出0入0汤圆

发表于 2006-5-27 11:17:46 | 显示全部楼层
那个LCD真的不错,清晰度很高!很清爽

出0入0汤圆

发表于 2006-5-27 21:23:20 | 显示全部楼层
滤波程序也不错.刚试了一下,效果很好.谢谢楼主和linzhai

出0入0汤圆

发表于 2006-5-28 13:37:01 | 显示全部楼层
顶!

出0入0汤圆

发表于 2006-5-29 08:49:55 | 显示全部楼层
好帖,感谢楼主

出0入0汤圆

发表于 2006-5-29 10:08:16 | 显示全部楼层
感谢LZ的无私奉贤  顶在说

出0入0汤圆

发表于 2006-7-9 11:33:43 | 显示全部楼层
3Q!感谢楼主。

出0入0汤圆

发表于 2006-7-9 18:10:02 | 显示全部楼层
真不错

出0入0汤圆

发表于 2006-7-10 08:39:28 | 显示全部楼层
不错的东西,下载试试

出0入0汤圆

发表于 2006-8-4 13:58:46 | 显示全部楼层
来晚了,下载中。谢谢,4-20mA的电流信号检测。这东西是不是用在反应炉什么上的?

但是看图片你没做一个硬件异常保护措施。万一超温超压怎么办?如果是真的是反应炉,爆了可就惨了。如果只是负责显示和报警的功能,那就没什么事,嘿嘿,当年在学校的时候俺没考虑到,结果烧了学校3W多,被骂了好几个星期。(新手,问错不要骂。嘻嘻!毕业到现在没碰过工控。白学那专业了)

-----此内容被chen112于2006-08-04,14:01:36编辑过


-----此内容被chen112于2006-08-04,14:02:22编辑过

出0入0汤圆

发表于 2006-8-4 21:23:05 | 显示全部楼层
先支持再看!

出0入0汤圆

发表于 2006-8-5 17:29:36 | 显示全部楼层
高手啊!

出0入0汤圆

发表于 2006-8-5 20:04:58 | 显示全部楼层
看看先!

出0入0汤圆

发表于 2006-8-8 00:13:26 | 显示全部楼层
衷心感谢!

出0入0汤圆

发表于 2006-8-8 10:24:55 | 显示全部楼层
好,谢谢楼主.download来看看

出0入0汤圆

发表于 2006-8-9 10:26:52 | 显示全部楼层
好,收藏了。

只是:滤波程序不理解,那样的分度不就是3了吗?

出0入0汤圆

 楼主| 发表于 2006-8-25 10:30:08 | 显示全部楼层
滤波程序不会改变分辨率的,分辨率还是1,只不过更稳定了

出0入0汤圆

 楼主| 发表于 2006-8-25 10:40:53 | 显示全部楼层
to :chen112

不是用在反应炉上的,只用来显示。

如果用来控制带有一定危险性的压力容器我们一般使用两个传感器来测量压力,一个4-20mA输出的用来测量具体的数值,兼做保护。一个开关量输出的压力传感器,用来做到达极限压力时最后的保护。以避免其中的一个传感器失效时出现爆炸事故。并且压力容器一般还会设置机械安全阀,所有的电子控制测量手段失效后机械安全阀会排出压力。
-----此内容被Jacky于2006-08-25,10:47:32编辑过

出0入0汤圆

发表于 2006-8-25 10:59:53 | 显示全部楼层
支持开源!

出0入0汤圆

发表于 2006-8-25 11:40:36 | 显示全部楼层
很好!

出0入0汤圆

发表于 2006-8-28 08:12:53 | 显示全部楼层
对于这个帖子我是坚决要顶,从中得到很多启发,因为是刚搞AVR,整整一个月,参考网上例子,一个控制项目马上就要完工了。滤波程序帮我解决了大问题,困扰了我一周。终于稳定了。OK,

出0入0汤圆

发表于 2006-8-28 10:51:59 | 显示全部楼层

出0入0汤圆

发表于 2006-8-31 10:54:59 | 显示全部楼层
请问12864液晶的驱动文件在哪儿呢?谢谢!

出0入0汤圆

发表于 2006-8-31 14:09:25 | 显示全部楼层
十分感谢楼住的的无私奉献!



向楼主学习!

出0入0汤圆

 楼主| 发表于 2006-9-8 22:17:50 | 显示全部楼层
to starfan :搜索一下我的帖子,有一个LCD的范例,里面就有驱动,这个帖子也有,慢慢找

出0入0汤圆

发表于 2006-9-10 14:53:11 | 显示全部楼层
好东西呀,我是新手,顶个先!!

出0入0汤圆

发表于 2006-9-16 15:25:58 | 显示全部楼层
好东西,顶

出0入0汤圆

发表于 2006-9-16 16:40:06 | 显示全部楼层
好东西,收藏。。

这才叫无私嘛。

呵呵

出0入0汤圆

发表于 2006-10-30 10:57:39 | 显示全部楼层
楼主你好!

   看到你的范例觉得很好,但是您知道RCV420芯片到那能买到吗??我在沈阳,电子市场没有。谢谢!



                       我得EMAIL:chengbaozhigy@163.com

出0入0汤圆

发表于 2006-10-30 12:18:01 | 显示全部楼层
非常感谢楼主的这种精神。

出0入0汤圆

发表于 2006-10-30 17:16:32 | 显示全部楼层
谢谢 学习了,等看了再发问请教,真是好人!!!

出0入0汤圆

发表于 2006-10-30 20:30:24 | 显示全部楼层
多谢楼主的分享,呵呵,晶土电子之前送了一套5.x的正版AtmanAVR给我,正好作为参考!

出0入0汤圆

发表于 2006-10-31 11:08:41 | 显示全部楼层
如果大家都有这种精神,中国腾飞,指日可待啊!

出0入0汤圆

发表于 2006-10-31 13:07:40 | 显示全部楼层
好东西,感谢楼主!!

出0入0汤圆

发表于 2006-10-31 13:07:50 | 显示全部楼层
好东西,感谢楼主!!

出0入0汤圆

发表于 2006-10-31 13:15:54 | 显示全部楼层
确实不错,但是WinAVR无法编译啊楼主!
-----此内容被fuanzwg于2006-10-31,13:18:50编辑过

出0入0汤圆

发表于 2006-11-2 13:19:52 | 显示全部楼层
实在不好意思。这段没有看懂。

uint read_ad( uchar channel )

{

        uint        ad;

        uint        sum_ad = 0;                               

        uchar        i = 0;                               

        for( i=0;i<50;i++ )

        {

                ad = ( read_adc(channel)>>6 );//右移6位?

                sum_ad += ad;

                asm("wdr");

        }

...

...

}

出0入0汤圆

发表于 2006-11-2 19:44:01 | 显示全部楼层
继续顶啊

出0入0汤圆

发表于 2006-11-3 12:39:59 | 显示全部楼层
感谢楼主的无私,向楼主学习

出0入0汤圆

发表于 2006-11-16 13:29:19 | 显示全部楼层
hao

出0入0汤圆

发表于 2006-12-7 14:13:32 | 显示全部楼层
多谢搂住边城浪子强人!!!

出0入0汤圆

发表于 2006-12-7 15:26:31 | 显示全部楼层
顶顶哈,如此好贴,高手才鸟公享

出0入0汤圆

发表于 2006-12-8 11:59:22 | 显示全部楼层
十分感谢楼住的的无私奉献!

出0入4汤圆

发表于 2006-12-8 16:39:57 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2007-1-5 16:11:01 | 显示全部楼层
谢谢!

出0入0汤圆

发表于 2007-1-5 17:31:57 | 显示全部楼层
感谢楼主

出0入0汤圆

发表于 2007-1-9 14:32:17 | 显示全部楼层
感谢楼主

出0入0汤圆

发表于 2007-1-19 14:09:47 | 显示全部楼层
十分感谢楼主的的无私奉献!

出0入0汤圆

发表于 2007-1-19 14:43:12 | 显示全部楼层
你好啊。你用的是什么压差传感器?怎么没有看到型号?麻烦告诉一声。谢谢。

出0入0汤圆

发表于 2007-7-4 16:12:39 | 显示全部楼层
ding!

出0入0汤圆

发表于 2007-7-4 17:39:17 | 显示全部楼层
记号

出0入0汤圆

发表于 2007-7-4 19:26:31 | 显示全部楼层
GOOD!

出0入0汤圆

发表于 2007-7-5 10:35:54 | 显示全部楼层
楼主好样的,顶一下

给好帖增加点生命力
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-7 22:22

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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