Dosao sam na ideju da uradim Pretvarac napona 12v - 220v sa PIC16F1827 Mikrokontolerom.Posto HPWM nemoze da se spusti toliko nisko 50Hz dobio sam informaciju da je tu potrebno da se uradi softversko resenje sa nekim Tajmerom koji ce da pravi interapte na svakih 20ms kada kontroler treba za promeni stanje na pinovima.
Posto sam ja pocetnik u programiranju potrebna mi je vasa pomoc . Za pisanje programa koristim PicBasic Pro (MicroCode Studio) ali za ovaj poduhvat mi je potrebna vasa pomoc.
Evo jednog predloga koji mi je dao Pedja089 kako bi to trebalo da se uradi:
Ja sam odabrao Timer0: 8-Bit Timer/Counter sa 8-Bit Prescaler koji ima deljenje sa maksimalno 256.Prvo moras odabrati tajmer koji ti se svidja. Ne znam koji pic koristis, pa ti detaljnije ne mogu reci.
Ali krenes ovako, prvo pregledas tajmere koje ima taj pic. Pa odaberes neki koji ima preskaler, on u principu samo podeli ulaznu frekfenciju.
I onda za 50HZ podesis preskaler na maksimalno deljenje frekfencije.
Zatim podesi tajmer da bude ukljucen. I u glavnom programu probaj napraviti da li ti se menja vrednost tajmera. Ne znam dal imas neki displej ili tako nesto, pa bi mogao ispisati vrednost tajmera.
Ako nemas to napravi neku led diodu, pa ispituj vrednost TMRxH pa nek se pali i gasi recimo ako je veci od 127 i manji od 127.
Kad to uradis onda si uspesno pokrenuo tajmer. Onda ti ostaje samo igranje sa interuptom i preloadom.
Njegov registar je OPTION_REG.
Timer0 sam uspeo da pokrenem i svakih 10 sekundi led dioda povezana na RB0 blinka evo i koda:
Code: Select all
#CONFIG
__config _CONFIG1, _FOSC_XT & _WDTE_OFF & _PWRTE_ON & _MCLRE_OFF & _CP_OFF & _CPD_OFF & _BOREN_OFF & _CLKOUTEN_OFF & _IESO_OFF & _FCMEN_OFF
__config _CONFIG2, _WRT_ALL & _PLLEN_OFF & _STVREN_OFF & _BORV_19 & _LVP_OFF
#ENDCONFIG
define osc4
TRISB=%00000000 ' Port B je izlazni
mS Var Word 'Promenljiva za milisekunde
Sek Var Word 'Promenljiva za sekunde
Symbol Led = PORTB.0 'Led dioda na RB0
TRISB = 0 'PORTB je izlazni
Inicijalizacija:
INTCON.5 = 0 'Onemoguci TMR0 prekide
mS = 0 'Brise promenljive za vreme
Sek = 0 '
OPTION_REG.0 = 0 '010 preskaler postavi u odnos 1:8
OPTION_REG.1 = 1
OPTION_REG.2 = 0
OPTION_REG.3 = 0
OPTION_REG.5 = 0 'Izaberi Interni takt
OPTION_REG.7 = 1
TMR0 = 6 'Postavi vrednost TMR0
INTCON.5 = 1 'Omoguci TMR0 prekide
INTCON.7 = 1 'Omoguci sve prekide
ON INTERRUPT goto Int_Sub
Pocetak:
Repeat 'Ciklus
Until Sek = 10 'Sacekaj do 10 sekundi
Toggle Led
TMR0 = 6
Sek = 0 'Ponisti promenljivu Sek
Goto Pocetak
'------Podprogram obrade prekida-----------------------
Disable
Int_Sub:
INTCON.7 = 0
If INTCON.2 and INTCON.5 Then
INTCON.2 = 0
mS = mS + 2
If mS >= 1000 Then
mS = mS - 1000
Sek = Sek + 1
EndIf
EndIf
INTCON.7 = 1 'Omoguci prekide
INTCON.5 = 1 'Omoguci prekide
Resume 'Vrati se iz rutine prekida
End
Evo slike sta treba da dobijem iz pretvaraca (kvazi sinus)sa pauzama izmedju poluperiode.