各位大侠,现在有个疑问,就是用电池供电的单片机-ATTINY24A板子(功能是驱动LED),只有一个按键接INT0(为了便于外部中断唤醒)
一开始电池上电后默认设置为睡眠模式,按一下按键睡眠模式被唤醒且LED暗档,再按一下LED光档,再按一下LED灭且进入睡眠模式,此时若要外接充电器给电池充电就必需得唤醒单片机,本人想用充电的电压触发复位引脚来唤醒不知道这种方法行的通吗,如果行的通请问是不是常用的方法?还有如果这种方法不行请问除了INT0唤醒,其它引脚有唤醒功能吗,如果其它引脚有唤醒功能可以和INT0同时使用吗?还是通过再设置把INT0的功能转移到其它引脚呢?寻求更好的方法?在此谢过……
先仔细看器件手册,看是否还有除中断0之外的其他唤醒源,如果没有,中断0可以复用,外接电源检测可用类似复位电路的RC回路实现,如果不准许电平长期固定,可在RC回路之后接入单稳态电路,这样就可以只输出一个定宽脉冲,另外要注意和按钮开关直接并联的话,需要采用OC/OD输出,否则需要通过逻辑门来“并联”。
回复 沙发 chunyang 的帖子
先谢谢 chunyang了,其实用充电来触发INT0也有想过,最想知道的是PCINT0也是引脚变化也可以用来唤醒,但是如果我设置了INT0而且定义了设置,那么是否就不可以用PCINT0来唤醒,就是说两个可不可以同时用,如果能用的话如何做,大侠知道的在此感激不尽!
另外充电触发复位引脚没用,因为复位后马上又进入睡眠,因为开机默认为睡眠!
如果该芯片支持引脚变化唤醒系统,那不会和外中断唤醒系统冲突的,如有冲突,器件手册中也会载明。
我前面说的方法是复用外中断而非靠复位,只是电路设计类似复位电路。
回复 5楼 chunyang 的帖子
关于充电唤醒睡眠已经解决了,非常感谢,
接下来有个问题:单片机除了上面的功能我也设有电池的低压检测保护功能,4.3V充满,放电至3V关断LED从而低压保护,但是低压保护并不是睡眠模式这样会耗电,有必要低压保护下也设置成睡眠模式吗?这种方式通常大家常用吗还是有更好的方法?
用专用的锂电池保护芯片,过放电前可以自动切断负载的,同时具有过压、过流、反接等保护。
回复 7楼 chunyang 的帖子
低压保护我是用的单片机的ADC来检测的,我不想用另外的芯片,直接在程序上实现,我认为低压保护直接用睡眠模式来替代应该可以,小于电压就睡眠,很少看到有这方面的应用贴子,欢迎有过实用的朋友都来讨论……
楼上的想法不可行,一个是片内AD的精度不够,而且开启片内AD会造成不必要的功耗上升,再有就是休眠电流对放电终止后的锂电池仍然太大了,时间长了会摧毁电池。
专用的锂电池保护芯片又不贵,连外围元件下来也就一块钱,大批量下连5毛都不到。
回复 9楼 chunyang 的帖子
不好意思啊,一直忘了说明我用的是镍氢电池,如果是锂电池的话我肯定要用专业芯片了,因为我知道锂电池的要求非常高!我在进入睡眠之前已关掉ADC,如果我不关ADC,会有200uA左右,关掉就有10uA左右,可以在外围想法更小一些,因为外围电路的原因,调小也会在uA级以上……
如果是镍氢电池的话,可以用单片机来休眠吗?
任何蓄电池都不准许过放电,放电终止时仅休眠不够需要完全切断负载,否则仍然会摧毁电池,所有类型的蓄电池都如此。与锂电池相比,镍氢电池只是对充电电压不是很敏感,一般采取恒流充电转涓流充电就够。
看来只有我们二人转,呵呵,本来想多深入讨论一下过程中碰到的问题及解决过程的……
回复 11楼 chunyang 的帖子
我看到的很多镍氢电池带单片机都是设置为睡眠模式,如果完全断开的话还要有个总电源开关,睡眠模式其实电流并不大,假设1000MAH的电池,休眠电流10uA,一个月30*24*10=7200uA=7.2MA 7.2/1000=0.72% 放电率比起镍氢电池的自放电是小巫见大巫了……
设计成什么关键看你的要求,如果只是自己玩玩,随便怎么做都可以,做产品的话就要看产品的市场定位和档次了。
回复 14楼 chunyang 的帖子
这个说法绝对赞成,另外我的充电不是PWM的,串个电阻经过MOS管控制直接高低电平,因为PWM太麻烦,有时间也想试一下,PWM充电是简单,但是如果要恒流的话又得另开一路ADC,因为前面我已经开了一路ADC了,而且二路ADC不能同时用,好像是要交替着使用,还有麻烦的就是恒流充电到电池电压快满时又得调占空比减小电流进行涓流充电,还有两路的ADC的切换我还没试过,可能有些麻烦要试过才知道,PWM充电的思路不知道我说的对不对?如果不对请多多指教?
程序越长感觉要考虑和实验每一种状态相互的影响,调起来就麻烦(至少对我一个新手来说)
恒流充电电路很简单,本身不需要特别的资源,用一路IO控制通断即可,充电终止可以用电压监测,有AD的话可以利用,用比较器也行,程序可以很简单。
回复 16楼 chunyang 的帖子
用ADC检测限流电阻的电压来恒流,我以前有试过,问题是ADC有两路的话是不是交替使用?比如:
uint AD1()
{
设置AD1转换
转换结果1
}
uint AD2()
{
设置AD2转换
转换结果2
}
void mian()
{
uint x=0;uint y=0;
其它程序……
while(1)
{
x=AD1();
Y=AD2();
X和Y的值变化范围再作相应处理……
}
}
如上图所示,因为ADC不能同时二路工作,不知道说法有没错误,若交替使用在while(1)下面两个值X,Y是这样操作吗?如果再多几路ADC会不会因为多几路的运行和切换时间影响各自结果的正确性(精确度)???
[ 本帖最后由 gh131413 于 2013-4-17 09:59 编辑 ]
两路AD要看是怎么个“两路”,如果AD是硬件上独立的,那么可以同时使用,如果AD只是一路,输入通路则有两路,那么只能分时使用。
回复 18楼 chunyang 的帖子
搞了这么长时间,我发现如果一个程序长些有很多功能的话而以前没做过,不能一下子就写完再调,要一个个功能单独试过,试过OK,那么这个功能再加上去,另外的一个功能再试过OK后再加进去,这样就组成了一个程序,因为如果一下子写到底再找原因的话就感觉很乱不知道从哪下手或者说问题出在哪个部分……