Ondanks dat ik niet meer op school zit, is dit denk ik de beste plek om deze vraag te stellen, vooral omdat ik er zelf nog veel van moet leren.|
Ik gebruik bij mijn projecten voornamelijk Microchip microcontrollers, PIC 8 bits.
Nu zijn mijn programmeerskills opzich prima, totdat het aankomt op Timers en Interrupts. Tot op heden kwam ik er wel mee weg om gewoon delay's te gebruiken, maar ik wil toch echt een keer de timers onder de knie krijgen.
Om die reden begin ik hier met een eenvoudige (?) vraag.
Op mijn microchip Curiosity board zit een PIC16F18875. Om te starten met Timers wil ik een eenvoudig project waarin ik 2 LEDs laat knipperen.
LED1 iedere seconde aan- en uit.
LED2 iedere halve seconde aan- en uit.
Door gebruik te maken van de TMR0 overflow lukt het om 1 LED te laten knipperen. Zodra TMR0 'vol' zal LED1 getoggled worden.
c code:
if(SWITCH1_PORT == LOW){
TMR0_StartTimer();
}
else if(SWITCH1_PORT == HIGH){
TMR0_StopTimer();
}
if (TMR0IF) //Has Timer0 Overflowed?
{
LED1_Toggle();
TMR0IF = 0; //Clear the Timer0 overflow flag
}
Klopt het dat de Timer iedere 250ms overflowed?
Mijn vragen:
Stel ik wil dat mijn LED iedere 5 seconden knippert, hoe krijg ik dat voor elkaar? Een kwestie van een counter die optelt naar 20 (250ms * 20) en dan pas de LED aan schakelt? Of is dat niet de manier waarop het hoort?
Stel ik wil een 2e LED toevoegen die met een andere snelheid knippert en niet synchroon loopt met LED1, kan ik dan nog wel dezelfde timer gebruiken? Of moet ik dan TMR1 bijvoorbeeld ook gaan gebruiken?