菜鸟进军单片机,第一个作品:数字电容表
justinpiggy2012/01/27仪器仪表 IP:浙江
RT,用刚到手的Arduino做的,12864LCD,原理不多说,KC的应该都懂。
精度还行,速度较慢(为了保证一定的精度),算法几乎等于没有。


外围电路及其简单,仅1K电阻一只,如果用300左右的电阻可以做到2200uF电容刷新率0.5s左右,但是精度要低一点。
程序中为了防止大电容放电不完全,给电容500ms放电时间,然后又要充电,所以有点慢
b_large_bbNP_11a5000012f71261.jpg
b_large_ROM8_2294000106791263.jpg
b_large_YeRm_6a8c00003204121c.jpg

测试视频在此:XXXXXXXXXXXXXXXXXX/v_show/id_XXXXXXXXXXXXXXXXml
点击此处查看视频

应大家要求放出源码,但是真的很菜鸟,大家看看就好,不要笑我啊。。。
attachment icon Capacitor_Meter.ino.zip 0.67KB ZIP 51次下载
+10  科创币    神之觉醒    2012/01/27 为什么刷新速度这么慢啊
+200  科创币    ry7740kptv    2012/01/27 鼓励动手制作!
+10  科创币    zhangv    2012/01/27
+1  科创币    十九    2012/01/27 刷新速度的确有点慢……
来自:仪器与装备 / 仪器仪表
22
已屏蔽 原因:{{ notice.reason }}已屏蔽
{{notice.noticeContent}}
~~空空如也
血狼
13年1个月前 IP:未同步
359081
能否开源?程序和测量原理。
+1
科创币
justinpiggy
2012-01-27
可以,就是非常基础,实际测量pF级的就不准了,所以没有贴出来,实际上我也不好意思贴,如果想要PM我
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
zhangv
13年1个月前 IP:未同步
359082
是自带的例程吧?
+1
科创币
justinpiggy
2012-01-27
不是哦,全自己写的
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
vocal@ルカ
13年1个月前 IP:未同步
359083
求电路图。。。 尤其电容采样部分。。。
楼主的电脑莫非是。。。。。。。。。。。
+1
科创币
justinpiggy
2012-01-27
其实很简单,给电容先放电,然后测电容电压,记下此时时间,马上充电,充到电源电压的1-1/e时记下时间。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
神之觉醒
13年1个月前 IP:未同步
359085
为什么刷新速度这么慢啊
+1
科创币
justinpiggy
2012-01-27
这个是通过电容充放电实现的,2200uF比较大,我为了精度用了1K电阻,比较慢,而且LCD是串行,所以显示也慢
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
13年1个月前 IP:未同步
359093
引用第3楼霹雳游侠于2012-01-27 19:58发表的  :
求电路图。。。 尤其电容采样部分。。。
楼主的电脑莫非是。。。。。。。。。。。


MacBook Pro 15寸高配,不过是上一代的了[s:274]  



顺便问一下怎么把float转成char(就是string啦)
我用sprintf(str,"%f",n);打出来是一个?
做这个电容表时我为了解决这个问题花了很久,最后还是不行,只好把n拆成小数点后和小数点前,分部输出,所以实在太菜鸟了
望各位单片机老手指导!
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
vocal@ルカ
13年1个月前 IP:未同步
359094
回 5楼(justinpiggy) 的帖子
好吧 电压用什么检测?不要告诉直接靠端口临界值来触发吧
有钱。。。。。。。。。。。。。。。。。。。。。。。。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
13年1个月前 IP:未同步
359097
Re:回 5楼(justinpiggy) 的帖子
引用第6楼霹雳游侠于2012-01-27 20:18发表的 回 5楼(justinpiggy) 的帖子 :
好吧 电压用什么检测?不要告诉直接靠端口临界值来触发吧
有钱。。。。。。。。。。。。。。。。。。。。。。。。。。



真的是这么干的,死循环,然后等analogRead(Pin)>U
想想看10Bit的ADC就凑合着用用
所以当电容很大,电阻也弄得比较大的时候,RC常数t=R*C就会很大,这个loop时间就长啦
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
13年1个月前 IP:未同步
359112
源码已经上传了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
mistersheng
13年1个月前 IP:未同步
359115
关键看着写液晶屏,也很慢啊!
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
13年1个月前 IP:未同步
359117
引用第9楼mistersheng于2012-01-27 20:49发表的  :
关键看着写液晶屏,也很慢啊!


没办法,是串口输出,比较慢,换成并口会快很多,但是那样要接很多线,现在串口只要3+2根就可以了
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
量子隧道
13年1个月前 IP:未同步
359119
怀疑是测RC充放电时间常数
话说不一定要先放电再测试的。算法好点的话,直接带电测也可以。只是电容的电压不要太高把电路烧了。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
13年1个月前 IP:未同步
359124
引用第11楼yearn3guns于2012-01-27 20:55发表的  :
怀疑是测RC充放电时间常数
话说不一定要先放电再测试的。算法好点的话,直接带电测也可以。只是电容的电压不要太高把电路烧了。


不是怀疑,看一下整个帖子,还有代码再发贴。
带电测我觉得不行的,你要不停刷新,那么刚才已经冲到比如说2.5V,单片机最高控制就是5V,那么下一次的确可以冲到3.75V(理想,不放电),然后再下一次只有4.375V,而Arduino自带ADC大概只能分辨4mV电压,再加上时间间隔越来越短,接下来就很有限了。
我的方法也不是完全放光电,看程序,我在LCD输出时候都节省时间让电容放电,其实放得越低越好,然后再次循环时候就测量此时电压为lo,然后再充电,冲到(hi-lo)*k+lo时候停止,这样充电时间比较长,适合这种16MHz的单片机计时,又有较大电压跨度,照顾到了10Bit ADC的精度限制
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腹黑小白兔
13年1个月前 IP:未同步
359228
积分式AD的思路。。。
定时器测时间
+1
科创币
justinpiggy
2012-01-28
但是那样就要外围电路了,还要其他IC了,不方便啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腹黑小白兔
13年1个月前 IP:未同步
359230
还有 12864 的串行输入也没则么慢 刷屏其实挺快的

是程序的问题 可能是12864给的延时太大了 没必要

还有。。罗嗦一句。。觉得现在AVR江河日下 mega128已经不爽了。。(刚才看到 是ATMega 2560


暑假有点被坑的感觉。。速度好慢。。。

换STM32吧~~~~~~  要不LM3S1138 虽然速度一般 但是上手特别容易~~

第一张图中间那块蓝色的板子是LM3S69XX么? 周工的那个?

暂时不讨论Arduino的效率
+1
科创币
justinpiggy
2012-01-28
我12864直接用了商家给的库。。。中间那个是标准的USBtinyISP啊
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腹黑小白兔
13年1个月前 IP:未同步
359232
不需要其他芯片吧。。。AVR自带AD么。。。

中间那个。。我以为是以太网的接口。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
腹黑小白兔
13年1个月前 IP:未同步
359235
Re:Re:回 5楼(justinpiggy) 的帖子
引用第7楼
justinpiggy于2012-01-27 20:21发表的 Re:回 5楼(justinpiggy) 的帖子 :
真的是这么干的,死循环,然后等analogRead(Pin)>U
想想看10Bit的ADC就凑合着用用
所以当电容很大,电阻也弄得比较大的时候,RC常数t=R*C就会很大,这个loop时间就长啦


。。。。这不是积分式AD的思路么。。。亲。。。


还有。。。用习惯了不用库写AVR。。。看到analogRead(Pin)这一句 觉得不爽了。。。。
查寄存器吧。。。提高效率。。。同时也可以提高精度。。。


话说。。。12864的显示你是怎么处理的?丢到定时器中断里?? 还是在while(1)里面。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
justinpiggy作者
13年1个月前 IP:未同步
359278
Re:Re:Re:回 5楼(justinpiggy) 的帖子
引用第16楼腹黑小白兔于2012-01-28 00:32发表的 Re:Re:回 5楼(justinpiggy) 的帖子 :
引用第7楼
justinpiggy于2012-01-27 20:21发表的 Re:回 5楼(justinpiggy) 的帖子 :
真的是这么干的,死循环,然后等analogRead(Pin)>U
想想看10Bit的ADC就凑合着用用
所以当电容很大,电阻也弄得比较大的时候,RC常数t=R*C就会很大,这个loop时间就长啦
.......


不好意思,我是初学,恩,的确是积分+ADC,
LCD这个写起来时间长我也很头疼,我是每0.5s刷新一次,这个时候写一下LCD,其他时候不写。
不知道AVR能不能同时进行两个任务,应该不行吧。


事实上你眼睛很尖,的确有一块以太网扩展板,再左上角哦,W5100,中间那个是下载线
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
20!Dopaminor
13年1个月前 IP:未同步
359281
表示后面那台电脑很亮
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
jiong
11年8个月前 IP:未同步
537980
可以构造个振荡器,把电容值转换成频率值
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
franze
9年4个月前 IP:广东
792990
Thank you very much!
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
兰若,公主魂
9年4个月前 IP:广东
793291
这样搞一台比买便宜吧?技术有限。。。
引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论
Aromatisation
1年9个月前 IP:广东
917937
引用justinpiggy发表于5楼的内容
引用第3楼霹雳游侠于2012-01-27 19:58发表的  :求电路图。。。 尤其电容采样部分。。...

你的str是String还是char[]?这个sprintf只能用在char[]上

引用
评论
加载评论中,请稍候...
200字以内,仅用于支线交流,主线讨论请采用回复功能。
折叠评论

想参与大家的讨论?现在就 登录 或者 注册

所属专业
上级专业
同级专业
justinpiggy
进士 专家 学者 机友 笔友
文章
70
回复
1816
学术分
1
2009/06/23注册,2时25分前活动

Harvard Physics

主体类型:个人
所属领域:无
认证方式:手机号
IP归属地:未同步
插入公式
评论控制
加载中...
文号:{{pid}}
投诉或举报
加载中...
{{tip}}
请选择违规类型:
{{reason.type}}

空空如也

加载中...
详情
详情
推送到专栏从专栏移除
设为匿名取消匿名
查看作者
回复
只看作者
加入收藏取消收藏
收藏
取消收藏
折叠回复
置顶取消置顶
评学术分
鼓励
设为精选取消精选
管理提醒
编辑
通过审核
评论控制
退修或删除
历史版本
违规记录
投诉或举报
加入黑名单移除黑名单
查看IP
{{format('YYYY/MM/DD HH:mm:ss', toc)}}