Paso 3: Ejemplo 1: velocímetro de la bici
Configurar el temporizador 1 interrumpir cada ms (frecuencia de 1kHz) para medir el interruptor magnético. Si el imán está pasando por el interruptor, la señal del interruptor es alta y la variable "tiempo" se establece a cero. Si el imán no está cercano el conmutador "time" es incrementado por 1. Esta forma de "tiempo" es sólo una medida de la cantidad de tiempo en milisegundos que ha transcurrido desde el imán último pasado por el interruptor magnético. Esta información se utiliza más adelante en el código para calcular rpm y mph de la moto.
Aquí es el bit de código que configura timer1 para interrupciones de 1kHz
CLI (); //stop interrupciones
interrupción timer1 set a 1kHz
TCCR1A = 0; / / todo registro TCCR1A para 0
TCCR1B = 0; / / única para TCCR1B
TCNT1 = 0; //initialize valor de contador a 0
configurar cuenta de temporizador para incrementos de 1khz
OCR1A = 1999; / / = (16 * 10 ^ 6) / (1000 * 8) - 1
tuvo que utilizar el timer1 de 16 bits para este bc 1999 > 255, pero podría cambiar a temporizadores 0 o 2 con prescaler más grande
Activar modo de CTC
TCCR1B | = (1 << WGM12);
Establezca el bit CS11 para 8 prescaler
TCCR1B | = (1 << CS11);
habilitar interrupción de timer en comparación
TIMSK1 | = (1 << OCIE1A);
SEI (); //allow interrupciones
Aquí está el código completo si quieres echar un vistazo: