Schritt 3: Beispiel 1: Fahrrad-Tachometer
Timer 1, alle ms (Frequenz von 1 kHz) zu unterbrechen, um den Magnetschalter zu messen einstellen Wenn der Magnet am Schalter vorbei ist, das Signal vom Switch ist hoch und die Variable "Zeit" wird auf Null gesetzt. Wenn der Magnet nicht in der Nähe ist bekommt die Schalter "Time" um 1 erhöht. Auf diese Weise "Zeit" ist eigentlich nur eine Messung der Höhe der Zeit in Millisekunden, die seit der letzten verging der Magnetschalter Magnet bestanden hat. Diese Info wird später im Code zur u/min und mph des Fahrrads zu berechnen.
Hier ist der Teil des Codes, der die timer1 für 1KHZ Interrupts einrichtet
(CLI); //stop interrupts
eingestellten timer1 Interrupt bei 1kHz
TCCR1A = 0; / / gesamte TCCR1A-Register auf 0 gesetzt
TCCR1B = 0; / / gleiche für TCCR1B
TCNT1 = 0; //initialize Zählerstand auf 0
Legen Sie Anzahl der Timer für 1khz-Schritten
OCR1A = 1999; / / = (16 * 10 ^ 6) / (1000 * 8) - 1
16bit timer1 für dieses bc 1999 verwenden musste > 255, aber konnte mit größeren Vorteiler auf Timer 0 oder 2 wechseln
CTC-Modus einschalten
TCCR1B | = (1 << WGM12);
Für 8 Vorteiler CS11 Bit gesetzt
TCCR1B | = (1 << CS11);
Timer-Compare Interrupt zu aktivieren
TIMSK1 | = (1 << OCIE1A);
(Sei); //allow interrupts
Hier ist der vollständige Code, wenn Sie sich ansehen möchten:
//bike speedometer //by Amanda Ghassaei 2012