Galván.A , Chávez.G , Enero 2023.
Abstract
This document aims to show how a mechanical keybord 1x4 was made using UPVERTER software and how it was tested with an easy program using the MSP430FR6989 microcontroller target device and Code Composer Studio.
[TOC]
Se realizó el diseño de un teclado 1x4 con botones mecánicos con la finalidad de que este sea un medio más cómodo para el usuario para interactuar con otros dispositivos e introducir información o comandos para ejecutar una tarea específica. Para el diseño, se empleó el software libre UPVERTER el cuál permite realizar modelos de PCBs a partir del diseño de un circuito. En este caso, también se tuvo que diseñar el botón mecánico, debido a su forma y medidas específicas.
Nota: Los botones mecánicos fueron adquiridos en la tienda en línea que se muestra en la siguiente liga: https://www.digikey.com.mx/es/products/detail/adafruit-industries-llc/5123/14617350
A continuación, se muestra una imagen del circuito esquemático del teclado de botones mecánicos.
Este diseño permite en la programación implementar detección de filas y columnas para saber qué tecla fue presionada así como tomar cada botón por separado con una tierra común y detectar la tecla por medio de interrupciones. A continuación, se aprecia el diseño representativo del lugar de cada componente en el PCB así como las pistas del mismo.
En seguida, se muestran imagenes del PCB terminado del teclado 1x4 con botones mecánicos.
En seguida, se muestra el código usado para probar el teclado matricial; para ello, se empleó el microcontrolador MSP430FR6989 y el programa Code Composer Studio para desarrollarlo. El programa consiste en el encendido y apagado de los LEDs integrados del microcontrolador según la tecla que se presione.
#include <msp430fr6989.h>
char lec=0;
int cont1=0,cont2=0,cont3=0,cont4=0;
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
PM5CTL0 = 0x0000;// DESACTIVAR EL MODO DE ALTA IMPEDANCIA
/*Confg. de perifericos */
P1SEL0 = 0x00;
P1SEL1 = 0x00; //SELECCIONAMOS FUNCION COMO I/O DIGITAL
P1DIR = 0x01; //P1.0-> SALIDA P1.1-P1.7-> ENTRADAS
P1REN = 0xFE;
P1OUT = 0xFE;
P1IE = 0x7E;
P1IES = 0x00;
P1IFG = 0x00;
P9SEL0 = 0x00;
P9SEL1 = 0x00; //SELECCIONAMOS FUNCION COMO I/O DIGITAL
P9DIR = 0x80; //P9.7-> SALIDA P9.0-P9.6->ENTRADAS
P9REN = 0x7f;
P9OUT = 0x00;
__enable_interrupt(); //también se puede usar _enable_interrupts()
for(;;)
{
}//loop
}//main
//**************Interruptions**************
#if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
#pragma vector=PORT1_VECTOR
__interrupt void inter_puerto1(void)
#elif defined(__GNUC__)
void __attribute__ ((interrupt(PORT1_VECTOR))) PORT1_ISR (void)
#else
#error Compiler not supported!
#endif
{
lec=P1IFG;
lec &= BIT3;
__delay_cycles(250);
if( P1IFG == BIT3){
cont1++;
P1OUT ^= 0x01;
}
lec &= BIT4;
__delay_cycles(250);
if( P1IFG == BIT4){
cont2++;
P9OUT ^= 0x80;
}
lec &= BIT5;
__delay_cycles(250);
if( P1IFG == BIT5){
cont3++;
P1OUT ^= 0x01;
}
lec &= BIT6;
__delay_cycles(250);
if( P1IFG == BIT6){
cont4++;
P9OUT ^= 0x80;
}
P1IFG=0x00;
}
Nota: Se agregaron delays de 250 ms para evitar el efecto de rebote de los botones cuando son presionados; además se añadieron contadores para obtener el número de veces que se presiona el botón.
[1] Texas Instruments. Msp430-gcc-opensource gcc-open source compiler for msp microcontrollers, 2017.
[2] Kaihua Electronics Co, LTD. CPG1511 Keyboard Switch, 2016.