ldch 发表于 2007-5-4 13:16

今天设计出了1AA调光手电的程序(第五页好了,继续)

<p><font size="5">一直打算设计调光手电,无奈总是很忙。现在终于趁五一放假,把其中最关键的部分,调光用的单片机程序设计出来了。第一次先用12F675,因为去年为了学习PIC单片机买了两片,其实只要是有EEPROM的PIC都可以用。</font></p><p><font size="5">第一版程序设计比较简单,操作方式为:接通电路后如果在2秒钟内断开,再次通电时改变亮度,如果连续接通超过2秒则锁定当前亮度。第一次做先弄3档亮度:强、中、弱,以后再考虑暴闪什么的其他附加功能。</font></p><p><font size="5">我设计出来后的第一个好处就是:呵呵,不用说大家也该知道,操控方式可以通过修改程序而改变,可以随需DIY了。也就是说将开创调光手电DIY新时代了。</font></p><p><font size="5">争取今晚前装配一个完整的样品出来,到时再传照片。</font></p>[此帖子已经被作者于1179246714编辑过]

zisui 发表于 2007-5-4 13:32

不错,希望到时有成品卖,不知道效率如何?

noneedface 发表于 2007-5-4 13:34

<p>希望有成品电路板卖,这样就可以DIY调光手电了</p>

qbq 发表于 2007-5-4 14:41

<p>东成的电路越来越好了,非常期待</p>

woaw 发表于 2007-5-4 15:02

<p>等出成品的时候买一下</p>

li123456 发表于 2007-5-4 15:06

<font size="4">等出成品</font>

阿雷 发表于 2007-5-4 15:22

能人多多加油

ldch 发表于 2007-5-4 16:50

<p><font size="5">首先多谢大家的鼓励。下午把烧好的单片机焊在电路板上,还不能说一帆风顺,还是遇到点问题,本来设计是三档,但是当把控制第二档的IC管脚焊上后电路不稳定,变成闪烁,只好去掉,这样就成了两档了。不管怎么说,已经迈出一步,算是成功一半了:</font></p><p><font size="5"></font>&nbsp;<br />由于IC不是贴片的,暂时尚未对此设计专门的电路板,所有调光的元件用搭焊的方式连接,难看点</p><p>&nbsp;<br /></p><br /><br />

ldch 发表于 2007-5-4 16:57

<p><font size="5">高亮档电池电流大约1.9A,低亮档大约550mA。目前实际测试来看,仍然存在若干问题:</font></p><p><font size="5">1、每次切换时都要闪烁一下,感觉不好:原因是程序初始化端口的方式不好,造成闪烁,需要继续优化源程序</font></p><p><font size="5">2、状态存储不稳定,容易受干扰而改变:需要仔细分析干扰源和干扰原因,从硬件和软件两个方面解决,力争使电路状态可靠、稳定</font></p>

ldch 发表于 2007-5-4 16:59

<font size="5">或者干脆改变控制方式,一开机就是高亮,然后多次点动开关调为低亮。有什么其他建议,欢迎大家献计献策!</font>

ldch 发表于 2007-5-4 17:01

<p>#include "P12F675.INC"</p><p>EEADDRA EQU 20H<br />EEADDRB EQU 21H<br />TEMP EQU 22H<br />EEREADA EQU 23H<br />EEREADB EQU 24H<br />DELY1 EQU 25H<br />DELY2 EQU 26H<br />DELY3 EQU 27H</p><p>&nbsp;ORG 0x0000</p><p>STAR<br />&nbsp;BCF STATUS,RP0&nbsp;&nbsp;;体选择BANK0<br />&nbsp;MOVLW 01H<br />&nbsp;MOVWF EEADDRA&nbsp;&nbsp;;初始化A地址<br />&nbsp;MOVLW 02H<br />&nbsp;MOVWF EEADDRB&nbsp;&nbsp;;初始化B地址</p><p>&nbsp;CLRF GPIO&nbsp;&nbsp;;清GPIO寄存器</p><p>&nbsp;MOVLW 07H<br />&nbsp;MOVWF CMCON&nbsp;&nbsp;;关闭比较器19H</p><p>&nbsp;BSF STATUS,RP0&nbsp;&nbsp;;体选择BANK1<br />&nbsp;BCF INTCON,GIE&nbsp;&nbsp;;禁止中断<br />&nbsp;CLRF ANSEL&nbsp;&nbsp;;清9FH模拟选择寄存器</p><p>&nbsp;MOVLW 08H<br />&nbsp;MOVWF TRISIO&nbsp;&nbsp;;除GPIO3外,其他管脚都是输出</p><p>&nbsp;BCF STATUS,RP0<br />&nbsp;CALL DELAY1</p><p>&nbsp;CALL EEREAD_A<br />&nbsp;CALL EEREAD_B</p><p>&nbsp;MOVF EEREADB,W<br />&nbsp;XORLW 01H<br />&nbsp;BTFSS STATUS,Z<br />&nbsp;GOTO A3<br />&nbsp;GOTO AA<br />&nbsp;<br />A3<br />&nbsp;BCF STATUS,RP0<br />&nbsp;INCF EEREADA<br />&nbsp;MOVF EEREADA,W<br />&nbsp;XORLW 04H<br />&nbsp;BTFSS STATUS,Z<br />&nbsp;GOTO WRA<br />&nbsp;GOTO A_3<br />&nbsp;<br />WRA<br />&nbsp;MOVF EEREADA,W<br />&nbsp;MOVWF TEMP<br />&nbsp;CALL WREEA<br />&nbsp;GOTO AA<br />&nbsp;<br />A_3<br />&nbsp;MOVLW 01H<br />&nbsp;MOVWF EEREADA<br />&nbsp;GOTO WRA<br />&nbsp;<br />AA<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVF EEREADA,W<br />&nbsp;XORLW 01H<br />&nbsp;BTFSS STATUS,Z<br />&nbsp;GOTO AA2<br />&nbsp;MOVLW 0FFH<br />&nbsp;MOVWF GPIO</p><p>FINISH<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVLW 00H<br />&nbsp;MOVWF TEMP<br />&nbsp;CALL WREEB<br />&nbsp;CALL DELAY<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVLW 01H<br />&nbsp;MOVWF TEMP<br />&nbsp;CALL WREEB<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVF EEREADA,W<br />&nbsp;MOVWF TEMP<br />&nbsp;CALL WREEA<br />LOOP<br />&nbsp;GOTO LOOP<br />&nbsp;<br />AA2<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVF EEREADA,W<br />&nbsp;XORLW 02H<br />&nbsp;BTFSS STATUS,Z<br />&nbsp;GOTO AA3<br />&nbsp;MOVLW 0FDH<br />&nbsp;MOVWF GPIO<br />&nbsp;GOTO FINISH</p><p>AA3<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVF EEREADA,W<br />&nbsp;XORLW 03H<br />&nbsp;BTFSS STATUS,Z<br />&nbsp;GOTO AA1<br />&nbsp;MOVLW 0FBH<br />&nbsp;MOVWF GPIO<br />&nbsp;GOTO FINISH</p><p>AA1<br />&nbsp;MOVLW 01H<br />&nbsp;MOVWF EEREADA<br />&nbsp;GOTO WRA<br />&nbsp;<br />&nbsp;</p><p>EEREAD_A<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVF EEADDRA,W<br />&nbsp;BSF STATUS,RP0<br />&nbsp;MOVWF EEADR<br />&nbsp;BSF EECON1,RD<br />&nbsp;MOVF EEDATA,W<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVWF EEREADA<br />&nbsp;RETURN</p><p>EEREAD_B<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVF EEADDRB,W<br />&nbsp;BSF STATUS,RP0<br />&nbsp;MOVWF EEADR<br />&nbsp;BSF EECON1,RD<br />&nbsp;MOVF EEDATA,W<br />&nbsp;BCF STATUS,RP0<br />&nbsp;MOVWF EEREADB<br />&nbsp;RETURN<br />&nbsp;<br />WREEA&nbsp;&nbsp;;写A,TEMP传送写入数据<br />&nbsp;BCF STATUS,RP0&nbsp;&nbsp;;取BANK0<br />&nbsp;MOVF EEADDRA,W&nbsp;&nbsp;;取A地址<br />&nbsp;BSF STATUS,RP0&nbsp;&nbsp;;取BANK1<br />&nbsp;MOVWF EEADR&nbsp;&nbsp;;A地址进入EEADR<br />&nbsp;BCF STATUS,RP0&nbsp;&nbsp;;取BANK0<br />&nbsp;MOVF TEMP,W&nbsp;&nbsp;;取写入数据<br />&nbsp;BSF STATUS,RP0&nbsp;&nbsp;;取BANK1<br />&nbsp;MOVWF EEDATA&nbsp;&nbsp;;待写数据进入EEDATA<br />&nbsp;BSF EECON1,WREN<br />&nbsp;BCF INTCON,GIE<br />&nbsp;MOVLW 55H<br />&nbsp;MOVWF EECON2<br />&nbsp;MOVLW 0AAH<br />&nbsp;MOVWF EECON2<br />&nbsp;BSF EECON1,WR<br />&nbsp;NOP<br />&nbsp;NOP<br />&nbsp;RETURN</p><p>WREEB&nbsp;&nbsp;;写B,TEMP传送写入数据<br />&nbsp;BCF STATUS,RP0&nbsp;&nbsp;;取BANK0<br />&nbsp;MOVF EEADDRB,W&nbsp;&nbsp;;取A地址<br />&nbsp;BSF STATUS,RP0&nbsp;&nbsp;;取BANK1<br />&nbsp;MOVWF EEADR&nbsp;&nbsp;;A地址进入EEADR<br />&nbsp;BCF STATUS,RP0&nbsp;&nbsp;;取BANK0<br />&nbsp;MOVF TEMP,W&nbsp;&nbsp;;取写入数据<br />&nbsp;BSF STATUS,RP0&nbsp;&nbsp;;取BANK1<br />&nbsp;MOVWF EEDATA&nbsp;&nbsp;;待写数据进入EEDATA<br />&nbsp;BSF EECON1,WREN<br />&nbsp;BCF INTCON,GIE<br />&nbsp;MOVLW 55H<br />&nbsp;MOVWF EECON2<br />&nbsp;MOVLW 0AAH<br />&nbsp;MOVWF EECON2<br />&nbsp;BSF EECON1,WR<br />&nbsp;NOP<br />&nbsp;NOP<br />&nbsp;RETURN</p><p>DELAY<br />&nbsp;MOVLW&nbsp;&nbsp; 10H&nbsp;&nbsp;;外循环常数<br />&nbsp;MOVWF &nbsp;DELY1&nbsp;&nbsp;;外循环寄存器<br />LOP0&nbsp;MOVLW &nbsp;0FFH&nbsp;&nbsp;;中循环常数<br />&nbsp;MOVWF &nbsp;DELY2&nbsp;&nbsp;;中循环寄存器<br />LOP1&nbsp;MOVLW &nbsp;0EEH&nbsp;&nbsp;;内循环常数<br />&nbsp;MOVWF &nbsp;DELY3&nbsp;&nbsp;;内循环寄存器<br />LOP2&nbsp;DECFSZ &nbsp;DELY3&nbsp;&nbsp;;内循环寄存器递减<br />&nbsp;GOTO &nbsp;LOP2&nbsp;&nbsp;;继续内循环<br />&nbsp;DECFSZ &nbsp;DELY2&nbsp;&nbsp;;中循环寄存器递减<br />&nbsp;GOTO &nbsp;LOP1&nbsp;&nbsp;;继续中循环<br />&nbsp;DECFSZ &nbsp;DELY1&nbsp;&nbsp;;外循环寄存器递减<br />&nbsp;GOTO &nbsp;LOP0&nbsp;&nbsp;;继续外循环<br />&nbsp;RETURN</p><p>DELAY1&nbsp; MOVLW &nbsp;9FH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;外循环常数<br />&nbsp;MOVWF &nbsp;DELY1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;外循环寄存器<br />LOOP0&nbsp;MOVLW &nbsp;0FFH&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中循环常数<br />&nbsp;MOVWF &nbsp;DELY2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中循环寄存器<br />LOOP1&nbsp;DECFSZ &nbsp;DELY2&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;中循环寄存器递减<br />&nbsp;GOTO &nbsp;LOOP1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;继续中循环<br />&nbsp;DECFSZ &nbsp;DELY1&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;外循环寄存器递减<br />&nbsp;GOTO &nbsp;LOOP0&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;;继续外循环<br />&nbsp;RETURN</p><p>END</p>

ldch 发表于 2007-5-4 17:08

晚上有空再上电路图

mioa 发表于 2007-5-4 17:49

<p>支持一下....</p><p>早日见到你的成品.</p><p></p>

kyou 发表于 2007-5-4 19:21

<p>呵呵,东成兄的电路总是一坨一坨的~~~</p>

发条狐狸 发表于 2007-5-4 19:25

xxxx 发表于 2007-5-4 20:01

<p><font size="5">我理想中的有调光电路的手电,最好在采用轻触式开关的方式上开发,这种弹片式开关比现在常用的弹簧开关,更有利于节省手电的整体体积。整个开关和电路可做到尾盖处。但轻触式开关用于手电,它的特点又成了致命的缺陷——不能锁死,电路在待机状态的放电电流又不可能为零!前后矛盾!</font></p>

hayas 发表于 2007-5-4 20:17

<p>AA电池的话,待机电流在1MA内可以接受。</p><p>我知道MP3机器的待机电流,通常都在100微安以内(3.6V)。难道这个单片机还要大?</p>

hayas 发表于 2007-5-4 20:21

<p>另外,一定要搞成记忆的。</p><p>要比定挡的人性化很多很多。</p><p></p><p>感觉东成比老沈要厉害很多,那人牛B都快吹破了,到现在连2 SWICH的2挡电路还没搞出来,要等他的单片机多档,那不是要等到那话儿都泻了?</p><p></p>

zisui 发表于 2007-5-4 21:02

不要这么说,老沈我觉得很值得期待,老沈电筒的思路很切合我的需要。

ldch 发表于 2007-5-4 23:16

继续上图

<p><font size="5">手电装配起来就没什么好看的了,外观都一样,只有使用时才能感觉到差异</font></p><p>&nbsp;<br /></p><p><br /><br /><br /><font size="5">这是高亮档</font></p><p><br /><font size="5">这是低亮档,由于相机的原因,感觉跟上面的差别不大,下面来个对比的</font></p><p><br />&nbsp;<br /></p><p><br /><font size="5">左边是18650电池供电的远射手电,LED电流约700mA,右边是1AA高亮,LED电流大约450mA,差距还是比较明显的。</font></p><p><br />&nbsp;<br />忘了关闪光灯了,闪光灯下二者还是可以看出差距</p><p>&nbsp;<br />黑暗中,相机的因素,二者看上去反而差不多了,低亮时差别大些,如下图:<br /></p>
页: [1] 2 3 4 5 6 7 8 9
查看完整版本: 今天设计出了1AA调光手电的程序(第五页好了,继续)