Cómo hacer un temporizador de vigilancia con el circuito NRF24LE1
Hasta ahora, en la serie NRF24LE1, hemos cubierto muchas características interesantes y especiales que distinguen al NRF de los demás. Hoy vamos a discutir una característica importante de los microcontroladores que les ayuda a recuperarse de fallas. Supongamos que te doy una tarea para resolver en un tiempo predefinido y no puedes realizarla en el tiempo asignado, entonces tienes que empezar desde el principio. La palabra "Tiempo de espera" se puede utilizar aquí para aclarar el concepto.

Fig. 1: Prototipo de temporizador de vigilancia basado en NRF24LE1
Pero, ¿sabías que el microcontrolador también puede controlar el tiempo y, si no completa la tarea en el tiempo asignado, puede reiniciarse? Esto se hace para evitar fallos de funcionamiento y accidentes. O podemos decir que en caso de fallo del sistema se reinicie automáticamente. Esto también elimina la necesidad de un reinicio manual. Es una parte esencial en el diseño de sistemas remotos y automatizados. El cronómetro que se utiliza para realizar un seguimiento del tiempo se conoce como Watchdog Timer. El nombre es claro. El Mars Rover también utiliza esta funcionalidad para recuperarse de fallas y mal funcionamiento del sistema.
Algunas características del temporizador de vigilancia del NRF24LE1 son:
• Intervalo mínimo de tiempo de espera de vigilancia: 7,8125 ms
• Intervalo máximo de tiempo de espera de vigilancia: 512 s
• Utiliza una frecuencia de reloj de 32,768 KHz
• Temporizador de registro de 16 bits
Para controlar el Watchdog disponemos de registro WDSV. Contiene un valor de contador de 16 bits y está dividido en dos bytes: MSByte y LSByte. Para escribir el valor del contador en este registro, primero debemos escribir LSByte y luego MSByte. Lo mismo ocurre con la lectura del registro. Los dos bytes deben leerse o escribirse continuamente. No podemos leer ningún byte mientras escribimos y viceversa. La lectura del registro WDSV siempre dará el valor del contador inicial o el valor inicial. No podemos obtener el valor actual del temporizador de vigilancia leyendo WDSLV.
El temporizador de vigilancia se activa cuando se escriben dos bytes. Cuenta atrás desde WDSLV*256 hasta 0. Cuando el valor del contador llega a 0, el microcontrolador se reinicia. Este reinicio es el mismo que el reinicio del hardware. Para evitar resetear, podemos registrar el WDSV con un valor nuevo o igual.
El contador se restablecerá si se escribe WDSV. Esto se hace cuando nuestro sistema funciona correctamente y no queremos reiniciar.
El tiempo de espera del mecanismo de vigilancia en segundos viene dado por:
WDSV*256/32768
El mecanismo de vigilancia se desactiva cuando se reinicia el sistema o cuando utilizamos NRF en los modos de retención de registros o retención de memoria. Utiliza un reloj de baja frecuencia de 32,768 KHz. Antes de utilizar el temporizador tenemos que activar el reloj. Esta frecuencia puede suministrarse externamente o derivarse de un oscilador de cristal de 16 MHz. La fuente de 32,768 KHZ puede controlarse mediante el registro CLKLFCTRL (control de baja frecuencia del reloj). El contenido de este registro es:
• Bit 7 – Leer CLKLF (fase)
• Bit 6 – CLKLF listo para usar
• Bit 5:4 – Reservado
• Bit 3 – Leer fuente de reloj de 16 MHz 1: Oscilador de cristal, 0: Oscilador RC.
• Bit 2:0 – Fuente para CLKLF.
000: Cristal 32K
001: RC 32K
001: Sintetizado a partir de cristal de 16 MHz
011: Del pin IO utilizado como XC1 a XOSC32K (señal de baja amplitud)
100: Desde el pin IO (señal digital de riel a riel)
101: Reservado
110: Reservado
111: Ninguno seleccionado
Los sencillos pasos para utilizar la función Watchdog son:
• Primero tenemos que habilitar el reloj de 32.768 KHz. Para ello utilizamos el registro CLKLFCTRL. Para simplificar, usaremos un reloj sintetizado. Podemos hacer esto escribiendo 001 en Bit2:1.
• Luego tenemos que comprobar si el reloj ha arrancado o no. Podemos hacer esto marcando el Bit 6.
• Después de eso podemos escribir LSByte y luego MSByte de WDSV.
También podemos utilizar funciones proporcionadas por Nordic Library:
FUNCIONES |
PARÁMETRO DE ENTRADA |
SALIDA |
DESCRIPCIÓN |
hal_wdog_init |
valor inicial de 16 bits |
– |
Para inicializar el temporizador de vigilancia con el valor inicial |
hal_wdog_restart |
– |
– |
Para restablecer el temporizador de vigilancia para evitar el reinicio |
Escribimos código para comprender cómo funciona correctamente Watchdog.
Código fuente del proyecto
###
//Programa para
#include"reg24le1.h" // Archivo de encabezado de E/S para NRF24LE1
#include"hal_delay.h" // archivo de encabezado que contiene funciones de retardo
#include "hal_wdog.h" // biblioteca de funciones de vigilancia
// función principal
vacío principal
{
CLKLFCTRL = 0x02; // reloj de inicio 32,768
mientras(!( CLKLFCTRL & 0x40)); //esperando que comience el reloj
P0DIR = 0; //puerto0 como salida
P0 = 0xff; //puerto0 alto
retraso_ms(200); //espera 200ms
P0 = 0x00; //puerto0 bajo
hal_wdog_init(0x0200); // tiempo de espera de 4 segundos
mientras(1); // Bucle infinito
}
###
Diagramas de circuito
Diagrama de circuito: temporizador de vigilancia basado en NRF24LE1 |
 |
Vídeo del proyecto