Autor Tema: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC  (Leído 37101 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5343
    • Picmania by Redraven
Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« en: 10 de Octubre de 2007, 16:34:39 »
Objetivo: Leer un teclado matricial de 4 x 4 teclas mediante un único pin del PIC.

Conceptos involucrados: Suma de resistencias en serie, divisor de tensión y conversión Analógico-Digital del PIC.

Necesitamos: Un teclado matricial de 4 x 4 teclas, 9 resistencias y un PIC.

Antecedentes: En el documento "Hardware Techniques for PICmicro Microcontrollers" AN234 de Microchip se describe someramente lo que vamos a intenta realizar. De ahí he sacado la idea y a continuación os describiré lo que he desarrollado a partir de ella.

Desarrollo: Como todos sabéis, y si no lo sabéis este es un buen momento para aprenderlo, un teclado matricial 4 x 4 es un artilugio compuesto por 4 x 4 teclas con 4 + 4 lineas que conectan entre si las teclas, una linea por cada fila de teclas mas una linea por cada columna de teclas. Al ser pulsada una cualquiera de ellas une entre sí una de las lineas, la de su columna, con otra de ellas, la de su fila. Así al pulsar una tecla quedan unidas solo dos de las ocho que tiene.

Tradicionalmente se ha conectado un teclado de estos a un PIC usando 8 pines de éste, 4 para las filas y 4 para las columnas y se leían poniendo en alto las filas, o las columnas, y leyendo las columnas, o las filas, para detectar qué tecla se había pulsado. Esta técnica es muy fácil de implementar pero tiene el costo de usar muchos pines del PIC.

Lo que aquí vamos a desarrollar es la idea de poder hacer esto mismo pero haciendo uso de un solo pin del PIC, pero que tenga la especial función de Conversor Analógico a Digital. Para ello tenemos que conseguir que al pulsar cada una de las teclas obtengamos un voltaje distinto en una única línea. Leyendo este voltaje con el Conversor AD del PIC podemos llegar a saber qué tecla es la que se ha pulsado.

Una imagen vale mas que mil palabras:



Como veis en ella cada círculo en la rejilla central del teclado del dibujo representa una de las teclas, que al pulsar une una de las resistencias de R1 a R4 conectadas a VDD con otra de R5 a R8 conectadas al PIC. Así si pulsamos en la tecla situada en la esquina superior izquierda tendremos que VDD le llega al PIC tras atravesar R1+R5. Si por el contrario pulsamos la tecla inferior derecha la corriente nos llegará a través de la unión entre R4+R8. Siempre que pulsemos una tecla cualquiera obtendremos un voltaje de caída entre la suma de dos resistencias Rcolumna+Rfila

Otro detalle a tener en cuenta es que si no pulsamos ninguna tecla nuestro pin del PIC estaría conectado a nada, la linea que une el pic con las resistencias R5 a R8 y tras ella el vacío. Esto podría, y sería con total seguridad, una verdadera antena que recogería todo lo que pasase cerca de allí, dándonos todo tipo de lecturas falsas mientras no pulsásemos ninguna tecla. Para evitar ese efecto colocamos R9 que mantendrá el pin del conversor conectado a GND mientras nos pulsemos nada sobre el teclado.

Pero esta configuración es lo que conocemos como un Divisor de Tensión en la que tenemos una resistencia conectada a VDD y otra a GND y nosotros tomamos el valor del voltaje en la unión que hay entre ellas.



Este divisor de tensión en el que tenemos un Vin o voltaje de entrada y un Vout o voltaje de salida tras él, que es perfectamente calculable mediante la fórmula que aparece a la derecha.
 
Como vemos en esta configuración lo que llamamos aquí Rtop es lo que en nuestro teclado hemos llamado Rcolumna+Rfila o sea la suma de las dos resistencias correspondientes al pulsar una tecla en él. Y Rbottom es nuestra R9 del teclado.

La gran falta del documento de Microchip es que no nos aporta ni valores de R1 a R9, ni comportamiento aproximado de cómo podríamos elegir dichos valores. Pero con lo que hemos visto hasta aquí estamos en condiciones de poder calcular con bastante precisión el comportamiento de nuestro circuito, sabiendo que Rtop es Rc+Rf y que VDD es 5V podemos concluir que Vout = R9 / R9+Rc+Rf * 5V y así tendremos un valor de Vout para cada pareja de resistencias Rc+Rf.

Con esta información me he construido una tabla Excel en la que he puesto primero la tabla de resistencias de columnas y filas y las distintas sumas de cada una de ellas. Despues otra con los distintos voltajes que se generan en el divisor de tensión con cada una de las parejas anteriores. Y por último otra tabla en la que hago corresponder cada uno de estos voltajes con el valor de la conversión AD del PIC con precisión de 10 bits (1024 -> 5V lo que Vout es a X)

Jugando con las combinaciones entre valores de unas y otras resistencias he llegado a obtener uno valores que veo correctos.

Los resultados:


Nota1

Como podéis ver tenemos abajo los valores que vamos a obtener en la conversión AD para cada tecla pulsada. Son valores razonablemente separados unos de otros y que nos pueden permitir leer nuestro teclado con un único pin del PIC (con AD) que es lo que queríamos hacer.

Conclusión: R1=0, R2=470R, R3=1K, R4=2K2, R5=220R, R6=330R, R7=470R, R8=560R y R9=1K2 con VDD a 5V Nota2. Y con esto completamos el documento de Microchip poniéndole valores a lo propuesto por los amables señores de nuestro proveedor favorito.   :mrgreen:

Ea, mañana más.

Nota1 Teclado_Resistivo_CAD.xls
Nota2 Todas las resistencias son Comerciales
 
« Última modificación: 10 de Abril de 2009, 05:27:55 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado beatAurex1

  • PIC12
  • **
  • Mensajes: 78
    • Proyectos de Ingeniera -Control-Electrónica y desarrollo embebido.
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #1 en: 10 de Octubre de 2007, 18:15:04 »
Felicidadesss..Super tu articulo es ser un picmaniaco

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3471
    • Mensajes de la Virgen María
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #2 en: 10 de Octubre de 2007, 18:27:01 »
Felicitaciones RedPic. Está espectacular tu artículo. Nos ahorraste 7 pines, y lo mejor, es que se puede llegar a ampliar sin necesidad de gastar otros pines.

Saludos.  :-/ :-/
Él dijo: "destruyan a la Iglesia y yo la levantaré en tres días". Con esto definió que la Iglesia, somos nosotros; el cuerpo y alma, y no el edificio o templo.
-"Ámense los unos a los otros como yo los he amado" Nuestro Señor Dios hecho hombre: Jesús.
-Él, fue a la cruz, pagó nuestro pecado con un dolor increible siendo inocente de lo que lo acusaban, para salvarnos.

-Mi propio Foro de Meteorología
www.meteorologiafacil.com.ar/foros/index.php

-Web
www.meteorologiafacil.com.ar

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5102
    • uControl
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #3 en: 10 de Octubre de 2007, 19:45:57 »
Buenisimo Diego!!!

Me late que voy a aprender a usar el ADC en CCS.....en breve, gracias a este ejemplo :)

Un abrazo.  :mrgreen:
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #4 en: 11 de Octubre de 2007, 04:12:58 »
saludos, muy buen trabajo, felicitaciones, creo haber deducido algo asi para digamos solamente una columna del teclado, y he hecho los calculos para 4, 3 y 2 V y me han salido esos valores de resistencia; ahora cuando pruebo el circuito independientemente sale correctamente los valores de tensión, pero si lo llevo a la entrada analogica del microcontrolador (especificamente al RA0 del 16f877a) los valores de tension ya no son los que calcule (son casi cero varian entre 0.8 0.6 V), por que sucede eso, esto en cuanto a simulacion, no he probado fisicamente, ya que primero qeuiro simular, uso proteus 7.1 sp4.

aca mi diagrama, donde esta el multimetro va a la entrada RA0:



estan correctas mis resistencias, o que error tengo?
« Última modificación: 11 de Octubre de 2007, 04:18:46 por Cryn »
.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17429
    • MicroPIC
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #5 en: 11 de Octubre de 2007, 04:25:45 »
¿Es que has soñado conmigo?  :lol:

Gestiona un teclado matricial con un sólo pin
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado Cryn

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 4169
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #6 en: 11 de Octubre de 2007, 04:30:36 »
crees que haya cometido algun error nocturno?? porque algo similar he visto en tu teclado y pues en mi simulacion no me funciona, ahora me he quedado sin fuente y no puedo armarlo y ver is es un problema del simulador que talvez lo sea, pero si no lo es sabes cual podria ser el error para que conectado eso al micro ya no funcione en los niveles de tension que he calculado??
.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17429
    • MicroPIC
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #7 en: 11 de Octubre de 2007, 05:21:16 »
Asegúrate que la tensión de alimentación es estable y de 5V. Y ponle un condensador a la entrada del ADC que pueda filtrar los ruidos.
No debería variar tanto.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5343
    • Picmania by Redraven
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #8 en: 11 de Octubre de 2007, 05:29:41 »
¿Es que has soñado conmigo?  :lol:

Gestiona un teclado matricial con un sólo pin

La verdad es que no, pero parece que seguimos caminos paralelos en algunos casos ...
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7779
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #9 en: 11 de Octubre de 2007, 08:20:23 »
Si bien el creador del hilo es Diego, hay que reconocer el trabajo de Manolo... :mrgreen:

La pregunta es para ambos:

Aunque se que es casi un imposible en los cortos tiempos que maneja un PIC, puede este sistema detectar una doble pulsacion??

Ejemplo a mi pregunta:
Necesito detectar si se pulsan a la vez la tecla F1 y el numero 7.

Puede hacer esa deteccion este sistema, y darme un resultado diferenciado respecto a una pulsacion estandar??

Gracias desde ya a los dos Maestros por la respuesta !!! :-/ :-/
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 17429
    • MicroPIC
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #10 en: 11 de Octubre de 2007, 08:52:25 »
Habría que hacer muchos cálculos para calcular cuál sería la lectura en cada combinación, ya que entrarían en juego resistencias en paralelo y en serie.
Es probable que exista un conjunto de valores de resistencias que permitan el mayor número de combinaciones diferentes, pero la verdad es que veo improbable que no se repitan.
Y ya si lo que buscas es leer tres pulsaciones simultáneas todavía lo complicas más.
Realmente mis conocimientos de matemáticas no llegan; quizás alguien pueda sacar un modelo matemático que lo calcule.

Luego está la precisión del ADC, pero esa es otra guerra.
Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5343
    • Picmania by Redraven
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #11 en: 11 de Octubre de 2007, 09:26:56 »
El sistema que tengo pensado no permite teclas simultáneas. Yo pretendo implementar un barrido de lecturas AD durante un tiempo de pulsación de tecla de algunos milisegundos, son realmente rapidísimas y se leen muchas veces en ese tiempo, y obtener la media de todas ellas. El valor con el que voy a comparar no es el de una conversión matemática de un valor de voltaje definido, sino de una distribución estadística alrededor de ese valor. Ya os pondré el código de muestreo que implemente.

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5343
    • Picmania by Redraven
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #12 en: 11 de Octubre de 2007, 09:59:37 »
Otra posibilidad es poner un Puente de Wheatstone en lugar del simple divisor de tensión. Así podemos medir con la máxima precisión que deseemos ....





En lugar de Rx pondríamos nuestro teclado.

Puente de Wheatstone
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7779
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #13 en: 11 de Octubre de 2007, 10:52:52 »
Esa esta muy buena Diego!! :-/
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Chrisbaf

  • PIC16
  • ***
  • Mensajes: 175
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #14 en: 11 de Octubre de 2007, 13:57:21 »
excelente aporte  :)