El tiempo juega un papel importante en nuestra vida. Es normal que un ser humano reserve tiempo para planes futuros. Sólo necesitamos nuestro cerebro y un reloj para decidir cuál es la hora actual y cuánto tiempo ha pasado. De manera similar, un microcontrolador también puede calcular el tiempo. Sirve al cerebro como en el caso del ser humano y el reloj lo proporciona un oscilador. Para nosotros, perder un segundo puede no ser importante, pero para los microcontroladores, un microsegundo es muy crucial.
Temporizadores con NRF24LE1
El tiempo juega un papel importante en nuestra vida. Es normal que un ser humano reserve tiempo para planes futuros. Sólo necesitamos nuestro cerebro y un reloj para decidir cuál es la hora actual y cuánto tiempo ha pasado. De manera similar, un microcontrolador también puede calcular el tiempo. Sirve al cerebro como en el caso del ser humano y el reloj lo proporciona un oscilador. Para nosotros, perder un segundo puede no ser importante, pero para los microcontroladores, un microsegundo es muy crucial.
En este artículo encontrará respuestas a preguntas como: ¿ Cómo podemos usar NRF para controlar el tiempo transcurrido? ¿Cómo podemos generar un retraso para un período específico y mucho más?
La mayoría de los microcontroladores tienen funciones integradas conocidas como temporizadores. Estos temporizadores se utilizan para controlar el tiempo. También se pueden utilizar como contador para contar pulsos. El NRF24LE1 tiene tres temporizadores Timer0, Timer1 y Timer2. Solo discutiremos Timer0 en este artículo.
Fig. 1: Prototipo de temporizador basado en el módulo NRF24LE
El temporizador utiliza la frecuencia del reloj para actualizar la hora. Utiliza registros para almacenar el valor del tiempo. Por ejemplo, si utilizamos un reloj de 16 MHz que tiene un período de tiempo de 62,5 nS (nanosegundos), entonces el registro del temporizador incrementa su valor en 1 cada 62,5 mS. Esto también significa que la medida más pequeña que podemos hacer es 62,5 mS.
Fig. 2: Imagen del temporizador basado en el módulo NRF24LE
Ya hemos comentado que el temporizador utiliza registros para almacenar el valor del tiempo. En el NRF24LE1 podemos elegir entre registro de 8 bits, registro de 13 bits y registro de 16 bits. La selección de registro afecta la cantidad de tiempo que puede almacenar un temporizador. Por ejemplo, un registro de 8 bits puede almacenar valores hasta 255. Si utilizamos la frecuencia de 16 MHz con un periodo de tiempo de 62,5 mS, la cantidad máxima de tiempo que este registro puede almacenar es (62,5 * 255) = 15,9 Estados Unidos (microsegundos).
Ahora bien, ¿y si cambiamos la frecuencia? Intentemos.
Digamos que mi nueva frecuencia es 16 MHz/8 = 2 MHz, lo que significa que el período de tiempo ahora es 0,5 uS. Ahora, si usamos un registro de 8 bits para almacenar el valor de tiempo, la cantidad máxima de tiempo que este registro puede almacenar es (0,5 * 255) = 127,5 uS (microsegundos). Lo que observamos es que, si disminuimos la frecuencia, aumenta el tiempo máximo que puede almacenar la caja registradora. El divisor que utilizamos para bajar la frecuencia se conoce como preescalador. Podemos cambiar este preescalador para cambiar la frecuencia. En el módulo NRF, el preescalador está integrado y configurado en 12. Esto significa que la frecuencia ahora pasa a ser 16/12 = 1,33 MHz.
Tenemos que seleccionar Timer0 para que funcione como temporizador o contador. Para ello disponemos del registro TMOD (Timer Mode). El segundo bit de este registro se utiliza para seleccionar entre temporizador y contador. Si este bit es 0, se selecciona el temporizador, y si es 1, se selecciona el contador. Tenemos que escribir esta parte según nuestra necesidad.
Para Timer0, tenemos tres modos:
1. Modo0: este modo se utiliza para seleccionar un registro de 13 bits.
2. Modo1: este modo es para registros de 16 bits.
3. Modo 2: es para recarga automática de 8 bits.
4. Modo3: este modo se utiliza para seleccionar un registro de 8 bits como temporizador/contador y otro registro de 8 bits como temporizador.
El primer bit y el bit cero del registro TMOD se utilizan para seleccionar entre diferentes modos. Las diferentes combinaciones de estos bits se refieren a diferentes modos. Ellos son:
00 – Modo0
01 – Modo1
10 – Modo2
11 – Modo3
Los registros que almacenan el valor de tiempo del temporizador0 son TL0 y TH0. Estos dos registros son de 8 bits cada uno. Se pueden combinar para utilizarlos como registro de 16 bits o registro de 13 bits. TH0 contiene el byte más alto y TL0 contiene el byte más bajo de datos. Además, si estos registros se llenan, se conoce como desbordamiento. Podemos comprobar si se ha producido un desbordamiento comprobando el indicador de desbordamiento en el registro TCON (Control del temporizador). El bit número cinco representa la bandera de desbordamiento. Si el indicador es 1, se ha producido un desbordamiento. Podemos escribir una rutina de servicio que se llame cuando se produzca un desbordamiento.
Los indicadores de desbordamiento se borran automáticamente cuando se llama a la rutina de servicio.
Para iniciar el temporizador tenemos que configurar el bit número cuatro del TCON. Si este bit es 0, el cronómetro se detendrá. También podemos acceder a este bit a través de la variable TR (Timer Run). Si TR = 1, se inicia el cronómetro. Si TR = 0, el cronómetro se detiene.
Hay más funciones de temporizador, como desbordamiento, control de hardware, control de puerta y contador de pulsos. Discutiremos estas características en nuestros próximos artículos.
Escribimos código para comprender los temporizadores. Estamos usando timer0 en modo1. Creamos un retraso de……
Código fuente del proyecto
###
//Programa para
#include "reg24le1.h" // Archivo de encabezado de E/S para NRF24LE1
###
Diagramas de circuito
Diagrama de circuito-NRF24LE-Módulo-Temporizador |
Vídeo del proyecto