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.
AlbertoGV 137f3846f7 List of used materials 1 year ago
designFiles Test code and mechanical keyboard design files 1 year ago
main.c Test code and mechanical keyboard design files 1 year ago
readme.md List of used materials 1 year ago

readme.md

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

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

Teclado mecánico

En seguida, se muestran imagenes del PCB terminado del teclado 1x4 con botones mecánicos.

PCB.jpg

Paths.jpg

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.

#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

Esquemático del microcontrolador.

2.png

Salidas del microcontrolador.

3.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.