En primer lugar quiero pedir disculpas a todo el mundo que me sigue por haber tardado tanto tiempo en publicar un nuevo post. Pero por diversos temas no he podido. Bueno es que me he puesto por mi cuenta, y claro entre unas cosas y otras no he tenido mucho tiempo para escribir, y menos para estudiar temas de visión. Bueno aunque en este post vamos a tratar un tema electrónico, el blog seguirá dando un trato especial a la visión, ya que es un tema del que quiero aprender todo lo que pueda.
Bueno sin más dilación voy a contar de lo que trata este tema. En este caso he hecho el control de un teclado matricial, bueno el código del pic esta hecho para detectar la tecla cero, para el resto de los casos es igual.
Para realizar el control del teclado he utilizado un PIC, en mi caso el 24FJ64GA002. El datasheet de este PIC lo podéis encontrar aquí. En la siguiente figura se ve el esquema del PIC con el significado de cada una de las 24 patitas, lo he sacado del datasheet.
El esquema electrónico que he realizado es el siguiente.
En este esquema podemos ver el circuito de reset que está formado por dos resistencias R1 y R2, de 10 k y 100 ohmios respectivamente, este circuito nos mantiene a uno la pata MCLR que es la que resetearía el PIC si se pone a cero. También podemos ver que hemos puesto condensadores C1 y C2 en las patas de alimentación de 100nF respectivamente, estos condensadores sirven para enviar a tierra todas las corrientes parásitas, ruidos, ect. En el datasheet también dice que hay que poner un condensador de 10 micro faradios entre las patas 19 y 20, exactamente no se que hace pero lo dice el datasheet. También podemos ver nuestro circuito que hace de reloj con un cristal de cuarzo y dos condensadores de 30 pF.
Para controlar el teclado matricial hemos conectado 4 patas el pic a las columnas y 4 patas del pic a las filas del teclado matricial. Las filas las hemos conectado también a través de unas resistencias a uno (VDD) de esta forma cuando pongamos una fila columna cero y pulsemos una tecla conectada a esa fila la columna correspondiente pasará a ser cero y así detectaremos la pulsación.
El código del PIC es el siguiente, programado en C.
#include <p24FJ64GA002.h>
#define FCY 40000000UL
#include <libpic30.h>
_CONFIG2(FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_EC );
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_ON & COE_ON &ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
int main(int argc, char *argv[])
{
TRISB=0x83FF;
LATBbits.LATB14=0;
LATBbits.LATB13=0;
LATBbits.LATB12=1;
LATBbits.LATB11=1;
LATBbits.LATB10=1;
while(1)
{
if (PORTBbits.RB7==0)
{
LATBbits.LATB14=1;
// __delay_ms(500);
}
else
{
LATBbits.LATB14=0;
}
// LATBbits.LATB14=1;
// __delay_ms(500);
// LATBbits.LATB14=0;
// __delay_ms(500);
}
}
Como podemos ver ponemos a uno todas las filas menos una y evaluamos el valor de la columna que lleva la tecla cero si esa columna está a uno entonces no ha sido pulsado si está a cero ha sido pulsado, la tecla cero.
#define FCY 40000000UL
#include <libpic30.h>
_CONFIG2(FNOSC_PRI & FCKSM_CSDCMD & POSCMOD_EC );
_CONFIG1(JTAGEN_OFF & GCP_OFF & GWRP_OFF & BKBUG_ON & COE_ON &ICS_PGx1 & FWDTEN_OFF & WINDIS_OFF & FWPSA_PR128 & WDTPS_PS32768);
int main(int argc, char *argv[])
{
TRISB=0x83FF;
LATBbits.LATB14=0;
LATBbits.LATB13=0;
LATBbits.LATB12=1;
LATBbits.LATB11=1;
LATBbits.LATB10=1;
while(1)
{
if (PORTBbits.RB7==0)
{
LATBbits.LATB14=1;
// __delay_ms(500);
}
else
{
LATBbits.LATB14=0;
}
// LATBbits.LATB14=1;
// __delay_ms(500);
// LATBbits.LATB14=0;
// __delay_ms(500);
}
}
Como podemos ver ponemos a uno todas las filas menos una y evaluamos el valor de la columna que lleva la tecla cero si esa columna está a uno entonces no ha sido pulsado si está a cero ha sido pulsado, la tecla cero.
Para controlar todo el teclado será cuestión de hacer un barrido por todas las filas y columnas y así detectar que tecla se ha pulsado. Esto lo dejo para vosotros, más adelante publicaré el código completo para controlar todo el teclado.