|
|
- # 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 <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.
-
- ## **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.
-
|