Re: 瘦身完成....
|
||||
---|---|---|---|---|
資深會員
|
哈哈 ... 居然會工作耶 !!!
不過程式有小修改一下 請參考啦 !!!! Happy Happy ......
發表於: 2005/10/26 7:29
|
|||
|
Re: 瘦身完成....
|
||||
---|---|---|---|---|
初級會員
|
Hi!~Dear Duck288,
好幾天沒上來,一上來就看到您有成果了,恭喜您。 由於您的觸發是正向信號(Low to high),不確定輸出是否有反向線路,所以順道提醒您一下: 用 PIC 處理 Triac 時要注意觸發象限問題。 我的經驗是第二、三象限比第一、四象限佳。以前Microchip的參考文獻只有 PICREF-4,若用此線路衍生,Triac 的選用要特別注意。剛才看了一下網頁發覺多了 AN958,對此問題有若干解說,值得您參考。 不過您好像是 Zero Crossing Control,不是Phase Control,影響應該比較少。 希望您試過後把成果貼給大家了解一下。
發表於: 2005/10/19 16:35
|
|||
|
Re: 瘦身完成....
|
||||
---|---|---|---|---|
資深會員
|
3Q... Ryang 版主提示 ....
在Build 時,的確出現一些問題 , 已經修正;看起來好像問題解決了; 待我燒個來試試看 ,是甚麼咚咚囉??
發表於: 2005/10/19 2:09
|
|||
|
Re: 瘦身完成....
|
||||
---|---|---|---|---|
版主
|
TRIS GPIO 的指令後應該加個 GOTO init 跳到你的 Main Routine才對,沒有GOTO 程式會當掉
發表於: 2005/10/18 18:06
|
|||
|
瘦身完成....
|
||||
---|---|---|---|---|
資深會員
|
Yeih ...piiii ... My science project is ready to go .Hahaha.
Basically , it is just a dimmer + PIR ... 人接近時由暗變亮 反之由亮變暗; AN954的 dimmer.asm 笨鴨偶看不懂?? 只好自己瞎掰一個囉! 原本程式有6-700條; 在此多謝 abewu 大哥的教導, 程式一下瘦身成下列程式... 關於常數宣告的方式 笨鴨偶還不會用, 只好在程式中, 多下些註解啦 ! Sorry lar. abewu 大哥. 程式...[code] ; PIC12F508 PIR+DIMMER #include <p12F508.inc> ; processor specific variables ; Configure: Controls the reset pin, code protect, oscillator selection, WDT. __CONFIG _MCLRE_OFF & _CP_OFF & _WDT_OFF &_IntRC_OSC ;-----[Defines & Variable Assignments]--------------------------------------- cblock 0x08 ; GP2=ZVS,GP5=TRIAC,GP3=SW1,GP4=PIR,GP1=SW2, GP0=MODE1-2 count ; count buffer count1 ; count buffer count2 ; count buffer count3 ;total delay buffer count4 ;max delay buffer count5 ; loop buffer endc ;-----[Reset Vector]--------------------------------------------------------- ORG 0x000 ; PIC goes here (Origin of code) after reset. movwf OSCCAL ; Load the oscillator calibration factor. movlw b'00000111' ; wake on pion change,pull-ups resister,max pre-scaler OPTION ; movlw b'00011111' ; Set GP0,1,2,3,4, to an input, GP5 to outputs. TRIS GPIO ; Register 06h goto init ;-----------------------------[Sub routine]----------------------------------- dly_100us movlw d'33' movwf count keep decfsz count,f goto keep retlw 0 step_up call dly_100us decfsz count3 ; goto step_up ; retlw 0 step_down call dly_100us ; incfsz count3 ; goto step_down ; retlw 0 ;-----[Main routine]--------------------------------------------------------- init btfsc GPIO,0 ; Mode A or Mode B goto mode_A goto hold ; mode B mode_A btfss GPIO,4 ; PIR ready yet ?????? goto mode_A ; no goto up hold ;---------------- Minimum power routine.------------------- btfsc GPIO,4 ; Check PIR Yes= H = SET. goto up ; Go up routine . btfsc GPIO,2 ; Zero Voltage crossing yet ?8.26ms for half cycle. goto hold movlw d'45' ; 5ms total delay. movwf count3 ; call step_up ; 100us per step up to increase light. bsf GPIO,5 ; Set GP5 to trigger Triac . call dly_100us ; Trigger width 100us . bcf GPIO,5 ; Clear trigger. goto hold up ;---------------- Going up routine ----------------------------- movlw d'40' ; total delay 40+5= 4.5ms. movwf count4 ; loop movlw d'10' ;10 times loop ,8.26msX10=0.0826s movwf count5 ; zcd btfsc GPIO,2 ; Zero Voltage crossing yet ? goto zcd ; No, check again .. movlw d'5' ; Min delay 500us. addwf count4,w ; add 45+5=50=5ms. movwf count3 ; put in counter3 call step_up ; bsf GPIO,5 ; set GP5 to triger Triac. call dly_100us ; set triger width =100us. bcf GPIO,5 ; Clear triger decfsz count5,f ; loop counter for persistence of vision. goto zcd ; decfsz count4,f ; goto loop ; goto pw_100 ; pw_100 btfsc GPIO,3 ; Hold on 10S or 30S. goto next goto hold_10s ; next btfsc GPIO,1 ; Hold on 30S or 60S goto hold_30s goto hold_60s ; hold_10s movlw d'12' ; 12 times loop. N=12 movwf count1 goto wait hold_30s movlw d'40' ; 40 times loop. N=40 movwf count1 goto wait hold_60s movlw d'160' ; 160 times loop. N=160 movwf count1 goto wait wait movlw d'100' ; 100 times loop. movwf count2 wait_1 btfsc GPIO,2 ; Zero Voltage crossing yet ? goto wait_1 call dly_100us call dly_100us call dly_100us call dly_100us ; Total delay for 400us. bsf GPIO,5 ; set GP5 to trigger Triac. call dly_100us ; set trigger width = 0.1ms. bcf GPIO,5 ; decfsz count2,f ; goto wait_1 ; 100 times loop = 8.26msX100=0.826s. decfsz count1,f ; yes. goto wait ; N times loop = 0.826s X N = N sec. btfss GPIO,4 ; Has PIR still there. goto down ; no goto pw_100 ; yes down ;-------------------- Going down routine ------------------------------ movlw d'40' movwf count4 ; loop_1 movlw d'10' ; movwf count5 ; zcd_1 btfsc GPIO,2 ; Zero Voltage crossing yet ? goto zcd_1 ; movlw d'210' ; addwf count4,w ; movwf count3 ; call step_down ; bsf GPIO,5 ; set GP5 to trigger Triac. call dly_100us ; bcf GPIO,5 ; decfsz count5,f ; goto zcd_1 ; decfsz count4,f ; goto loop_1 ; goto init ; end
發表於: 2005/10/18 7:27
|
|||
|