- Configuración y requisitos de hardware
- Circuito de interfaz de botón pulsador y LED N76E003
- Diagrama de distribución de pines del N76E003
- Programa de control GPIO simple para N76E003
- Programación de N76E003 y verificación de salida
En nuestro tutorial anterior, usamos un programa básico de parpadeo de LED como guía para comenzar con N76E003, ya aprendimos cómo configurar el IDE de Keil y configurar el entorno para programar la unidad de microcontrolador nuvoton N76E003. Es el momento de avanzar un poco más y utilizar la interfaz GPIO básica para controlar hardware adicional. Si está interesado, también puede consultar otros tutoriales GPIO de microcontroladores que se enumeran a continuación:
- STM32 Nucleo64 con CubeMx y TrueSTUDIO - Control LED
- STM8S con control Cosmic C GPIO
- Tutorial de PIC con MPLABX LED Blink
- MSP430 con Code Composer Studio - Control LED simple
Dado que en nuestro tutorial anterior, solo usamos un LED para parpadear usando un pin IO como salida. En este tutorial, aprenderemos cómo usar otro pin IO como entrada y controlar un LED adicional. Sin perder mucho tiempo, evaluemos qué tipo de configuración de hardware necesitamos.
Configuración y requisitos de hardware
Como es necesario utilizar un interruptor como entrada, lo primero que necesitamos es un botón. También requerimos un LED adicional para ser controlado por ese botón. Aparte de estos dos, también necesitamos una resistencia para limitar la corriente del LED y una resistencia adicional para los propósitos de extracción a través del botón. Esto se demostrará con más detalle en la sección esquemática. Los componentes que requerimos -
- Un pulsador (cualquier tipo de interruptor momentáneo específicamente: interruptor táctil)
- Cualquier color del LED
- Resistencia de 4.7k para propósitos de pull-down
- 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 como se muestra a continuación.
Circuito de interfaz de botón pulsador y LED N76E003
Como podemos ver en el esquema a continuación, el LED de prueba que está dentro de la placa de desarrollo está conectado en el puerto 1.4 y un LED adicional está conectado en el puerto 1.5. La resistencia R3 se utiliza para limitar la corriente del LED.
En el pin 1.6, se conecta un pulsador llamado SW. Siempre que se presione el botón, el pin se volverá alto. De lo contrario, será bajo por la resistencia desplegable R1 de 4.7K. Puede obtener más información sobre las resistencias pull-up y pull-down si es nuevo en este concepto.
El pin también es un pin relacionado con el programa al que accede el programador. Se utiliza para enviar datos de programas. Sin embargo, veremos la razón detrás de la selección de esos pines y obtendremos información justa sobre el mapeo de pines del N76E003.
Diagrama de distribución de pines del N76E003
El diagrama de pines de N76E003 se puede ver en la siguiente imagen-
Como podemos ver, cada pin tiene múltiples funciones y se puede utilizar para diferentes propósitos. Pongamos un ejemplo. El pin 1.7 se puede utilizar como una interrupción, una entrada analógica o una operación de entrada-salida de propósito general. Por lo tanto, si se utiliza cualquier pin como pines de E / S, la funcionalidad respectiva no estará disponible.
Debido a esto, el pin 1.5 que se usa 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, debido a la disponibilidad más cercana de pines GND y VDD para una fácil conexión.
Sin embargo, en este microcontrolador de 20 pines, se pueden utilizar 18 pines como pin GPIO. El pin 2.0 se usa exclusivamente para la entrada Reset y no se puede usar como salida. Aparte de este pin, todos los pines 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. Ahora, llegar a escribir y leer un puerto GPIO es algo completamente diferente. Porque escribir en un registro de control de puerto cambia el estado de enclavamiento del puerto, mientras que leer el puerto obtiene el estado del estado lógico. Pero para leer un puerto, debe configurarse en modo de entrada.
Programa de control GPIO simple para N76E003
El programa completo utilizado en este tutorial se puede encontrar en la parte inferior de esta página, la explicación del código es la siguiente.
Establecer el pin como entrada
Primero comencemos con la entrada. Como se mencionó anteriormente, para leer el estado de un puerto, debe configurarse como entrada. Por lo tanto, como hemos seleccionado P1.6 como nuestro pin de interruptor de entrada, lo hemos indicado a través de la siguiente línea de fragmento de código.
#define SW P16
Este mismo pin debe establecerse como entrada. Por lo tanto, en la función de configuración, el pin se establece como entrada usando la siguiente línea.
configuración nula (nula) {P14_Quasi_Mode; P15_Quasi_Mode; P16_Input_Mode; }
Esta línea P16_Input_Mode; se define en el archivo de encabezado Function_define.h en la "biblioteca de inclusión BSP" que establece el bit de pin como P1M1- = SET_BIT6; P1M2 & = ~ SET_BIT6 . El SET_BIT6 también se define en el mismo archivo de encabezado como-
#define SET_BIT6 0x40
Establecer los pines como salida
Igual que el pin de entrada, el pin de salida que utiliza el LED de prueba integrado y el LED1 externo también se define en la primera sección del código con los respectivos PIN.
#define Test_LED P14 #define LED1 P15
Esos pines se configuran como una salida en la función de configuración usando las siguientes líneas.
configuración nula (nula) { P14_Quasi_Mode; // Salida P15_Quasi_Mode; // Salida P16_Input_Mode; }
Estas líneas también se definen en el archivo de encabezado Function_define.h donde establece el bit pin como P1M1 & = ~ SET_BIT4; P1M2 & = ~ SET_BIT4 . El SET_BIT6 también se define en el mismo archivo de encabezado como-
#define SET_BIT4 0x10
Bucle infinito while
Un hardware, si está conectado con la energía y funcionando perfectamente que debería dar salida continuamente, la aplicación nunca se detiene. Hace lo mismo por infinitas veces. Aquí viene la función de un bucle while infinito. La aplicación dentro del bucle while se ejecuta infinitamente.
while (1) { Test_LED = 0; sw_delay (150); Test_LED = 1; sw_delay (150); si (SW == 1) {LED1 = 0; } else {LED1 = 1; }}}
El bucle while anterior hace parpadear el led según el valor sw_delay y también verifica el estado del SW. Si se presiona el interruptor, el P1.6 será alto y, por lo tanto, cuando se presione, el estado de lectura será 1. En esta situación, por el tiempo, se presiona el interruptor y el puerto P1.6 permanece alto, El LED1 se iluminará.
Programación de N76E003 y verificación de salida
En nuestro tutorial de introducción al N76E003, ya aprendimos a programar el N76E003, así que repetiremos los mismos pasos aquí para programar nuestra placa. El código se compiló correctamente y devolvió 0 advertencias y 0 errores y parpadeó utilizando el método de parpadeo predeterminado de Keil.
Como puede ver en la imagen de arriba, nuestro LED externo se enciende cuando presiono el botón. El funcionamiento completo del proyecto se puede encontrar en el video vinculado a continuación. 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 hacer otras preguntas técnicas.