21.12.2013 Views

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

Maskinnära programmering 6B2266

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

PWM med CCP-enheter<br />

( CaptureComparePWM )<br />

CCP-enheterna kan användas till att generera PWM-signaler. Detta sker i samverkan<br />

med Timer2.<br />

Timer2 är en 8-bitars räknare, vid PWM kompletteras den internt i processorn med 2<br />

bitar till en 10-bitarsräknare. Därigenom kan PWM-signaler med upp till 10 bitars<br />

upplösning genereras. PWM-signalens periodtid kan ställas in med Timer2:s prescaler<br />

( T2CON ) och med periodregistret PR2. Inställningen i periodregistret påverkar hur<br />

långt Timer2 räknar, och därigenom även PWM-signalens upplösning. Högst<br />

upplösning får man om Timer2 räknar fullt, dvs PR2 = 255, och periodtiden bara<br />

justeras med prescalern T2CON.<br />

(Timer2 som "10-bitarsräknare" räknar f osc inte f osc /4 ).<br />

Timer2 har även en postscaler, men den används inte vid PWM. Eftersom denna kan<br />

generera regelbundna avbrott kan man använda den till att uppdatera PWM-enhetens<br />

DutyTime.<br />

Från CCP-enheten används två 8 bitarsregister CCPRL och CCPRH och en 16-bitars<br />

komparator ( bara 10 bitar används ). CCPRH programmeras inte av användaren utan<br />

är bara en intern buffert vid PWM.<br />

PWM-signalens DutyTime, T Duty , "beställs" som 8 mest signifikanta bitar med<br />

registret CCPRL ( trots registrets namn! ) och 2 extra minst signifikanta bitar från<br />

registret CCPCON bitarna CCPX och CCPY.<br />

Om man har 10 bitars upplösning, men nöjer sig med 8 bitars upplösning, räcker det<br />

att placera 8 bitar för önskad DutyTime, T Duty , i registret CCPRL, och man behöver i<br />

så fall inte bry sig om de två extra bitarna i register CCPCON utan låter dem vara 0.<br />

36

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

Saved successfully!

Ooh no, something went wrong!