Paso 6: contadores de tiempo
Un temporizador es un dispositivo de conteo simple en su micro, también es conocido como un contador para ello.
En cada tick incrementan a ellos mismos.
Usted puede comprobar el valor cuando se necesita una idea de cuánto tiempo ha pasado, o puede llegar a provocar una interrupción para hacerle saber cuando ha alcanzado un cierto valor.
Contadores de tiempo no son muy precisos, si necesitas exactitud desea un reloj de tiempo real (RTC).
Son sin embargo bastante bueno para tareas más
Así que antes de llegar a él, vamos a explorar cómo funciona un contador de tiempo.
Cada pulso de reloj del micro se alimenta en el módulo de temporizador.
Aquí se puede dividir por diferentes cantidades para producir una señal más lenta (llegaremos a eso más adelante).
En la señal que sale del prescaler, el temporizador agrega 1 al valor de su registro.
Como los registros que ya hemos cubierto, éste se puede leer o escrito.
Se puede ver lo que es el conteo de garrapatas en, y basado en la velocidad de reloj y el divisor, se puede determinar aproximadamente cuánto tiempo ha pasado.
Cuando el temporizador llega a su límite (255 para un temporizador de 8 bits, 65535 para un temporizador de 16 bits) se restablece a 0 y empieza a contar otra vez.
Si habilita interrupciones le avisará su código que esto ha sucedido.
También puede establecer un valor de comparación que se disparará una interrupción Si desea ser informado de un tiempo el es más corto y desbordamiento.
Si usted necesita medir un largo periodo de tiempo, puede usar un prescaler de reloj (piense de él como un divisor).
Por ejemplo, un prescaler de 8 sólo enviará una señal al contador después de que ha recibido 8 ticks de reloj del sistema.
Pierdes precisión pero puede medir un largo periodo de tiempo.
Si desea medir un período muy largo de tiempo (digamos 10 minutos, que es mucho tiempo para que su micro rápido!), usted puede contar cuantas veces el flujo interrupción se activa y actuar en base a.
Una manera fácil de trabajar en la configuración del reloj es utilizar una calculadora como esta:
http://Frank.circleofcurrent.com/cache/avrtimercalc.htm
Por lo tanto, suficiente explicación, vamos a entrar en algo de código!
El ejemplo se va a mostrar cómo utilizar la interrupción de desbordamiento para períodos más prolongados de tiempo, para ver como para periodos más pequeños (microsegundos y milisegundos por ejemplo), echa un vistazo al código de receptor de IR, que hace un uso extensivo de ellos a tiempo las señales de control remoto entrantes.
Configurar tu placa como en la imagen y descargar el código adjunto. (Configurar reloj del micro a 1MHz)
Cuando usted presiona el botón, el LED se enciende y encendida durante 30 segundos.
Si Presione nuevamente el botón, el temporizador se reiniciará.
Así que vamos a examinar el código.
El bucle principal es bastante estándar, configurar el LED y el botón Habilitar interrupciones (no se olvide esto!).
Cuando se presiona el botón de llamar a la función "start_timer".
start_timer establece el prescaler a 1024, permitir la interrupción de desbordamiento para el timer0, claro nuestra overflow_count y poner el temporizador.
Ahora, cada vez que el reloj va más de 255, la interrupción se llama.
La interrupción es la función especial llamada ISR(TIMER0_OVF_vect)
Aquí comprobamos si hemos desbordado suficientes veces (calculadas con la Web de la calculadora anterior), y si tenemos que desactivar la interrupción para el reloj y apagar el LED.
De lo contrario simplemente incrementar nuestra cuenta y dejar que el temporizador a empezar de nuevo.
Bastante sencillo ¿verdad?
Aunque la belleza de ella es que puede tener otro código que se ejecuta mientras el temporizador de cuenta.
Cuando desborda habrá un desvío leve a la interrupción servicio rutinario (ISR), y una vez que se hace volverá a su código previamente funcionando como si nada hubiera sucedido!
Mejor que un simple retraso, como puede hacer más trabajo o ir a dormir para ahorrar energía!