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

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

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #15 en: 11 de Octubre de 2007, 19:58:52 »
¿Es que has soñado conmigo?  :lol:

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.  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado LABmouse

  • Moderadores
  • DsPIC30
  • *****
  • Mensajes: 3575
    • Juntos es mejor
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #16 en: 11 de Octubre de 2007, 20:15:57 »
GRACIAS REDPIC!!!! Gracias por compartirlo con todos en el foro.. Esta muy muy bueno  :-/

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #17 en: 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. :mrgreen: :mrgreen: :mrgreen:

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

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #18 en: 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. :)
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 Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #19 en: 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  :(

Desconectado Leon Pic

  • Colaborador
  • DsPIC30
  • *****
  • Mensajes: 3610
    • Impresiones en 3D
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #20 en: 12 de Octubre de 2007, 09:21:49 »

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.

Hola RedPic. La razón de mi post anterior, es poorque años atrás había desarrollado una dirección, para un automovil, eléctrica, es decir, se maneja con un joystick, estaba en pleno desarrollo cuando, mirando un programa de TV, sobre aviones, vi que utilizaban el mismo principio de funcionamiento, el sistema se llama Flight Wire Were (o algo así) Me agarre tanta desilución, que tire todo a la mismisima miercoles.

Ahora maduré (solo un poquito  :-/ :lol: :z) :roll: :c)) y me doy cuenta que lo que hise fue una estupidez de mi parte, haber dejado el proyecto.

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. :mrgreen: :mrgreen: :mrgreen:

Totalmente de acuerdo.

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  :(

A esto me refiero con que fue una estupidez lo que hise, ya que RedPic mejoró o utilizó un método parecido, sin querer, a lo que hiso Nocturno.
Ahora me doy cuenta pude haber realizado mi dirección, de una forma tan eficiente como la que utiliza una empresa de aviones. (no quiero decir que yo solo puedo mejorar todo un sistema, a lo que hacen varios ingenieros).

Bueno, espero no haberlos aburrido con mi melancolía. Un gran problema que tengo, es que no se explicarme, y cuando digo algo, parezco grosero, burlon, etc, y no son mis intenciones

Saludos.  :-/ :-/
Jesús dijo, yo soy el CAMINO, la VERDAD y la VIDA, nadie llega al PADRE si no es por mi.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #21 en: 12 de Octubre de 2007, 10:47:51 »
Igualmente en algunos temas es lindo ser "el primero"... :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5538
    • Picmania by Redraven
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #22 en: 12 de Octubre de 2007, 11:03:41 »


Bueno ... tras unas cuantas horas perdidas debido a que el cable negro, el que tira a masa la resistencia R9, no hacía buen contacto y por consiguiente no había divisor de tensión ni nada que se le parezca, lo he solucionado y ya funciona.  :mrgreen:

He implementado una forma de leer que intenta minimizar los efectos aleatorios, y perversos, de las interferencias, transitorios y otras zarandajas.

Simplemente lo que hago es acumular n lecturas consecutivas y después calcular la media de todas ellas. Cuanto mas lecturas realice menor impacto pueden tener lecturas aleatorias esporádicas que puedan producirse.

Como leo con 10 bits de precisión, 1024 valores posibles, pero la menor y la mayor resistencia que puedo obtener son de 220R y 2760R que generan voltajes de 4,225V y 1,515V respectivamente, solo puedo obtener lecturas entre 865 y 310 aproximadamente.

Si es la mayor, 865, y acumulo sobre una variable de 16 bits solo podré acumular 75 lecturas (2^16/865) y después dividir por 75 para obtener la media de todas ... pero no es necesario ajustarse tanto al límite, con 32 lecturas tendremos mas que suficiente.

Asi que implementando que es gerundio:

Código: C++
  1. void main(void){
  2.  
  3.    int16 ANval;
  4.    int16 ANval_Acumuleitor=0;
  5.    int16 ANVal_Result;
  6.    int16 ANVAL_Minimun=255;
  7.    int8  CAN_count=0;
  8.    int8  CAN_maxcount=32;
  9.  
  10.    setup_adc_ports(AN0 | VSS_VDD); // Configuro AN0 para lectura ADC, usando como referencia VSS y VDD
  11.    setup_adc(ADC_CLOCK_INTERNAL);  // Configuro velocidad de muestreo la interna del PIC 2-6 us
  12.    set_adc_channel(0);             // Configuro siguiente canal de lectura a AN0;
  13.  
  14.    do{
  15.  
  16.          ANVal = read_adc();                                        // Leo canal ACD y guardo en ANVal
  17.          ANval_Acumuleitor += ANVal;                                // Acumulo sucesivas lecturas sobre ANval_Acumuleitor
  18.          if(++Can_Count==CAN_maxcount){                             // Si hago mas de CAN_maxcount lecturas ...
  19.             ANVal_Result = (int16) ANval_Acumuleitor/CAN_maxcount;  // Calculo la media de las lecturas realizadas ...      
  20.             if(ANVal_Result>ANVAL_Minimun){                         // Que si resulta mayor que ANVAL_Minimun ...
  21.                printf("KeyScan %Lu\r\n",ANVal_Result);              // La tomo en consideración, en este caso lo muestro,
  22.                                                                     // ya haremos la conversión a teclas por margen.
  23.             }
  24.             Can_Count=0;                                            // Reinicio Can_Count, el contador de lecturas.
  25.             ANval_Acumuleitor=0;                                    // Reinicio ANval_Acumuleitor, el acumulador de lecturas.
  26.          }
  27.    }while(1);
  28. }

Asi el funcionamiento es claro y simple. Leo CAN_maxcount veces (32) sobre ANval, acumulando sobre ANval_Acumuleitor, incrementando CAN_count cada vez que leo. Cuando CAN_count alcanza el valor de CAN_maxcount lecturas calculo ANVal_Result dividiendo ANval_Acumuleitor por CAN_maxcount. Si ANVal_Result es mayor que ANVAL_Minimun lo muestro, recordad que en nuestra tabla el menor resultado posible de una lectura correspondía a la mayor resistencia posible que nos daba una lectura de unos 310. Reinicio CAN_count y ANval_Acumuleitor y volvemos a empezar.

El resultado, mas abajo, tras pulsar la tecla Col4/Row4, F4 en el teclado de la imagen:



Los resultados obtenidos son compatibles, en desviación, con el 5% de precisión de las resistencias usadas (las de la banda dorada). Con resistencias mas precisas, del 1% por ejemplo, podríamos afinar la lectura proporcionalmente.

Ahora ya solo queda identificar cada lectura con cada tecla, cosa que haremos teniendo en cuenta un margen de error de +-(mas, menos) ese 5%, disminuido a aproximadamente un 1% por la ponderación realizada, alrededor de cada valor teórico calculado, de forma que nuestra tecla F4 que debería generar una lectura de 310 deberemos fijarla como 307>[F4]>313.  :mrgreen: :mrgreen: :mrgreen:

« Última modificación: 10 de Abril de 2009, 05:29:55 por RedPic »
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1295
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #23 en: 12 de Octubre de 2007, 12:01:18 »
Que tal amigos todos,

Me gustaria aportar el anailisis matematico para la deteccion de dos teclas segun el esquema y valores que han proporcionado nuestro amigos redpic y Nocturno.

Ahora bien proacticamente el modelo matematico general es el mencionado por RedPic, esto es:

Vout = [Rbottom / (Rtop + Rbottom) ] X Vin

Donde Rbottom = R9
Esta es la ecuacion general y lo que cambia para todods los casos es la Rtop. En el caso de la detecion de una sola tecla Rtop = Rcolumna + Rfila. Ahora vamos a analizar que sucede cuando se presionan dos teclas.

Si observamos con detalle, podemos darnos cuenta de que existe 3 posible condiciones de presionar dos teclas simultaneamente y estos son:
1) Cuando se presionan dos teclas en la misma fila
2) Cuando se presionan dos teclas en la misma columna
3) Cuando se presionan dos teclas en diferente columna y fila

Analicemos el primer caso. Para el primer caso si presionamos dos teclas que se encuentran en una mima fila, se genera un resistencia equivalente en parelelo de dos resistencias de columna, esto es se puede generar las siguientes combinaciones; R1|| R2, R1|| R3, R1|| R4, R2|| R3 ... etc
Entonces podemos decir que se forma una resistencia equivalente formada por el paralelo de 2 resistencias, esto es Reqc = Rcx || Rcy y en su expresion matematica seria: Reqc = RcxRcy/(Rcx+Rcy). Esta resistencia equivalente sera ahora nuestra nueva resistencia de columna, es decir
Rcolumna = Reqc. Si sustituimos en nuestra ecuacion general tenemos que, Vout = [R9 /( Reqc+Rf+R9)]Vin.

Ahora analicemos el segundo caso. En este caso se presionan 2 teclas en la misma columna, por lo tanto ahora se genera una resistencia equivalente de dos resistencia de fila en paralelo, esto es R5 || R6, R5 || R7, RR5 || R8 ... etc. Por lo que la resistencia equivalente la podemos definir de la siguiente manera: Reqf = Rfx || Rfy, y su espresion matematica es: Reqf  = RfxRfy/(Rfx+Rfy). Esta ahor asera nuestro nuevo valor para la resistencia de fila, es decir Rfila = Reqf. Sustituyendo en nuestra ecuacion general tenemos que: Vout = [R9 /(Rc + Reqf + R9)]Vin.

Para el tercer caso en el que tenemos que se presionan dos teclas las cuales estan en diferente fila y columna tenemos ahora que la resistencia equivalente se forma de Reqtop = (Rcx+ Rfx) || (Rcy + Rfy), esta ahora es nuestra nueva resistencia equivalente pero ahora esta es igual a Rtop y no solamente a Rcolumna o Rfila. Su expresion matematica seria: Reqtop = (Rcx + Rfx)(Rcy+Rfy)/(Rcx+Rcy+Rfx+Rfy). Entonce sustituyendo en nuestra ecuacion general tenemos que:  Vout = [R9 /(Reqtop + R9)]Vin.

Este es mi pequenio aporte, ahora solo bastaria corroborar esta analisis. Saludos y espero que esto le pueda servir a alguien mas.

Su amigo: Elreypic.

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #24 en: 12 de Octubre de 2007, 12:10:41 »
Menuda placa de pruebas, Diego !! :-/ :-/

Fanfarron !! :D :D :D
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18269
    • MicroPIC
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #25 en: 12 de Octubre de 2007, 12:20:32 »
Ese análisis es realmente interesante Elreypic, pero no sé cómo aplicarlo para deducir unos valores de resistencias que permitan conseguir que no haya dos combinaciones iguales. Ahí es donde yo no sé llegar con matemáticas.

Diegooooo, yo quiero una entrenadora como esa ;-)

Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #26 en: 12 de Octubre de 2007, 13:39:13 »
Diego, que es el modulo negro largo que esta conectado a la bornera derecha?? :shock:

Me tiene muy intrigado... :mrgreen:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.


Desconectado MGLSOFT

  • Moderador Local
  • DsPIC33
  • *****
  • Mensajes: 7907
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #28 en: 12 de Octubre de 2007, 16:11:10 »
Que es ?? :-/ :-/
Que es ??? :shock: :shock:
Todos los dias aprendo algo nuevo, el ultimo día de mi vida aprenderé a morir....
Mi Abuelo.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Lectura de un Teclado Matricial 4x4 con un solo pin del PIC
« Respuesta #29 en: 12 de Octubre de 2007, 16:23:44 »
Me extraña Marcos!
Se ve lejos que es un módulo PQPLC, ¿no?

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