咯上 发表于 2023-8-4 11:49 最近我也在做手电,做的差不多了 交流一下? |
咯上 发表于 2023-8-5 23:22 如果有lvd 检测 检测到低于一定电压直接睡眠 上电后模式加 能实现你的断电换挡吗可以试试, 电容维持不复位可以 选低频低功耗的mcu |
wulin 发表于 2023-8-5 10:49 现在试这代码又可以了,之前在负极到电容负串了1k电阻用了测量断电时电流是否是ua级别,可能就是串了这个电阻就失败了,现在取消掉了就可以了,不过电容要大点的要大于47uf不然3.6v以下无法换挡,还有510k要并103电容,不并换挡一会行一会又玄学不行搞不懂,我用的是3.2高阻,搞这个一会行一会不行调了好久真的有点玄学 |
wulin 发表于 2023-8-5 10:49 睡眠代码要写成这样才能断电睡眠 IT0 = 1; //INT0 下降沿中断 IE0 = 0; //清除外中断0标志位 _nop_(); _nop_(); EX0 = 1; //INT0 允许中断 _nop_(); _nop_(); PCON |= 0x02; //Sleep _nop_(); _nop_(); _nop_(); 还有510k并了个103电容才成功,不然就出现按几下才换档现象,还有3.2是高阻模式,如果不并103改代码能成功吗?下面放出我并103成功的代码 #include "STC8G.H" #include<intrins.h> typedef unsigned char uchar; typedef unsigned int uint; sbit LED=P5^4; sbit EN =P5^5; sbit key=P3^2; uchar count=0; bit allow; void Shutdown()//掉电模式函数 { IT0 = 1; //INT0 下降沿中断 IE0 = 0; //清除外中断0标志位 _nop_(); _nop_(); EX0 = 1; //INT0 允许中断 _nop_(); _nop_(); PCON |= 0x02; //Sleep _nop_(); _nop_(); _nop_(); } void INT0_Isr() interrupt 0 { EX0=0; PCON=0x00; if(key) //判断上升沿换挡 { count=++count%3; } } void main() { //P3、P5口都设置为准双向口 P3M0 = 0x00; P3M1 = 0x04; P5M0 = 0x00; P5M1 = 0x00; IT0 = 0; //使能INT0上升沿和下降沿中断 EX0 = 1; //使能INT0中断 EA = 1; //开总中断 while(1) { if(key==0) Shutdown(); if(count==0) { LED=0; EN=1; } if(count==1) { LED=1; EN=0; } if(count==2) { EN=1; } } } |
咯上 发表于 2023-8-5 08:36 程序基本构架很简单,可能在调试中需要略做修改。芯片不同,510K电阻未必恰当。
|
不是,你把按键复位改一下 |
声明下我不是用于伤腰用途,网上也能买到不值钱就是邮费贵点舍不得买,还有程序比较灵活能随便改 |
wulin 发表于 2023-8-5 06:50 关断一般1s或几s还是要的,所以说低功耗必须要的,电容一般就几uf撑不了多久,我要的是换挡要换io口的,他这个用了pwm只用一个io口这种驱动我也有好几个,我想做没有pwm完全恒流的驱动,能不能按照我发帖的要写一个程序 |
咯上 发表于 2023-8-4 12:21 你绕了这么大圈子,直接说是为了改装成品手电筒不就得了。利用电源开关做触发信号换挡。无需EEPROM。低功耗模式可有可无,在于操作时间间隔需求和蓄能电容大小。基本可以按流水灯程序写。 |
https://tieba.baidu.com/p/7528586913 参考下这个帖子他的是汇编,看不懂 |
eeprom那我不需要记忆,只需要断电几秒记忆,那怎么做 |
不过有的手电驱动最便宜的那种三个脚的确实没有二极管和电容不知道怎么实现断电换档的 |
就不能用断电低功耗模式写吗 |
反正有的驱动就是断开时低功耗模式,然后关机后电容没放光就一直带记忆,需要并一个电阻放电让他关电后只记忆几秒 |
咯上 发表于 2023-8-4 11:39 要用循环写入算法 每次写在新地址 1k EEProm = 1024Byte x 100000 = 102400000 你每秒按一下,要按102400000/3600/24/365 = 3.25年才可能有影响 |
lkc8210 发表于 2023-8-4 11:34 芯片不耗电吗,我要断开1秒或几秒 |
lkc8210 发表于 2023-8-4 11:19 这个对寿命有影响,不会吧换一次档就存一次? |
咯上 发表于 2023-8-4 11:24 开关都断开了,没回路去电源负极,何来电流? |
lkc8210 发表于 2023-8-4 11:19 没电容开关断开时电就放光了 |
咯上 发表于 2023-8-4 09:57 根本不用啥电容,低功耗模式 ![]() |
咯上 发表于 2023-8-4 07:26 你都把电源都截止了,还低功耗个啥? |
yzwzfyz 发表于 2023-8-4 09:31 断开进入低功耗模式,耗电ua级别,芯片靠电容维持,二极管是防止led用电容里的电,接通高电平唤醒再换挡 |
咯上 发表于 2023-8-4 07:26 开关接负极,断开就没有电源哪来什么低功耗ua模式,完全无功耗了。想要用电源开关换档就要利用低压中断,EEPROM保存当前状态,下次得电,先读EEPROM,再换挡。 |
改成将芯片GND断开,它还能工作么? |
这个是510k当成开关了,不对我要的是负极当开关断一次电换一个档,使用时开关时接通的,断一次换一个档,注意点是开关断开时要进入低功耗ua模式,断开时3.2是低电平,接通是高电平 |
本帖最后由 wulin 于 2023-8-4 09:26 编辑
|