Stap 2: Met behulp van Timer1 voor het genereren van 50 Hz signalen
We zullen het gebruiken van timer1 samen met CCP module als "Vergelijk, trigger special event" geopereerd. Dit alles zal gebeuren binnen de code.
Dus het idee is om dit te doen voor eeuwig:
1-load timer1 met de vereiste waarden voor het genereren van de langste periode kon (104.9 ms).
2-load de "on-time"-waarde in van de CCP module registreren, "1" op de uitgang-pins (RC2), en start van timer1.
3 - timer1 zal beginnen tellen totdat de waarde binnen CCP registers (wedstrijden het op tijd) wordt bereikt. CCP zal zijn interrupt-vlag instellen.
4-inside interrupt service routine, reset CCP interrupt-vlag, laden van CCP registers met de waarde "uit-tijd" en "0" vastgesteldop de uitgang-Pins.
Langs alle wordt dat we een variabele die in het bezit van het aantal teken dat overeenkomt met 20 ms volledige periode... het moet gebruiken als volgt berekend:
Laagste timer1 frequentie (zoals berekend voordat) = 9.53 Hz.
Hoogste timer1 periode = 104.9 ms.
zodat 104.9 ms overeenkomt met de laatste teek die 65535 (omdat er 16-bits resolutie)... dus voor 20 ms, wat is het aantal teken nodig?
N_20ms = (0.02 * 20000000) / (4 * 8) = 12500.
Dus wanneer timer1 de teek nummer 12500 bereikt, het is 20 ms! Dit is de referentiewaarde die we in onze software gebruiken zullen... als we verschillende plicht cycli willen, wat moeten we doen?
voor 50% plicht het aantal graven = 0,5 * 12500 en voor 20% = 0,2 * 12500 enzovoort! de volgende regel is ter verduidelijking:
aantal teken: 0___12500___65536
overeenkomstige periode: 0___20ms___ 104.9ms
We zijn klaar om te gaan! all that's left is de code zelf!