Jacky 发表于 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.1GCC提供了较为丰富的库函数,这个程序中的AD、浮点、EEPROM等都是使用函数完成的,稍后我会贴一篇专门介绍浮点数应用的文章,敬请关注。



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

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



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

点击此处下载armok0166341.rar





项目硬件

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166326.JPG

正常画面

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166327.JPG

主菜单1

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166328.JPG

主菜单2

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166329.JPG

主菜单3

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166330.JPG

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166331.JPG

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166332.JPG

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166333.JPG





http://cache.amobbs.com/bbs_upload782111/files_3/armok0166334.JPG

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166335.JPG

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

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166336.JPG



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

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166337.JPG

电流转电压芯片RCV420

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166338.JPG

液晶近照

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166339.JPG

液晶近照

http://cache.amobbs.com/bbs_upload782111/files_3/armok0166340.JPG








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

heaven1983 发表于 2005-8-30 20:18:33

不错啊!

armok 发表于 2005-8-30 20:27:07

哇! 谢谢,谢谢!





为Jacky的无私交流加200分!

eudemon 发表于 2005-8-30 21:09:50

哇,好啊!这里好久没有出现过这样的英雄了

这才叫真正的无私嘛。

dengchongguang 发表于 2005-8-31 00:18:14

精神可嘉,真正的英雄.



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

coole 发表于 2005-8-31 08:04:14

向楼主致敬!!

marker 发表于 2005-8-31 08:32:44

不错

Jacky 发表于 2005-8-31 08:50:39

“跳动一二百”,单靠软件滤波可能对付不了,我想你的硬件电路可能还有问题。

chenerbox 发表于 2005-8-31 09:08:48

下了,好好研究一下

quben 发表于 2005-8-31 09:33:42

Thanks

_yuming 发表于 2005-8-31 10:44:45

XIE XIE!!!

xusp 发表于 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: *** Error 1

Jacky 发表于 2005-8-31 20:27:15

注意:“使用ATMANAVR4.5编译通过,GCC版本为3.4.1”

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

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



http://cache.amobbs.com/bbs_upload782111/files_3/armok0166526.jpg


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

xusp 发表于 2005-8-31 21:18:22

哦,看来我还的另外装一个拉!谢谢!

xusp 发表于 2005-8-31 23:00:56

好像没有破解的列!有没有咯!浪子,能把你的破解版传上来,共享,行不咯!

zzz5858662 发表于 2005-8-31 23:41:08

那个液晶啥型号,多少钱一块呀,谢谢,我喜欢上了它

testcode 发表于 2005-9-1 03:39:28

将以上范例改写为winavr下的代码。(未测试)

点击此处下载armok0166586.rar

可以用PN打开项目。

Jacky 发表于 2005-9-1 07:53:41

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

Jacky 发表于 2005-9-1 07:58:02

烧入16楼的HEX代码测试了一下,系统一直不停的复位

Bromi 发表于 2005-9-1 12:28:08

英雄

楷模

xusp 发表于 2005-9-1 20:05:50

顶一下,别让他沉下去了!

xusp 发表于 2005-9-1 20:11:19

谁把他改成GCC或ICC的撒!

fangmcu 发表于 2005-9-1 20:13:49

致敬,等待你12864液晶的例子!!!

Asail 发表于 2005-9-1 20:38:20

不简单, 真是精神可嘉.





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

Jacky 发表于 2005-9-1 21:58:16

to: fangmcu 方谭



12864范例早已经贴出来了呢

avr1008 发表于 2005-9-2 13:29:41

有很多厂家作LCD,128X64的30~40元,只是没有外框(放在设备里面也不需外框)。我们公司用的很多。

armandusb 发表于 2005-9-8 10:07:30

不错的东西!好!顶了!

judy58 发表于 2005-9-8 20:43:16

支持支持~

我也期待自己的这一天,嘿嘿~~./emotion/em005.gif

notomaqi 发表于 2005-9-8 21:45:32

如此好贴真不简单,谢谢楼主。不过对滤波算法不太理解,

lmzhj 发表于 2005-9-17 10:55:47

25楼,avr1008你好,能否给出128X64 30~40元的厂家联系方式?

gongcsf 发表于 2005-9-25 20:11:06

这个贴子怎么掉下来了啊.找了半天才给找回来.浇点水!!







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

rz12345 发表于 2005-9-25 21:54:04

好啊!我喜欢!

lintao 发表于 2005-9-26 09:56:20

看到了,谢谢

chjf 发表于 2005-11-30 15:11:24

不错,挺好。

lvgaopan 发表于 2005-11-30 16:13:33

现在很少有这样的开源精神的人了。支持一下!

diannaoza 发表于 2005-12-1 00:20:24

支持,是呀精神可佳,学习......

Hkap_157 发表于 2005-12-1 09:53:12

强烈支持

sea_19821 发表于 2005-12-4 10:04:33

好,顶上去!

hotpower 发表于 2005-12-4 10:32:28

晕~~~函数dtostrf()在什么地方???

testcode 发表于 2005-12-4 11:25:43

include <stdlib.h>

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

andylee2003 发表于 2005-12-6 13:05:35

我顶!

wind 发表于 2005-12-17 11:30:50

向楼主致敬!

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

有ICC版本的代码吗?

Jacky 发表于 2005-12-17 13:08:07

可以上网找一个破解包。

ICC的版本没有

nx0952lsy 发表于 2005-12-31 11:48:42

谢谢的紧

st01lsp_zsu 发表于 2006-3-17 00:03:52

楼主好样的!向你学习!

xiao82 发表于 2006-3-17 08:43:09

好帖

linzhai 发表于 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中作为下次比较的值   这样可以减少显示跳动的次数

dzcn 发表于 2006-5-27 09:17:56

呵呵...继续浇水...支持

wgxrc 发表于 2006-5-27 11:17:46

那个LCD真的不错,清晰度很高!很清爽

wgxrc 发表于 2006-5-27 21:23:20

滤波程序也不错.刚试了一下,效果很好.谢谢楼主和linzhai

SW7005 发表于 2006-5-28 13:37:01

顶!

basten820226 发表于 2006-5-29 08:49:55

好帖,感谢楼主

yuhuashan 发表于 2006-5-29 10:08:16

感谢LZ的无私奉贤顶在说

xwyjianghu 发表于 2006-7-9 11:33:43

3Q!感谢楼主。

ppfish 发表于 2006-7-9 18:10:02

真不错

leeber 发表于 2006-7-10 08:39:28

不错的东西,下载试试

chen112 发表于 2006-8-4 13:58:46

来晚了,下载中。谢谢,4-20mA的电流信号检测。这东西是不是用在反应炉什么上的?

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

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


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

gdf78 发表于 2006-8-4 21:23:05

先支持再看!

wangchuanq 发表于 2006-8-5 17:29:36

高手啊!

shirely_ivy 发表于 2006-8-5 20:04:58

看看先!

andyzhou 发表于 2006-8-8 00:13:26

衷心感谢!

leafzq 发表于 2006-8-8 10:24:55

好,谢谢楼主.download来看看

SYAN 发表于 2006-8-9 10:26:52

好,收藏了。

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

Jacky 发表于 2006-8-25 10:30:08

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

Jacky 发表于 2006-8-25 10:40:53

to :chen112

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

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

huangfan 发表于 2006-8-25 10:59:53

支持开源!

joson 发表于 2006-8-25 11:40:36

很好!

zng4 发表于 2006-8-28 08:12:53

对于这个帖子我是坚决要顶,从中得到很多启发,因为是刚搞AVR,整整一个月,参考网上例子,一个控制项目马上就要完工了。滤波程序帮我解决了大问题,困扰了我一周。终于稳定了。OK,

qingzhong 发表于 2006-8-28 10:51:59

starfan 发表于 2006-8-31 10:54:59

请问12864液晶的驱动文件在哪儿呢?谢谢!

wch2002 发表于 2006-8-31 14:09:25

十分感谢楼住的的无私奉献!



向楼主学习!

Jacky 发表于 2006-9-8 22:17:50

to starfan :搜索一下我的帖子,有一个LCD的范例,里面就有驱动,这个帖子也有,慢慢找

tangcongfai 发表于 2006-9-10 14:53:11

好东西呀,我是新手,顶个先!!

zqj750207 发表于 2006-9-16 15:25:58

好东西,顶

kalon00 发表于 2006-9-16 16:40:06

好东西,收藏。。

这才叫无私嘛。

呵呵

chengfisher 发表于 2006-10-30 10:57:39

楼主你好!

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



                     我得EMAIL:chengbaozhigy@163.com

fredson 发表于 2006-10-30 12:18:01

非常感谢楼主的这种精神。

mcuer_hehe 发表于 2006-10-30 17:16:32

谢谢 学习了,等看了再发问请教,真是好人!!!

panxiaoyi 发表于 2006-10-30 20:30:24

多谢楼主的分享,呵呵,晶土电子之前送了一套5.x的正版AtmanAVR给我,正好作为参考!

cltemail 发表于 2006-10-31 11:08:41

如果大家都有这种精神,中国腾飞,指日可待啊!

fishp 发表于 2006-10-31 13:07:40

好东西,感谢楼主!!

fishp 发表于 2006-10-31 13:07:50

好东西,感谢楼主!!

fuanzwg 发表于 2006-10-31 13:15:54

确实不错,但是WinAVR无法编译啊楼主!
-----此内容被fuanzwg于2006-10-31,13:18:50编辑过

fredson 发表于 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");

        }

...

...

}

xiaobendan 发表于 2006-11-2 19:44:01

继续顶啊

wentao 发表于 2006-11-3 12:39:59

感谢楼主的无私,向楼主学习

sujw 发表于 2006-11-16 13:29:19

hao

okay51 发表于 2006-12-7 14:13:32

多谢搂住边城浪子强人!!!

polymorph 发表于 2006-12-7 15:26:31

顶顶哈,如此好贴,高手才鸟公享

yangzq 发表于 2006-12-8 11:59:22

十分感谢楼住的的无私奉献!

tarzar 发表于 2006-12-8 16:39:57

谢谢!

ljbhander 发表于 2007-1-5 16:11:01

谢谢!

j_sunny 发表于 2007-1-5 17:31:57

感谢楼主

wangwish 发表于 2007-1-9 14:32:17

感谢楼主

6641743 发表于 2007-1-19 14:09:47

十分感谢楼主的的无私奉献!

mzzft 发表于 2007-1-19 14:43:12

你好啊。你用的是什么压差传感器?怎么没有看到型号?麻烦告诉一声。谢谢。

qxs5264 发表于 2007-7-4 16:12:39

ding!

wxfhw 发表于 2007-7-4 17:39:17

记号

lljyes 发表于 2007-7-4 19:26:31

GOOD!

aysyjgw 发表于 2007-7-5 10:35:54

楼主好样的,顶一下

给好帖增加点生命力
页: [1] 2 3 4 5
查看完整版本: 上传一个完整的项目范例(原创)