You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

161 lines
4.8 KiB

1 year ago
1 year ago
1 year ago
1 year ago
  1. # Diseño de teclado mecánico y prueba de funcionamiento con microcontrolador MSP430
  2. Galván.A , Chávez.G , Enero 2023.
  3. ------
  4. **Abstract**
  5. 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.
  6. [TOC]
  7. ------
  8. ## **Introducción**
  9. 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.
  10. #### Lista de materiales:
  11. - 4 botones mecánicos *CPG1511*
  12. - 1 tira header macho de 5 pines (2.54 mm)
  13. - Baquela de 94.5 mm x 26 mm (aproximadamente)
  14. **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
  15. ## **Desarrollo**
  16. #### Esquemático del teclado mecánico
  17. A continuación, se muestra una imagen del circuito esquemático del teclado de botones mecánicos.
  18. [![Schematics.jpg](https://i.postimg.cc/jqkyY92N/Schematics.jpg)](https://postimg.cc/rzxDSfSF)
  19. #### PCB Layout del teclado mecánico
  20. 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.
  21. [![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)
  22. #### Teclado mecánico
  23. En seguida, se muestran imagenes del PCB terminado del teclado 1x4 con botones mecánicos.
  24. [![PCB.jpg](https://i.postimg.cc/tgMVGnCb/PCB.jpg)](https://postimg.cc/hJVG9jdZ)
  25. [![Paths.jpg](https://i.postimg.cc/Y0cGhcWy/Paths.jpg)](https://postimg.cc/vgzHNNXW)
  26. #### Código
  27. 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.
  28. ```c
  29. #include <msp430fr6989.h>
  30. char lec=0;
  31. int cont1=0,cont2=0,cont3=0,cont4=0;
  32. void main(void)
  33. {
  34. WDTCTL = WDTPW | WDTHOLD; // stop watchdog timer
  35. PM5CTL0 = 0x0000;// DESACTIVAR EL MODO DE ALTA IMPEDANCIA
  36. /*Confg. de perifericos */
  37. P1SEL0 = 0x00;
  38. P1SEL1 = 0x00; //SELECCIONAMOS FUNCION COMO I/O DIGITAL
  39. P1DIR = 0x01; //P1.0-> SALIDA P1.1-P1.7-> ENTRADAS
  40. P1REN = 0xFE;
  41. P1OUT = 0xFE;
  42. P1IE = 0x7E;
  43. P1IES = 0x00;
  44. P1IFG = 0x00;
  45. P9SEL0 = 0x00;
  46. P9SEL1 = 0x00; //SELECCIONAMOS FUNCION COMO I/O DIGITAL
  47. P9DIR = 0x80; //P9.7-> SALIDA P9.0-P9.6->ENTRADAS
  48. P9REN = 0x7f;
  49. P9OUT = 0x00;
  50. __enable_interrupt(); //también se puede usar _enable_interrupts()
  51. for(;;)
  52. {
  53. }//loop
  54. }//main
  55. //**************Interruptions**************
  56. #if defined(__TI_COMPILER_VERSION__) || defined(__IAR_SYSTEMS_ICC__)
  57. #pragma vector=PORT1_VECTOR
  58. __interrupt void inter_puerto1(void)
  59. #elif defined(__GNUC__)
  60. void __attribute__ ((interrupt(PORT1_VECTOR))) PORT1_ISR (void)
  61. #else
  62. #error Compiler not supported!
  63. #endif
  64. {
  65. lec=P1IFG;
  66. lec &= BIT3;
  67. __delay_cycles(250);
  68. if( P1IFG == BIT3){
  69. cont1++;
  70. P1OUT ^= 0x01;
  71. }
  72. lec &= BIT4;
  73. __delay_cycles(250);
  74. if( P1IFG == BIT4){
  75. cont2++;
  76. P9OUT ^= 0x80;
  77. }
  78. lec &= BIT5;
  79. __delay_cycles(250);
  80. if( P1IFG == BIT5){
  81. cont3++;
  82. P1OUT ^= 0x01;
  83. }
  84. lec &= BIT6;
  85. __delay_cycles(250);
  86. if( P1IFG == BIT6){
  87. cont4++;
  88. P9OUT ^= 0x80;
  89. }
  90. P1IFG=0x00;
  91. }
  92. ```
  93. **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.
  94. ## **Anexos**
  95. #### Microcontrolador implementado (MSP430FR6989)
  96. ![1.png](https://i.postimg.cc/3NXN4MRW/msp430fr6989.png)
  97. #### Esquemático del microcontrolador.
  98. ![2.png](https://i.postimg.cc/7LjZKPJf/esquematico-MSP430-FR6989.png)
  99. #### Salidas del microcontrolador.
  100. ![3.png](https://i.postimg.cc/wxXjkpqj/pines-de-salida.png)
  101. ## **Referencias**
  102. [1] Texas Instruments. Msp430-gcc-opensource gcc-open source compiler for msp microcontrollers, 2017.
  103. [2] Kaihua Electronics Co, LTD. CPG1511 Keyboard Switch, 2016.