# Diseño de teclado mecánico y prueba de funcionamiento con microcontrolador MSP430 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] ------ ## **Introducción** 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. #### Lista de materiales: - 4 botones mecánicos *CPG1511* - 1 tira header macho de 5 pines (2.54 mm) - Baquela de 94.5 mm x 26 mm (aproximadamente) **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 ## **Desarrollo** #### Esquemático del teclado mecánico A continuación, se muestra una imagen del circuito esquemático del teclado de botones mecánicos. [![Schematics.jpg](https://i.postimg.cc/jqkyY92N/Schematics.jpg)](https://postimg.cc/rzxDSfSF) #### PCB Layout del teclado mecánico 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. [![Whats-App-Image-2023-01-16-at-5-57-06-PM.jpg](https://i.postimg.cc/3N3fMqxz/Whats-App-Image-2023-01-16-at-5-57-06-PM.jpg)](https://postimg.cc/DJYPLBsc) #### Teclado mecánico En seguida, se muestran imagenes del PCB terminado del teclado 1x4 con botones mecánicos. [![PCB.jpg](https://i.postimg.cc/tgMVGnCb/PCB.jpg)](https://postimg.cc/hJVG9jdZ) [![Paths.jpg](https://i.postimg.cc/Y0cGhcWy/Paths.jpg)](https://postimg.cc/vgzHNNXW) #### Código 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. ```c #include 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. ## **Anexos** #### Microcontrolador implementado (MSP430FR6989) ![1.png](https://i.postimg.cc/3NXN4MRW/msp430fr6989.png) #### Esquemático del microcontrolador. ![2.png](https://i.postimg.cc/7LjZKPJf/esquematico-MSP430-FR6989.png) #### Salidas del microcontrolador. ![3.png](https://i.postimg.cc/wxXjkpqj/pines-de-salida.png) ## **Referencias** [1] Texas Instruments. Msp430-gcc-opensource gcc-open source compiler for msp microcontrollers, 2017. [2] Kaihua Electronics Co, LTD. CPG1511 Keyboard Switch, 2016.