Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
Maskinnära programmering 6B2266
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
* Function*/<br />
char MoreToDo(void)<br />
{<br />
char Duty;<br />
if( Contact == ON ) Duty = 191; /* 191/255 = 75% Dutycycle */<br />
/* _______ __ */<br />
/* _| |__| */<br />
/* */<br />
else Duty = 64; /* 64/255 = 25% Dutycycle */<br />
/* __ __ */<br />
/* _| |_______| */<br />
/* */<br />
return Duty; /* Be back in one TIMER0-tick! */<br />
}<br />
I exemplet ovan antar vi att PIC-processorn har klockfrekvensen 4 MHz och att<br />
Timer0 använder prescalerns /256 och därför räknar med frekvensen ( f osc /4 )/256 =<br />
10 6 /256 = 3906 Hz, tiden mellan två Timer0-tick blir 0,25 ms.<br />
PWM-signalens periodtid blir (1/3906)×256 = 66 ms. PWM-signalens frekvens blir<br />
därför låg, 15 Hz.<br />
Denna signal duger till ett värmeelement, medan en glödlampa riskerar att "flimra"<br />
störande.<br />
Om Timer0 inte använder prescalern blir PWM-frekvensen 256 ggr högre dvs 3900<br />
Hz, men då blir utrymmet för andra programaktiviteter än själva genereringen av<br />
PWM-signalen obefintliga.<br />
Ofta vill man ha PWM-frekvenser över 20000 Hz så att man undviker att vibrationer i<br />
utrustningen blir "hörbara" (för människor).<br />
Även om det går att programmera en PWM-signal direkt, så finns det således ett stort<br />
behov av att i stället kunna använda inbyggda "PWM-enheter" som kan avlasta<br />
processorn.<br />
( Microchip visar i sin application note AN654 på bättre sätt att programmera PWM<br />
med Timer0 genom att utnyttja avbrott då timern "slår runt" ).<br />
35