ovládanie jasu žiarovky PICèkom
Moderátor: Moderátoři
ovládanie jasu žiarovky PICèkom
PLS potreboval by som poradi, ako spravi ovládanie jasu žiarovky poèas napr. 3 sek sa jas zmeni z 0 na 100 %.
Ideálne by bolo aby sa èas rozsvecovania dal meni - tj. regulácia vždy 0 - 100%, ale aby som mohol nastavi (napr. zápisom do registru) èas rozsvietenia.
Jedná sa o zariadenie, ktoré bude ovláda viac svetiel a potrebujem ich plynulo zapnú, vypnú.
Ideálne by bolo aby sa èas rozsvecovania dal meni - tj. regulácia vždy 0 - 100%, ale aby som mohol nastavi (napr. zápisom do registru) èas rozsvietenia.
Jedná sa o zariadenie, ktoré bude ovláda viac svetiel a potrebujem ich plynulo zapnú, vypnú.
Já teda nevím ale PWM bych tam asi nedával . ..... Je to dobré pro motory, ale žárovka bude při zeslabení blikat.kony2807 píše:zkus PWM - pulsně šířková modulace regulace 0-99% ... (některé pic to mají vestavěné přímo jako modul , u jiných se to dá řeššit softwerem)
edit : Ale pozor ! funguje pouze pro stejnosměrné napětí , pro střídavé by se to značně zkopliovalo ...
Naposledy upravil(a) Filda dne 04 pro 2007, 13:44, celkem upraveno 1 x.
tak to blikání je blbost , pokud jede PWM na frekvenci 25Hz ( no film v kině taky pří 24snímcích/sekunda taky nebliká - lidské oko je nedokonalé) a větší tak to blikat nebude . Doporučuju však něco kolem 8KHz , nebudou vás tolik bolet oči. Pokud by měl Anatér1 zájem , ať mi napíše do soukromých zpráv svůj e-mail rád mu program pošlu . Teno troblém sem již řešil u vlastních konstrukcáí.
Jedná sa o to, že potrebujem rozsvecova viac žiaroviek na aute - parkovaèky, spiatoèky, hlavné svetlá. PWM je len na jeden výstup,ale aj tak som to skúšal rozchodi v simulátore, ale ani za svet nejde. Tak ma napadlo skúsi to nejakými èítaèmi, lenže na to som trochu krátky - potreboval by som len princíp, ako by to mohlo fungova - ostatné by som mal zvládnu.
Když ti jde jen o princip, tak tady je segment programu, který pěkně pomalu rozsvěcuje/zhasíná světla. Tato rychlost se dá nastavit proměnnou. Jednoduchou modifikací je možné současně rozsvícet nebo zhasínat několik světel.
Kód: Vybrat vše
;---------------------------------------------------------------------
demo
call LED_UP
call LED_DW
goto demo
;----------------------------------------------------------------------
; Podprogram pro pomale rozsvecovani LED
;----------------------------------------------------------------------
LED_UP
clrf ucrLO
loopled_ON
movf ucrLO,W
movwf ucrHI
bcf PORTA, Q_OUT ; LED OFF
loop00
call delayt
incfsz ucrHI,F
goto loop00
movf ucrLO,W
movwf ucrHI
comf ucrHI,F
bsf PORTA, Q_OUT ; LED ON
loop01
call delayt
incfsz ucrHI,F
goto loop01
incfsz ucrLO,F
goto loopled_ON
return ; LED je zapnuta
;----------------------------------------------------------------------
; Podprogram pro pomale zhasinani LED
;----------------------------------------------------------------------
LED_DW
clrf ucrLO
loopled_OFF
movf ucrLO,W
movwf ucrHI
bsf PORTA, Q_OUT ; LED ON
loop02
call delayt
incfsz ucrHI,F
goto loop02
movf ucrLO,W
movwf ucrHI
comf ucrHI,F
bcf PORTA, Q_OUT ; LED OFF
loop03
call delayt
incfsz ucrHI,F
goto loop03
incfsz ucrLO,F
goto loopled_OFF
return ; LED je vypnuta
delayt
movlw 0x0a ; konstanta rychlosti
movwf vdelay
supsem
decfsz vdelay,F
goto supsem
return
;--------------------------------------------------
už sem kód psílal ale dám ho sem , myslím že je trochu přehlednější.
Kód: Vybrat vše
;PWM regulace pro procesor PIC12F629 (event. PIC12F675)
;Verze : 1.0
; Fosc : 4MHz
;-------- DEFINICE --------
list P=12f629
include "p12f629.inc"
org 000
goto Init
RAM equ 20h
TMP0 equ RAM+1
PWM equ RAM+4
PWM_L equ RAM+5
TMP_PWM equ RAM+6
#define Out 05,1 ;toto je výstup z PWM
Init bsf STATUS,RP0
movlw b'000000'
movwf GPIO
bcf STATUS,RP0
clrf 05
goto MAIN
;-------- PODPROGRAMY --------
Reg_PWM
bcf Out
movf PWM,0
sublw d'256'
movwf PWM_L
call Per_PWM
decfsz PWM_L,1
goto $-2
bsf Out
movf PWM,0
movwf TMP_PWM
call Per_PWM
decfsz TMP_PWM,1
goto $-2
bcf Out
return
;*************
Per_PWM ;Delay 100 cycles Toto je čekací smyčka , její čas je roven 1/256 času celé periody
; příklad :pro trvání jednoho cyklu PWM 0,0256 s sem zadej smyčku o 100 strojových cyklech.
MOVLW 0x20 ;33 DEC
MOVWF TMP0
DECFSZ TMP0,F
GOTO $-1 ;End of Delay
return
;-------- HLAVNÍ PROGRAM --------
MAIN ;do registru PWM zapiš hodnotu 0-255 , 0= nulová perioda v H,nejmenší výkon 255= maximální perioda v H, nejvetší výkon
;tak tady napiš pouze hodnotu na kterou tio má regulovat ...
movlw d'127' ; tvoje hodnota
movwf PWM
call Reg_PWM
goto MAIN
END
; Program napsal a odladil(c) Martin Konečný v roce 2007 tedy 14let po jeho narození.
; je jákladem pro další rozvoj programu v regulaci PWM , upraven jako část jiného programu.
jinak
Ahoj,
Program je pìkný ,ale skus programovat bez èekacích smyèek pokud Ti nezáleží na výstupní freq. napø:
Na stisk tlaèítka (ir) se postupnì rozsvítí a další stisk postupnì zhasne.
Rychlost UP/DN se øídí nahozením (cas) #define cas klav,3 (1-7)
.........................
PS : Komentáøe si pøepiš podle svého radši
;*******************************************************************
;******* led 0-100 to 100-0 ****************************
;*******************************************************************
loop btfsc ir ; stisknuto tlacitko IR
goto loop ; ne
clrf pwm1
incf pwm1,f ; nemi bejt nula
call pwm_up ; jas od 0 do max
bsf led ; jas je 100%
loop1 btfsc ir ; stisknuto tlacitko IR
goto loop1 ; ne
clrf pwm1
decf pwm1,f
call pwm_dn
bcf led ; jas je 0%
goto loop
;*******************************************************************
;**************** pwm 0-100 ****************************
;*******************************************************************
pwm_up incf pocet,f
btfss STATUS,Z ; skip if zero
goto dal2
decf klav,f
btfss STATUS,Z ; us mam testovat klavesy
goto dal3 ; ne
incf pwm1,f ; pwm zvis o jednu
btfsc STATUS,Z ; us je 0
return ; ano pric
bsf cas ; nahod nejake cekani X*255
dal3 bsf led ; nahod port led
incf pocet,f
dal2 movf pwm1,w
subwf pocet,w
btfsc STATUS,Z ; skip if neni zero
bcf led ; pokud je stejne resetuj
goto pwm_up
;*******************************************************************
;***************** pwm 100-0 ****************************
;*******************************************************************
pwm_dn incf pocet,f
btfss STATUS,Z ; skip if zero
goto dal
decf klav,f
btfss STATUS,Z ; us mam testovat klavesy
goto dal1 ; ne
decf pwm1,f ; pwm sniz o jednu
btfsc STATUS,Z ; us je 0
return ; ano pric
bsf cas ; nahod nejake cekani X*255
dal1 bsf led ; nahod port led
incf pocet,f
dal movf pwm1,w
subwf pocet,w
btfsc STATUS,Z ; skip if neni zero
bcf led ; pokud je stejne resetuj
goto pwm_dn
Program je pìkný ,ale skus programovat bez èekacích smyèek pokud Ti nezáleží na výstupní freq. napø:
Na stisk tlaèítka (ir) se postupnì rozsvítí a další stisk postupnì zhasne.
Rychlost UP/DN se øídí nahozením (cas) #define cas klav,3 (1-7)
.........................
PS : Komentáøe si pøepiš podle svého radši
;*******************************************************************
;******* led 0-100 to 100-0 ****************************
;*******************************************************************
loop btfsc ir ; stisknuto tlacitko IR
goto loop ; ne
clrf pwm1
incf pwm1,f ; nemi bejt nula
call pwm_up ; jas od 0 do max
bsf led ; jas je 100%
loop1 btfsc ir ; stisknuto tlacitko IR
goto loop1 ; ne
clrf pwm1
decf pwm1,f
call pwm_dn
bcf led ; jas je 0%
goto loop
;*******************************************************************
;**************** pwm 0-100 ****************************
;*******************************************************************
pwm_up incf pocet,f
btfss STATUS,Z ; skip if zero
goto dal2
decf klav,f
btfss STATUS,Z ; us mam testovat klavesy
goto dal3 ; ne
incf pwm1,f ; pwm zvis o jednu
btfsc STATUS,Z ; us je 0
return ; ano pric
bsf cas ; nahod nejake cekani X*255
dal3 bsf led ; nahod port led
incf pocet,f
dal2 movf pwm1,w
subwf pocet,w
btfsc STATUS,Z ; skip if neni zero
bcf led ; pokud je stejne resetuj
goto pwm_up
;*******************************************************************
;***************** pwm 100-0 ****************************
;*******************************************************************
pwm_dn incf pocet,f
btfss STATUS,Z ; skip if zero
goto dal
decf klav,f
btfss STATUS,Z ; us mam testovat klavesy
goto dal1 ; ne
decf pwm1,f ; pwm sniz o jednu
btfsc STATUS,Z ; us je 0
return ; ano pric
bsf cas ; nahod nejake cekani X*255
dal1 bsf led ; nahod port led
incf pocet,f
dal movf pwm1,w
subwf pocet,w
btfsc STATUS,Z ; skip if neni zero
bcf led ; pokud je stejne resetuj
goto pwm_dn