![]() |
發布時間: 2023-8-3 13:07
正文摘要:高手看一下什么問題,負極要斷電兩下才能換擋,程序思路就是按下的時候就是斷電的時候進低功耗ua模式,接通count加1,3.2高阻模式 單片機源程序如下: #include "STC8G.H" #include<intrins.h> #de ... |
咯上 發表于 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 編輯
|