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.

153 lines
4.3 KiB

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