tesko. sa epwm modulom ima 16 bitnu rezoluciju duty cycle-a, ali frekvenciju ne menja tako lako.
PWM Period = [(PR2) + 1] • 4 • TOSC • (TMR2 Prescale Value)
ako je kloknut na 40MHz na primer najblize 4000Hz je
PR2 = 0b10011011 ;
T2CON = 0b00000111 ;
CCPR1L = 0b01001101 ;
CCP1CON = 0b00111100 ;
sto ce dati 4006.41Hz
prvi pre njega je 3980.89Hz a prvi posle njega je 4032.26Hz pa 4058.44Hz pa 4084.97Hz ... dakle rezolucija sa 1Hz ... nece da radi ..
ako ga poteras na 20MHz bude jos gore ... na 8 i 4MHz je prilicno isto %$%# kao i sa 40MHz (malo gore ali ..)
koliko brza promena izmedju vrekvencija je potrebna?
Mozes i sam da napravis brojac koji pici na tajmeru u taktu i da u while petlji proveravas "dokle je dosao" i sam da radis on/off na izlaznom pinu .. dovoljno je niska rezolucija da bi to mozda i mogao da izvedes ... dakle uzmes neki 16bitni counter (ako se dobro secam imas 3 komada) i pustis ga da radi na lokalnom taktu (npr 8MHz pic, znaci on ce da roka na 1MHz (dakle na svakih 0.000001sec, 4KHz je 0.00025 dakle na svakih 250 tikova tajmera tebi prodje jedna perioda na 4K) proveravas njegov brojac u while petlji i kada stigne do 125 togglujes izlaz i resetujes timer na 0. menjanjem tog broja gde toglujes izlaz menjas frekvenciju, 125 ce biti 4KHz, svaki sledeci ce biti 0.000002 sec duzi/kraci, tj frekvencija izlaznog signala ce ti biti 1/("broj"*0.000001*2) sto znaci
125 : 4000Hz
124 : 4032.25Hz
dakle .. opet isti problem kao sa pwm-om :) (jeli, on radi isto tako samo sam) .. ako ga podignes na 40MHz imaces malo manju gresku rucno nego sa pwm-om ali opet neces imati 1Hz rezoluciju
mozes da experimentises sa varijantom da uzmes i napravis PWM izlaz sa varijabilnim DC-om (imas visoku rezoluciju na tom picu, uzmi neku frekevnciju koja ti odgovara da radi sa sto vecom preciznoscu, na primer 39.06KHz na 40MHz (prescaler 1, pr2 FF ti daje 10bitni pwm). Taj pwm izlaz pretvori u DC napon Vss-Vdd uz pomoc obicnog RC filtera (eventualno moze i jedan op amp da izbaferujes DC koji ti izbaci RC filter).
Onda taj DC dovedes na voltage to frequency (npr LM231) i "voila" dobio si varijabilni freq ...
ono sto bi bilo "pravilno" je da uzmes neki oscilator koji ti daje mogucnost da se usiljis blize frekvencijama koje ti trebaju ...3.2768MHz bi mozda mogao da odradi posao ... uradi racunicu ..