- Configuración y requisitos de hardware
- Diagrama de circuito para interfaz LED con Nuvoton N76E003
- Pines del temporizador en Nuvoton N76E003
- Registros de temporizador en Nuvoton N76E003
- Tipos de tiempos en Nuvoton N76E003
- Programación del microcontrolador Nuvoton N76E003 para temporizadores
- Código intermitente y salida de verificación para la funcionalidad del temporizador
En nuestros tutoriales anteriores del microcontrolador Nuvoton, usamos un programa básico de parpadeo de LED como guía de inicio y también utilizamos GPIO como entrada para conectar un interruptor táctil. Con ese tutorial, somos plenamente conscientes de cómo configurar el proyecto Keil y configurar el entorno para programar el microcontrolador N76E003 Nuvoton. Es hora de usar un periférico interno de la unidad del microcontrolador y avanzar un poco más usando el temporizador incorporado del N76E003.
En nuestro tutorial anterior, solo usamos un retraso de software para hacer parpadear un LED, por lo que en este tutorial, aprenderemos cómo usar la función de retraso del temporizador, así como el Timer ISR (Rutina de servicio de interrupción) y hacer parpadear dos LED individuales. También puede consultar el tutorial de temporizador de Arduino y el tutorial de temporizador de PIC para comprobar cómo utilizar los temporizadores con otros microcontroladores. Sin perder mucho tiempo, evaluemos qué tipo de configuración de hardware necesitamos.
Configuración y requisitos de hardware
Como el requisito de este proyecto es aprender el temporizador ISR y la función de retardo del temporizador, utilizaremos dos LED, de los cuales uno parpadeará utilizando el retardo del temporizador en el ciclo while y otro parpadeará dentro de la función ISR.
Dado que hay un LED disponible en la placa de desarrollo N76E003, este proyecto requiere un LED adicional y la resistencia limitadora de corriente para limitar la corriente del LED. Los componentes que requerimos -
- Cualquier color del LED
- Resistencia 100R
Sin mencionar que, además de los componentes anteriores, necesitamos una placa de desarrollo basada en microcontroladores N76E003, así como el programador Nu-Link. Además, la placa de pruebas y los cables de conexión también son necesarios para conectar todos los componentes.
Diagrama de circuito para interfaz LED con Nuvoton N76E003
Como podemos ver en el siguiente esquema, el Test LED está disponible dentro de la placa de desarrollo y está conectado en el puerto 1.4. Un LED adicional está conectado al puerto 1.5. La resistencia R3 se utiliza para limitar la corriente del LED. En el extremo izquierdo, se muestra la conexión de la interfaz de programación.
Pines del temporizador en Nuvoton N76E003
El diagrama de pines de N76E003 se puede ver en la siguiente imagen-
Como podemos ver, cada pin tiene especificaciones diferentes y cada pin se puede utilizar para múltiples propósitos. Sin embargo, el pin 1.5, que se utiliza como pin de salida de LED, perderá el PWM y otras funciones. Pero eso no es un problema ya que no se requiere otra funcionalidad para este proyecto.
La razón detrás de elegir el pin 1.5 como salida y el pin 1.6 como entrada se debe a la disponibilidad más cercana de los pines GND y VDD para una fácil conexión. Sin embargo, en este microcontrolador de 20 pines, 18 pines se pueden usar como un pin GPIO y cualquier otro pin GPIO se puede usar para fines relacionados con la salida y la entrada, excepto el pin 2.0 que se usa exclusivamente para la entrada de reinicio y no se puede usar como salida. Todos los pines GPIO se pueden configurar en el modo que se describe a continuación.
Según la hoja de datos, PxM1.ny PxM2.n son dos registros que se utilizan para determinar la operación de control del puerto de E / S. Dado que estamos usando LED y requerimos el pin como pines de salida generales, usaremos el modo cuasi bidireccional para los pines.
Registros de temporizador en Nuvoton N76E003
El temporizador es algo importante para cualquier unidad de microcontrolador. El microcontrolador viene con un periférico temporizador incorporado. El nuvoton N76E003 también viene con periféricos de temporizador de 16 bits. Sin embargo, cada temporizador se usa para diferentes propósitos, y antes de usar cualquier interfaz de temporizador, es importante conocer el temporizador.
Tipos de tiempos en Nuvoton N76E003
Temporizador 0 y 1:
Estos dos temporizadores timer0 y timer1 son idénticos a los temporizadores 8051. Estos dos temporizadores se pueden utilizar como temporizador general o como contadores. Estos dos temporizadores funcionan en cuatro modos. En el Modo 0, esos temporizadores funcionarán en el modo Temporizador / Contador de 13 bits. En el Modo 1, el bit de resolución de esos dos temporizadores será de 16 bits. En el Modo 2, los temporizadores se configuran como un modo de recarga automática con una resolución de 8 bits. En el modo 3, el temporizador 1 se detiene y el temporizador 0 se puede utilizar como contador y temporizador al mismo tiempo.
De estos cuatro modos, el Modo 1 se utiliza en la mayoría de los casos. Estos dos temporizadores pueden utilizar Fsys (frecuencia del sistema) en modo fijo o preescalado (Fys / 12). También se puede sincronizar desde una fuente de reloj externa.
Temporizador 2:
El temporizador 2 también es un temporizador de 16 bits que se utiliza principalmente para la captura de formas de onda. También usa el reloj del sistema y se puede usar en diferentes aplicaciones dividiendo la frecuencia del reloj usando 8 escalas diferentes. También se puede utilizar en modo de comparación o para generar PWM.
Al igual que el temporizador 0 y el temporizador 1, el temporizador 2 se puede utilizar en el modo de recarga automática.
Temporizador 3:
El temporizador 3 también se utiliza como temporizador de 16 bits y se utiliza como fuente de reloj de velocidad en baudios para la UART. También tiene una función de recarga automática. Es importante utilizar este temporizador solo para comunicación en serie (UART) si la aplicación requiere comunicación UART. Es aconsejable no utilizar este temporizador para otros fines en tal caso debido al proceso conflictivo en la configuración del temporizador.
Temporizador de vigilancia:
El temporizador de vigilancia se puede utilizar como un temporizador estándar de 6 bits, pero no se utiliza para este propósito. El uso del temporizador Watchdog como temporizador de propósito general es aplicable para aplicaciones de bajo consumo de energía donde el microcontrolador permanece principalmente en modo inactivo.
Watchdog Timer, como su nombre indica, siempre comprueba si el microcontrolador funciona correctamente o no. En el caso de un microcontrolador suspendido o detenido, WDT (Watchdog Timer) reinicia el microcontrolador automáticamente, lo que asegura que el microcontrolador funcione en un flujo de código continuo sin atascarse, colgarse o en situaciones de parada.
Temporizador de auto despertar:
Este es otro periférico temporizador que sirve para un proceso de temporización dedicado al igual que un temporizador de vigilancia. Este temporizador, activa el sistema periódicamente cuando el microcontrolador está funcionando en modo de bajo consumo.
Este periférico temporizador se puede utilizar internamente o mediante periféricos externos para reactivar el microcontrolador del modo de suspensión. Para este proyecto, usaremos Timer 1 y Timer 2.
Programación del microcontrolador Nuvoton N76E003 para temporizadores
Configuración de los pines como salida:
Comencemos primero con la sección de salida. Estamos usando dos LED, uno es el LED integrado, llamado Test, y está conectado con el puerto P1.4 y un LED externo conectado con el pin P1.5.
Por lo tanto, estos dos pines están configurados como un pin de salida para conectar esos dos LED utilizando los siguientes fragmentos de código.
#define Test_LED P14 #define LED1 P15
Estos dos pines se establecen como pin cuasi bidireccional en la función de configuración.
configuración nula (nula) {P14_Quasi_Mode; P15_Quasi_Mode; }
Configuración de la función del temporizador:
En la función de configuración, es necesario configurar el temporizador 2 para obtener la salida deseada. Para esto, configuraremos el registro T2MOD con un factor de división de reloj de 1/128 y lo usaremos en un modo de retardo de recarga automática. Aquí está la descripción general del registro T2MOD:
Los bits 4,5 y 6 del registro T2MOD establecen el divisor de reloj del temporizador 2 y el bit 7 establece el modo de recarga automática. Esto se hace usando la siguiente línea:
TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode;
Estas dos líneas se definen en el archivo Function_define.h como
#define TIMER2_DIV_128 T2MOD- = 0x50; T2MOD & = 0xDF #define TIMER2_Auto_Reload_Delay_Mode T2CON & = ~ SET_BIT0; T2MOD- = SET_BIT7; T2MOD- = SET_BIT3
Ahora, estas líneas establecen el valor de tiempo requerido para el Timer 2 ISR.
RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8;
Que se define con más detalle en el archivo Function_define.h como-
TIMER_DIV128_VALUE_100ms 65536-12500 // 12500 * 128/16000000 = 100 ms
Entonces, 16000000 es la frecuencia de cristal de 16 Mhz que está configurando el retardo de tiempo de 100 ms.
Debajo de dos líneas se vaciarán los bytes Timer 2 Low y High.
TL2 = 0; TH2 = 0;
Finalmente, el código siguiente habilitará la interrupción del temporizador 2 e iniciará el temporizador 2.
set_ET2; // Habilita la interrupción Timer2 set_EA; set_TR2; // Timer2 ejecutar
La función de configuración completa se puede ver en los siguientes códigos:
configuración nula (nula) { P14_Quasi_Mode; P15_Quasi_Mode; TIMER2_DIV_128; TIMER2_Auto_Reload_Delay_Mode; RCMP2L = TIMER_DIV128_VALUE_100ms; RCMP2H = TIMER_DIV128_VALUE_100ms >> 8; TL2 = 0; TH2 = 0; set_ET2; // Habilita la interrupción Timer2 set_EA; set_TR2; // Ejecución del temporizador2 }
Función ISR del temporizador 2:
La función Timer 2 ISR se puede ver en el siguiente código.
void Timer2_ISR (void) interrupción 5 { clr_TF2; // Borrar indicador de interrupción del temporizador2 LED1 = ~ LED1; // Interruptor LED1, conectado en P1.5; }
Código intermitente y salida de verificación para la funcionalidad del temporizador
El código (dado a continuación) cuando se compiló devolvió 0 advertencia y 0 errores y lo flasheé usando el método de flasheo predeterminado en Keil. Después de parpadear, los LED parpadearon con un retardo de temporizador definido según lo programado.
Vea el video que se muestra a continuación para obtener una demostración completa de cómo funciona la placa para este código. Espero que hayas disfrutado del tutorial y hayas aprendido algo útil. Si tienes alguna pregunta, déjala en la sección de comentarios a continuación. También puede utilizar nuestros foros para publicar otras preguntas técnicas.