Stránka 1 z 2

ovládanie jasu žiarovky PICčkom

Napsal: 03 pro 2007, 11:15
od Amatér1
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úť.

Napsal: 03 pro 2007, 14:52
od kony2807
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 ...

Napsal: 03 pro 2007, 15:02
od Cust
misto logicke 1 na rozsviceni zarovky stridej zapis 1 a 0
0 nesviti
1 sviti
0,1,0,1 ... sviti napul (kdyz budes mit vic jednicek bude svitit vic a kdyz vic 0 bude svitit min), frekvenci zvol nejakou vhodnou, aby to spinaci tranzistor ci co tam mas v klidu zvladal a zbytecne nehral....

Napsal: 04 pro 2007, 07:42
od ViPali
Budeš ovládať žiarovku na striedavé napätie, alebo jednosmerné?

Napsal: 04 pro 2007, 13:39
od Filda
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 ...


Já teda nevím ale PWM bych tam asi nedával . ..... Je to dobré pro motory, ale žárovka bude při zeslabení blikat.

Napsal: 04 pro 2007, 13:42
od Cust
u PWM, zalezi na frekvenci, pokud bude dostatecne velika, tak blikat nemuze - navic ma vlakno zarovky dost velkou setrvacnost. Pokud pic umi pwm sam o sobe, bude to nejlepsi zpusob.

Napsal: 04 pro 2007, 16:59
od jankop
HW PWM v PIC nejde pro tento účel bez externí logiky použít. Ale softwarově to v tomto specielním případě není problém.

Napsal: 04 pro 2007, 18:05
od kony2807
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áí.

Napsal: 04 pro 2007, 18:38
od Filda
až teď mě to došlo :lol: ........ takže teď už proti tomu nic nemám :wink: :agree:

Napsal: 04 pro 2007, 19:05
od amater1
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ť.

Napsal: 04 pro 2007, 20:05
od jankop
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
;--------------------------------------------------

Napsal: 05 pro 2007, 07:42
od amater1
Ďakujem, veď je to celkom jednoduché , len ta to prísť :thanks:

Napsal: 05 pro 2007, 15:47
od kony2807
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.


   



Napsal: 05 pro 2007, 18:12
od jankop
Musím tě pochválit, jsi šikovný. Na druhé straně je v programu několik závažných chyb a v konečném důsledku bude tvůj program nefunkční.

jinak

Napsal: 17 pro 2007, 11:58
od Ano
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