Stap 3: Voorbeeld 1: Bike Snelheidsmeter
Timer 1 te onderbreken van elke ms (frequentie van 1kHz) voor het meten van de magneetschakelaar instellen Als de magneet is loopt door de schakeloptie, het signaal van de schakelaar is hoog en de variabele "tijd" wordt ingesteld op nul. Als de magneet niet in de omgeving van is wordt de schakelaar "tijd" verhoogd met 1. Op deze manier "tijd" is eigenlijk alleen maar een meting van de hoeveelheid tijd in milliseconden dat is verstreken sinds de laatste doorgegeven door de magneetschakelaar magneet. Deze info wordt verderop in de code gebruikt voor het berekenen van de rpm en mph van de fiets.
Hier is de bit van de code die timer1 voor 1kHz interrupts stelt
cli (); //stop interrupts
set timer1-interrupt bij 1kHz
TCCR1A = 0; / / hele TCCR1A register ingesteld op 0
TCCR1B = 0; / / zelfde voor TCCR1B
TCNT1 = 0; //initialize waarde van de teller op 0
instellen van de timer tellen voor 1khz stappen
OCR1A = 1999; / / = (16 * 10 ^ 6) / (1000 * 8) - 1
moest gebruiken 16 bits timer1 voor dit bc 1999 > 255, maar kan overschakelen naar timers 0 of 2 met grotere prescaler
CTC-modus inschakelen
TCCR1B | = (1 << WGM12);
CS11-bit ingesteld voor 8 prescaler
TCCR1B | = (1 << CS11);
inschakelen van de timer vergelijk interrupt
TIMSK1 | = (1 << OCIE1A);
Sei (); //allow interrupts
Hier is de volledige code als je wilt om een kijkje te nemen:
//bike speedometer //by Amanda Ghassaei 2012