无极调光试验程序
无极调光试验程序单片机采用PIC12F683,这个单片机内部有硬件CCP单元,可以配置成PWM模式。为什么要用这个单片机,而不用别的型号,一来对PIC比较熟悉,二来买的到且不算贵。
12F683跟12F628一样,有SO-8封装的帖片,体积一样。设计IC的2、3脚分别对地接一个开关,2脚开关按下后,占空比增加,3脚开关按下后占空比减小。开机后初始值大概50%,PWM频率大概15.6KHz。PWM脉冲从IC的5脚输出。12F683的资料也是不多,仅有Datasheet可以参考,经过反复测试,终于用下面代码调试成功:
;----------------------------------------------------------
BSF STATUS,RP0
MOVLW 07H
MOVWF OPTION_REG ;允许上拉
MOVLW 30H
MOVWF WPU;设置GP4、GP5弱上拉
MOVWF IOC;设置GP4、GP5允许端口电平变化中断
BSF INTCON,GPIE
;----------------------------------------------------------
BCF STATUS,RP0
MOVLW 07H
MOVWF CMCON0;关闭比较器
;**********************************************************************
BSF STATUS,RP0
CLRF ANSEL;清除模拟选择寄存器
MOVLW 3FH
MOVWF PR2;设置PR2,PWM周期,默认4M振荡输出PWM频率约15.6KHz
;----------------------------------------------------------
BCF STATUS,RP0
MOVLW 1FH
MOVWF CCPR1L;设置占空比初值
;----------------------------------------------------------
BSF STATUS,RP0
MOVLW 0F8H
MOVWF TRISIO;设置GP2输出
;----------------------------------------------------------
BCF STATUS,RP0
CLRF T2CON
BSF T2CON,TMR2ON ;设置T2CON使能,预分频比1
;----------------------------------------------------------
MOVLW 0FH
MOVWF CCP1CON;设置CCP模块为PWM模式
;----------------------------------------------------------
BSF INTCON,GIE;开启全局中断
LOOP GOTO LOOP
;**********************************************************************
GPINT BCF STATUS,RP0
BCF INTCON,GPIF;清中断标志
BCF INTCON,GPIE;关闭端口电平变化中断
BTFSC GPIO,04H
GOTO PR5
CALL DELAY30MS
BTFSC GPIO,04H
GOTO PR5
INCCCP MOVF CCPR1L,W
XORLW 3FH
BTFSC STATUS,Z
GOTO RETGPINT
INCF CCPR1L,F
BTFSC GPIO,04H
GOTO RETGPINT
CALL DELAY166MS
GOTO INCCCP ;GP4上的开关按下后占空比减小,如果持续按住不放,则占空比连续减小
;----------------------------------------------------------
PR5
BTFSC GPIO,05H
GOTO RETGPINT
CALL DELAY30MS
BTFSC GPIO,05H
GOTO RETGPINT
DECCCP MOVF CCPR1L,F
BTFSC STATUS,Z
GOTO RETGPINT
DECF CCPR1L,F
BTFSC GPIO,05H
GOTO RETGPINT
CALL DELAY166MS
GOTO DECCCP ;GP5上的开关按下后占空比增加,如果持续按住不放,则占空比连续增加
;----------------------------------------------------------
RETGPINT
BSF INTCON,GPIE;打开端口电平变化中断
RETFIE ;中断返回
;**********************************************************************
其中红色的部分是必须加的,开始不知道,程序总是调不出来。反复读Datasheet后才知道,必须关闭AD模块和比较器模块,否则GP4、GP5就不能正常使用。
这个程序占空比变化只有63级,不过实际感觉也就是无极了。当然,程序再修改修改可以做到256级,这个试验程序只是改变CCPR1L寄存器的值,占空比低2位保存在CCP1CON的4、5位,程序没有处理这两位,都置零了。
下一步就要把CCPR1L保存到EEPROM中,实现记忆功能,再把更多功能做进去,就可以达到实用了。无极调光不是什么高技术,通过这个例程可以揭示出来了。:lol :lol :lol 振荡频率20M时,PR2取3FH,预分频比为1时,PWM频率大概是78.12K,那么如果频率采用内部RC的4M时,就是15.624K了,我实测是15.6K,误差不大。这个频率也不存在频闪,音频噪音也很轻微了。当然,12F683还能通过指令设置内部RC频率为8M,那么PWM频率就可以达到30K了。频率再高的话,我看可以取消DC-DC部分的PWM IC了,呵呵。当然,精度不怎么高。不过对付一般用途应该也能凑合吧,近期有进展会继续发消息。 ;----------------------------------------------------------
BSF STATUS,RP0
BSF OSCCON,IRCF0 ;设置频率为8MHz
MOVLW 07H
MOVWF OPTION_REG ;允许上拉
MOVLW 30H
MOVWF WPU;设置GP4、GP5弱上拉
MOVWF IOC;设置GP4、GP5允许端口电平变化中断
BSF INTCON,GPIE
;----------------------------------------------------------
PWM频率15.6K耳朵还是多少可以听到点嘶叫声,改成31.2K就一点动静没有了。看看资料,只需加上BSF OSCCON,IRCF0就OK了。 虽然看不懂,但还是支持东成突破一一难关!加油啊! 原帖由 pinouo66624 于 2008-2-12 00:36 发表 http://www.shoudian.org/images/common/back.gif
虽然看不懂,但还是支持东成突破一一难关!加油啊!
算不上什么难关,主要是受限于有限的资料,有限的时间。趁现在还没开始忙,搞点东西玩玩,呵呵。论坛上能人很多,只是可以共享资料的不多而已。 好东东先顶 楼上又是你这个顶啊顶啊顶.....
虽然东成哥应该顶... 2个开关,用在啥筒子上好呢? :lol 看来东成很快也要出无极了,顶先,等东东 ...《无极》..... 哦~代码都放出来咯~一定要顶一个!!!
最好能再加上分组调光~那就完美了~:victory: 高手又出招了,看来无极调光要平民化了,支持呀!!!:lol :lol :lol 支持東成...:victory: 一有空閒就造福我們:D :D 原帖由 ldch 于 2008-2-12 00:46 发表 http://www.shoudian.org/images/common/back.gif
算不上什么难关,主要是受限于有限的资料,有限的时间。趁现在还没开始忙,搞点东西玩玩,呵呵。论坛上能人很多,只是可以共享资料的不多而已。 ...
是呀!很多人都是在保密!都透露出来,没有的钱赚了!!!美其名曰:保护知识产权!!!:lol 在中国知识产权很难赚钱呵 电路上东成兄非常强~有电路难题就找东成兄 这个是单片机的基本程序,有什么高科技呀?可以不用cpu这么麻烦,还贵,搞个占空比可调的电路就可以了.555应用上有,不过这个IC不使用这里,但是原理差不多的,换个IC就可以了.还便宜.用台湾的cpu芯片或者是国内的,5元以内搞定,甚至2元搞定.
[ 本帖最后由 donkey 于 2008-2-14 09:28 编辑 ] 对,确实是个很基本的程序,没说是什么高科技。从开始高出高效率、大电流输出的1AA升压电路开始,就没说是什么高级技术,仅仅是DIY而已,通过我的实践,摸索出可行的参数,对同样想DIY而缺少这些资料的朋友可以有帮助。
555确实是个非常经典的IC,到现在仍然广泛应用。也是很多人可以买得到的IC,而且比单片机便宜多了去了。我装配的雕刻机的控制板上就有555。不过,555也有自己的局限,最低工作电压不能太低,占空比不能太大或太小,靠阻容充放电稳定性欠佳,如果想改变占空比或者频率,只能靠电位器调节,外部元件较多,没法象单片机那样用开关点动控制,占空比精确设定。外部元件多使得无法用于手电这种体积要求极端的情况,所以,有兴趣玩玩可以试试,有空我也帖几个555振荡器的图。