21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!