TODOPIC
Bienvenido(a), Visitante. Por favor, ingresa o regístrate.
¿Perdiste tu email de activación?
26 de Octubre de 2014, 03:58:15

Ingresar con nombre de usuario, contraseña y duración de la sesión
Buscar:     Búsqueda Avanzada
350320 Mensajes en 39301 Temas por 41054 Usuarios
Último usuario: chrystopher
* Inicio Ayuda Buscar Calendario Ingresar Registrarse
Buscar en TodoPIC
+  TODOPIC
|-+  Microcontroladores PIC
| |-+  Todo en microcontroladores PIC (Moderadores: marmatar, maunix, MGLSOFT, Modulay, pocher, Sasián, Suky)
| | |-+  Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
0 Usuarios y 1 Visitante están viendo este tema. « anterior próximo »
Páginas: [1] 2 3 Marcar como favorito Imprimir
Autor Tema: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC  (Leído 26693 veces)
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5211



WWW
« : 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.   Mr. Green

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 » En línea

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

Sexo: Masculino
Mexico Mexico

Mensajes: 78

Aprendiendo a Dormir en el foro :P


WWW
« Respuesta #1 : 10 de Octubre de 2007, 18:15:04 »

Felicidadesss..Super tu articulo es ser un picmaniaco
En línea
Leon Pic
Colaborador
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 3382


Cumuloninbus


WWW
« Respuesta #2 : 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.  rebotando rebotando
En línea

É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
aitopes
Moderadores
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5102


Ariel Palazzesi www.ucontrol.com.ar


WWW
« Respuesta #3 : 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 Smile

Un abrazo.  Mr. Green
En línea

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
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #4 : 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 » En línea

.
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 17007



WWW
« Respuesta #5 : 11 de Octubre de 2007, 04:25:45 »

¿Es que has soñado conmigo?  Laughing

Gestiona un teclado matricial con un sólo pin
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
Cryn
Colaborador
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Bolivia Bolivia

Mensajes: 4170


ya no te extraño =p


« Respuesta #6 : 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??
En línea

.
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 17007



WWW
« Respuesta #7 : 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.
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5211



WWW
« Respuesta #8 : 11 de Octubre de 2007, 05:29:41 »

¿Es que has soñado conmigo?  Laughing

Gestiona un teclado matricial con un sólo pin

La verdad es que no, pero parece que seguimos caminos paralelos en algunos casos ...
En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
MGLSOFT
Moderador Local
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7535


MGLSOFT


« Respuesta #9 : 11 de Octubre de 2007, 08:20:23 »

Si bien el creador del hilo es Diego, hay que reconocer el trabajo de Manolo... Mr. Green

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 !!! rebotando rebotando
En línea

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 17007



WWW
« Respuesta #10 : 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.
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5211



WWW
« Respuesta #11 : 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.

En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5211



WWW
« Respuesta #12 : 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
En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
MGLSOFT
Moderador Local
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 7535


MGLSOFT


« Respuesta #13 : 11 de Octubre de 2007, 10:52:52 »

Esa esta muy buena Diego!! rebotando
En línea

Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.
Chrisbaf
PIC16
***
Desconectado Desconectado

Sexo: Masculino
Guatemala Guatemala

Mensajes: 175


« Respuesta #14 : 11 de Octubre de 2007, 13:57:21 »

excelente aporte  Smile
En línea
Leon Pic
Colaborador
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Argentina Argentina

Mensajes: 3382


Cumuloninbus


WWW
« Respuesta #15 : 11 de Octubre de 2007, 19:58:52 »

¿Es que has soñado conmigo?  Laughing

Gestiona un teclado matricial con un sólo pin

Hola Nocturno. Ya me parecía conocido el método, pero no lo recordaba. Me lo has enviado a mi e-mail hace dos o tres meses atrás.

De todas maneras no quiero desmoralizar a RedPic, Todo lo contrario. Le quiero dar ánimo para que continue y lo mejore al máximo.

Saludos.  rebotando rebotando
En línea

É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
LABmouse
Moderadores
DsPIC30
*****
Desconectado Desconectado

Sexo: Masculino
Colombia Colombia

Mensajes: 3542



WWW
« Respuesta #16 : 11 de Octubre de 2007, 20:15:57 »

GRACIAS REDPIC!!!! Gracias por compartirlo con todos en el foro.. Esta muy muy bueno  rebotando
En línea

RedPic
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Tibet Tibet

Mensajes: 5211



WWW
« Respuesta #17 : 12 de Octubre de 2007, 08:14:29 »


De todas maneras no quiero desmoralizar a RedPic ...


Si yo me desmoralizase cada vez que descubro que Manuelo Nocturno ha realizado lo mismo que yo pero antes y mejor estaría ya sumido en la mas absoluta de las depresiones, porque constantemente voy descubriendo cosas que ya él las ha dado por cocinadas, deglutidas y eyectadas tiempo ha.  No, no me afecta.

Sólo los jóvenes creen que lo que acaban de descubrir es la primera vez que se descubre, los viejos sabemos que éste es solo un viaje personal que desde antes otros muchos han realizado. Mr. Green Mr. Green Mr. Green

En línea

Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania
aitopes
Moderadores
DsPIC33
*****
Desconectado Desconectado

Sexo: Masculino
Mensajes: 5102


Ariel Palazzesi www.ucontrol.com.ar


WWW
« Respuesta #18 : 12 de Octubre de 2007, 08:19:14 »

Sólo los jóvenes creen que lo que acaban de descubrir es la primera vez que se descubre, los viejos sabemos que éste es solo un viaje personal que desde antes otros muchos han realizado.

Totalmente de acuerdo. Dudo que nada de lo que haya hecho en mi vida haya sido algo completamente original, siempre hay alguien que lo hizo primero. Pero la satisfaccion reside en el logro personal, en la superacion de uno mismo.

Es mas, creo que eso de intentar lograr "un poquito mas" de uno mismo puede hasta llegar a ser adictivo. Smile
En línea

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
Nocturno
Administrador
DsPIC33
*******
Desconectado Desconectado

Sexo: Masculino
Cuba Cuba

Mensajes: 17007



WWW
« Respuesta #19 : 12 de Octubre de 2007, 08:40:26 »

Pues yo sí me desmoralizo. Me desmoralizo cuando veo ese puente con nombre parecido al parque del oso Yogui y no se me ocurre cómo gestionar el teclado matricial con un sólo pin de esa manera. Será que me estoy volviendo mayor  Sad
En línea

Un saludo desde Sevilla, España.
Visita MicroPIC                                                                                        ɔ!doɹɔ!ɯ ɐʇ!s!ʌ
TODOPIC
   

 En línea
Páginas: [1] 2 3 Imprimir 
« anterior próximo »
Ir a:  

Impulsado por MySQL Impulsado por PHP Powered by SMF 1.1.20 | SMF © 2006-2008, Simple Machines XHTML 1.0 válido! CSS válido!
Página creada en 0.126 segundos con 24 consultas.
anything