ldch 发表于 2008-2-12 00:07

无极调光试验程序

无极调光试验程序
    单片机采用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

ldch 发表于 2008-2-12 00:15

    振荡频率20M时,PR2取3FH,预分频比为1时,PWM频率大概是78.12K,那么如果频率采用内部RC的4M时,就是15.624K了,我实测是15.6K,误差不大。这个频率也不存在频闪,音频噪音也很轻微了。当然,12F683还能通过指令设置内部RC频率为8M,那么PWM频率就可以达到30K了。频率再高的话,我看可以取消DC-DC部分的PWM IC了,呵呵。当然,精度不怎么高。不过对付一般用途应该也能凑合吧,近期有进展会继续发消息。

ldch 发表于 2008-2-12 00:31

;----------------------------------------------------------
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

虽然看不懂,但还是支持东成突破一一难关!加油啊!

ldch 发表于 2008-2-12 00:46

原帖由 pinouo66624 于 2008-2-12 00:36 发表 http://www.shoudian.org/images/common/back.gif
虽然看不懂,但还是支持东成突破一一难关!加油啊!
      算不上什么难关,主要是受限于有限的资料,有限的时间。趁现在还没开始忙,搞点东西玩玩,呵呵。论坛上能人很多,只是可以共享资料的不多而已。

ggyy 发表于 2008-2-12 00:54

好东东先顶

一酒八妻 发表于 2008-2-12 01:04

楼上又是你这个顶啊顶啊顶.....
虽然东成哥应该顶...

xiewg 发表于 2008-2-12 09:55

2个开关,用在啥筒子上好呢?

qianlcd 发表于 2008-2-12 10:07

:lol 看来东成很快也要出无极了,顶先,等东东

天狼晓月 发表于 2008-2-12 11:34

...《无极》.....

大猫_moto 发表于 2008-2-12 13:46

哦~代码都放出来咯~一定要顶一个!!!

最好能再加上分组调光~那就完美了~:victory:

88:88:88 发表于 2008-2-12 15:58

高手又出招了,看来无极调光要平民化了,支持呀!!!:lol :lol :lol

xiey2002 发表于 2008-2-12 18:08

cl034961110 发表于 2008-2-12 20:09

支持東成...:victory: 一有空閒就造福我們:D :D

wow 发表于 2008-2-13 12:31

原帖由 ldch 于 2008-2-12 00:46 发表 http://www.shoudian.org/images/common/back.gif

      算不上什么难关,主要是受限于有限的资料,有限的时间。趁现在还没开始忙,搞点东西玩玩,呵呵。论坛上能人很多,只是可以共享资料的不多而已。 ...
是呀!很多人都是在保密!都透露出来,没有的钱赚了!!!美其名曰:保护知识产权!!!:lol

pxx 发表于 2008-2-13 14:05

在中国知识产权很难赚钱呵

thesnake 发表于 2008-2-13 15:06

太阳神 发表于 2008-2-13 23:54

电路上东成兄非常强~有电路难题就找东成兄

donkey 发表于 2008-2-14 09:27

这个是单片机的基本程序,有什么高科技呀?可以不用cpu这么麻烦,还贵,搞个占空比可调的电路就可以了.555应用上有,不过这个IC不使用这里,但是原理差不多的,换个IC就可以了.还便宜.用台湾的cpu芯片或者是国内的,5元以内搞定,甚至2元搞定.

[ 本帖最后由 donkey 于 2008-2-14 09:28 编辑 ]

ldch 发表于 2008-2-14 09:42

   对,确实是个很基本的程序,没说是什么高科技。从开始高出高效率、大电流输出的1AA升压电路开始,就没说是什么高级技术,仅仅是DIY而已,通过我的实践,摸索出可行的参数,对同样想DIY而缺少这些资料的朋友可以有帮助。
   555确实是个非常经典的IC,到现在仍然广泛应用。也是很多人可以买得到的IC,而且比单片机便宜多了去了。我装配的雕刻机的控制板上就有555。不过,555也有自己的局限,最低工作电压不能太低,占空比不能太大或太小,靠阻容充放电稳定性欠佳,如果想改变占空比或者频率,只能靠电位器调节,外部元件较多,没法象单片机那样用开关点动控制,占空比精确设定。外部元件多使得无法用于手电这种体积要求极端的情况,所以,有兴趣玩玩可以试试,有空我也帖几个555振荡器的图。
页: [1] 2 3
查看完整版本: 无极调光试验程序