|
@ -0,0 +1,153 @@ |
|
|
|
|
|
# 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. |
|
|
|
|
|
|
|
|
|
|
|
## **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,cont2,cont3,cont4; |
|
|
|
|
|
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; |
|
|
|
|
|
} |
|
|
|
|
|
``` |
|
|
|
|
|
|
|
|
|
|
|
## **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. |
|
|
|
|
|
|