Autor Tema: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c  (Leído 19477 veces)

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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: HELP ME... - Teclado 4x4 con PCF8574 i2c
« Respuesta #15 en: 09 de Febrero de 2011, 09:42:57 »
  Como la interrupción se genera por cambio de estado siempre se van a generar interrupciones cuando presionás o cuando soltás una tecla. También pasa cuando usas directamente el puerto B de por ejemplo un PIC16.

  Cuando mostrás tu función de escaneo uno de los dígitos devueltos es ' ' (espacio), ¿Cuándo devuelve eso? Porque bien podrías verificar que si el caracter devuelto es el ' ' (espacio) no hay tecla presionada.

  Sino se puede recurrir a leer el puerto antes de llamar a la función de escaneo.

  Supongamos que en reposo tu puerto está de la siguiente manera, 11110000. Si presionás una tecla va a cambiar, si luego la soltás te genera otra interrupción pero el estado del puerto vuelve a ser 11110000.
  Entonces al leer el puerto y encontrarte con 11110000 quiere decir que no hay tecla presionada.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: HELP ME... - Teclado 4x4 con PCF8574 i2c
« Respuesta #16 en: 09 de Febrero de 2011, 10:58:04 »
Hola AngelGris

Lo de del espacio es para  el contador, cuando verifica si se pulso tecla si recorre
todas las filas y columnas y no se pulso tecla te da  la ultima posicion yo le puse " " espacio en blanco
podia haberle puesto Z, o Q de que llego al final y no en contro tecla.

Pero me has dado una idea,
 si pulso tecla y me genera una interrupcion, al pulsar me genera otra siendo este puerto
de entrada, podria poner este puerto al  pulsar como salida, asi cuando se levantara la tecla
no lo detectaria como entrada.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #17 en: 10 de Febrero de 2011, 19:44:21 »
Hola compañeros

Una vez más he conseguido avanzar.
He resuelto el problemilla de doble lectura que tenia cuando pulsaba tecla,
y soltaba tecla.

La cosa era que se producia cambio cambio de estado en las entradas del expansor y me
producia interrupcion.

Lo he solucionado, de forma que cuando pulso tecla esa entrada se coloca como salida.
y solo se produce una interupcion.

La funcion main seria.

Código: C++
  1. #include <16F877A.h>
  2. #device adc=8
  3.  
  4. #FUSES NOWDT                    //No Watch Dog Timer
  5. #FUSES HS                       //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
  6. #FUSES NOPUT                    //No Power Up Timer
  7. #FUSES NOPROTECT                //Code not protected from reading
  8. #FUSES NODEBUG                  //No Debug mode for ICD
  9. #FUSES NOBROWNOUT               //No brownout reset
  10. #FUSES NOLVP                    //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
  11. #FUSES NOCPD                    //No EE protection
  12. #FUSES NOWRT                    //Program memory not write protected
  13. #FUSES RESERVED                 //Used to set the reserved FUSE bits
  14.  
  15. #use delay(clock=20000000)
  16. #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)
  17. #use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)
  18.  
  19. #include "pcf8574.c"
  20. #include "expan_i2c_01.c"
  21.  
  22. //------------------------------------------------------------------------------------
  23.  
  24.  
  25.  
  26. #int_EXT
  27. void  EXT_isr(void) {
  28.         printf("\r pines %d%d%d%d ",EXPAN_P7,EXPAN_P6,EXPAN_P5,EXPAN_P4);
  29.         printf("%d%d%d%d ",EXPAN_P3,EXPAN_P2,EXPAN_P1,EXPAN_P0);
  30.         printf("\r tecla: %c",text_t());
  31. }
  32.  
  33.  
  34.  
  35. void main(){
  36.    //primero configuro el puerto del espan luego activare las interupcion
  37.    //con ello evito que me salte al principiosin pulsar tecla.
  38.    
  39.    expan_bus_rw(0b00001111);
  40.    
  41.    port_b_pullups (0b00000001);
  42.    ext_int_edge( H_TO_L );
  43.    clear_interrupt(INT_EXT);//esto tambien hace falta para lo del principio
  44.    enable_interrupts(INT_EXT);
  45.    enable_interrupts(GLOBAL);
  46.    
  47.     // TODO: USER CODE!!
  48.    while(true){
  49.    
  50.    }
  51.  
  52. }

La funcion escanea o busca tecla nos quedaria asi:

Código: C++
  1. char text_t(){
  2.    int t,f,filas,ini_p;
  3.    char tecla[17]={'1','2','3','F',
  4.                    '4','5','6','E',
  5.                    '7','8','9','D',
  6.                    'A','0','B','C','Z'};
  7.  
  8.  filas=0xEF;
  9.  ini_p=0x0F;
  10.  //expan_bus_rw(ini_p); //configuro puerto del expansor 0b00001111
  11.  //delay_ms(50);
  12.  t=0;                 //iniciliazo contador de tecla  
  13.  for( f=0;  f<4; f++){
  14.    //printf("\r  t: %d, f: %d",t,f);
  15.    expan_bus_rw(filas);
  16.    //rotate_left(&filas,1);
  17.    delay_ms(20);
  18.    if(EXPAN_P0==0){break;}t++; //verifico si se pulso P0;incre nº tecla
  19.    if(EXPAN_P1==0){break;}t++; //verifico si se pulso P1
  20.    if(EXPAN_P2==0){break;}t++; //verifico si se pulso P2
  21.    if(EXPAN_P3==0){break;}t++; //verifico si se pulso P3
  22.    //printf("\r  t: %d, f: %d",t,f);
  23.    rotate_left(&filas,1);
  24.    //expan_bus_rw(filas);        //inicializo de nuevo el puerto
  25.   }
  26. //disable_interrupts(INT_EXT);
  27. expan_bus_rw(ini_p);             //inicializo los puerto como al principio
  28. //enable_interrupts(INT_EXT);
  29. return tecla[t];
  30. }



Ahora nos imprime solo cuando pulsamos tecla,
lo malo es que tenemos que resetear el simulador
para poder pulsar otra tecla nueva.

Además solo me reconode la primera fila.

De nuevo tenemos otros dos nuevo errores.

Si pulsamos la tecla F
nos dice :

Pines 0000 0111
Tecla:F

« Última modificación: 10 de Febrero de 2011, 20:02:21 por pajaro »

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #18 en: 11 de Febrero de 2011, 09:14:53 »
Solo me he mirado por encima los mensajes de este tema.

Añadir por si es de utilidad que cuando yo realicé el teclado con el PCF8574 en PROTEUS no funcionaba, lo probe en real y sí que funcionaba.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #19 en: 14 de Febrero de 2011, 20:31:52 »
Solo me he mirado por encima los mensajes de este tema.

Añadir por si es de utilidad que cuando yo realicé el teclado con el PCF8574 en PROTEUS no funcionaba, lo probe en real y sí que funcionaba.

Hola amigo Pocher
Podrias fijarte unicamente en el post anterior al que escribiste, en la funcion text_t().
me gustaria que me dijeras si hay algo que no te cuadra.

Agredezco toda ayuda, que me puedan brindar ustedes los maestros.

Un saludo.

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #20 en: 13 de Marzo de 2011, 20:48:32 »
Hola Amigos,

Despues de algun tiempo con otros problemas,
retomamos el problema de controlar un teclado tipo matriz 4x4
con un expansor PCF8574 o PCF8574A.

el circuito se quiere simular con proteus, para ello se hace uso de:

PIC16F877A --> microControlador.
PCF8574      --> Expansor del bus I2C
Teclado 4x4 --> Teclado matricial 4x4 de 16 teclas.

--------------------------------------

Se sabe que el expansor se puede configurar sus puertos como entradas o como salidas.
un cambio  de estado en las entradas produce una interrupcion en el expansor, permaneciendo el estado de la entrada.

La idea es poner de los 8 puertos mitad como entrada (en rojo en proteus) 1 y mitad salida (azul en proteus) 0, para evitar contocircuito en los puertos se pone una resistencias.

--------------------------------------------------------

para buscar tecla pulsada:
configuramos anteriormente como 0x0F es decir
                                         columnas    filas
                                             0 0 0 0   1 1 1 1
puerto del expansor:
                                             0 1 2 3   4 5 6 7

los puertos del teclado son:
                                             1 2 3 4   5 6 7 8

del 1 al 4 son columnas y del 5 al 8 filas

asi pues pondremos las filas como entradas , al pulsar tecla esta se pondra a 0, la fila
pero ¿como sabemos la columna  de pulso la tecla?,
pues bien cambiamos la polaridad del puerto lo que antes fue 0 ahora es 1 de esta forma
las columnas se ponen como entradas y las filas como salidas.

De esta forma sabemos la fila y la columna que se pulso.
para calcular la tecla correpondiente se hace un simple calculo:

la posicion:

mi_tecla=(Fila x 4) + Columna
mi_tecla se puede iniciar a un valor  -1 por ejemplo.

tanto la fila como la columna empiezan en 0

El numero de teclas del teclado es: [posicion]

0  1  2  3
4  5  6  7
8  9  A  B
C D  E  F


su serigrafia o letras pintadas son: [serigrafia]

1  2  3  F
4  5  6  E
7  8  9  D
A  0  B  C


un Ejemplo:
si pulsamos la tecla con la serigrafia 7,
esto sera la columna 0 y la fila 2

si le aplicamos la formula seria:
(Fila x 4 )+ Columna
    (2 x 4)+ 0

La posicion es 8.

continuara....
« Última modificación: 13 de Marzo de 2011, 23:01:55 por pajaro »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #21 en: 13 de Marzo de 2011, 21:08:29 »
  Primero, Proteus dibuja un cuadradito rojo cuando hay un estado alto y un cuadradito azul cuando hay un estado bajo.
No es que dibuje rojo cuando está como entrada y azul cuando está como salida.

  Lo que hay que cambiar en los puertos no es que funcione como entrada o salida sino el dato que está saliendo del puerto. El dato de salida también dependerá si en las entradas se están utilizando resistencias de pull-up o resistencias de push-down
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #22 en: 13 de Marzo de 2011, 23:15:43 »
  Primero, Proteus dibuja un cuadradito rojo cuando hay un estado alto y un cuadradito azul cuando hay un estado bajo.
No es que dibuje rojo cuando está como entrada y azul cuando está como salida.

  Lo que hay que cambiar en los puertos no es que funcione como entrada o salida sino el dato que está saliendo del puerto. El dato de salida también dependerá si en las entradas se están utilizando resistencias de pull-up o resistencias de push-down

Hola AngelGris

¿Has simulado alguna vez un teclado con PCF8574A?, ¿Te funciono bien?
Un saludo

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #23 en: 13 de Marzo de 2011, 23:34:05 »
  Siempre que simulé teclados lo hice conectándolos directamente al PIC. Pero la idea de funcionamiento es la misma....

  Supongamos que utilizas resistencias de pull-up en los bits de entrada, por lo tanto, al hacer una lectura cuando no haya tecla presionada, todos los bits (de entrada) estarán en 1. Supongamos también que la filas son entradas y las columnas son salidas.

  Configuración de puerto 11110000. El bit 0 correspondiendo a la primer columna, el bit 6 correspondiendo a la primer fila.


  En primera instancia se dejan todos lo bits de salida en 0. Así cualquier tecla que se presione puede provocar un cambio de estado en las entradas.

  Una vez que se detecta un cambio de estado (que indica que se presionó alguna tecla), se modifican las salidas para que sólo la columna 1 esté en 0. Se vuelve a leer las entradas, si se lee todo 1 nos indica que la tecla presionada no es de la columna 1. Entonces seguimos barriendo las columnas poniendo en 0 sólo la columna 2, se leen nuevamente las entradas y si es todo 1 la tecla presionada no pertenece a la columna 2. Repetimos el paso con la siguiente columna, poniendo en 0 sólo la columna 3 y leyendo nuevamente las entradas, si ahora encontramos un valor que no sea todo 1 (supongamos 0111) sabemos que la tecla presionada es la que se encuentra en la columna 3 y la fila 4.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pocher

  • Moderador Local
  • DsPIC30
  • *****
  • Mensajes: 2569
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #24 en: 14 de Marzo de 2011, 05:17:29 »
Veo pajaro que le has hechado horas, intentando resolver este proyecto.

He buscado el que me funcionaba físicamente (no funcionaba con PROTEUS) y te lo dejo.

La librería no es mía, es una adaptación posiblemente de otra adaptación, yo también creo que le cambié algunas cosas.

Un saludo


Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #25 en: 14 de Marzo de 2011, 10:44:47 »
 Siempre que simulé teclados lo hice conectándolos directamente al PIC. Pero la idea de funcionamiento es la misma....

  Supongamos que utilizas resistencias de pull-up en los bits de entrada, por lo tanto, al hacer una lectura cuando no haya tecla presionada, todos los bits (de entrada) estarán en 1. Supongamos también que la filas son entradas y las columnas son salidas.

 
Configuración de puerto 11110000. El bit 0 correspondiendo a la primer columna, el bit 6 correspondiendo a la primer fila.



  En primera instancia se dejan todos lo bits de salida en 0. Así cualquier tecla que se presione puede provocar un cambio de estado en las entradas.

  Una vez que se detecta un cambio de estado (que indica que se presionó alguna tecla), se modifican las salidas para que sólo la columna 1 esté en 0. Se vuelve a leer las entradas, si se lee todo 1 nos indica que la tecla presionada no es de la columna 1. Entonces seguimos barriendo las columnas poniendo en 0 sólo la columna 2, se leen nuevamente las entradas y si es todo 1 la tecla presionada no pertenece a la columna 2. Repetimos el paso con la siguiente columna, poniendo en 0 sólo la columna 3 y leyendo nuevamente las entradas, si ahora encontramos un valor que no sea todo 1 (supongamos 0111) sabemos que la tecla presionada es la que se encuentra en la columna 3 y la fila 4.




Hola AngelGris,
si ponemos las filas como entrada (cuadrito rojo proteus )y las columnas como salida (Cuadrito azul proteus)

puertos
expansor   teclado

P0            T1
P1            T2
P2            T3
P3            T4
P4            T5
P5            T6
P6            T7
P7            T8

filas                 del teclado   T1-T2-T3-T4
columnas         del teclado   T5-T6-T7-T8

configuracion del puerto del expansor PCF8574x
                 columnas         filas
                 4   3  2  1      4  3  2  1

bit             7   6  5  4      3  2  1  0
estado       0   0  0  0      1  1  1  1

expansor   7   6   5  4     3   2  1  0
teclado      8   7   6  5     4   3  2  1

Quisiste decir esto:

bit 0     fila      1
bit 1     fila      2
bit 2     fila      3
bit 3     fila      4

bit 4  columna 1
bit 5  columna 2
bit 6  columna 3
bit 7  columna 4





« Última modificación: 14 de Marzo de 2011, 11:14:48 por pajaro »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #26 en: 14 de Marzo de 2011, 12:03:42 »
si ponemos las filas como entrada (cuadrito rojo proteus )y las columnas como salida (Cuadrito azul proteus)

  Olvidate de eso, no es así. El cuadradito rojo indica un nivel alto y el azul un nivel bajo. Vos podés tener un puerto configurado como salida, pero si el dato es 1 también te va a mostrar un cuadradito rojo.

  supongamos que se tiene el siguiente teclado



  y lo tenemos conectado de la siguiente manera

 expansor                      teclado
 P0 (bit 0)                     1 (columna 1)
 P1 (bit 1)                     2 (columna 2)
 P2 (bit 2)                     3 (columna 3)

 P4 (bit 4)                     A (fila 1)
 P5 (bit 5)                     B (fila 2)
 P6 (bit 6)                     C (fila 3)
 P7 (bit 7)                     D (fila 4)

  Configurás los bits 4 a 7 como entradas y los 0 a 2 como sallida.

 En primera instancia se dejan todas las salidas con el dato 0. No confundir el tipo de puerto (entrada o salida) con el dato que tiene el puerto.

  Cuando una tecla es presionada, se genera un cambio de estado en algunos de los pines configurados como entrada.
  Ahora se comienza el barrido del teclado haciendo lo siguiente

  Poner un 0 en P0, mientras que P1 y P2 tienen que ser 1. Esto es el dato de salida que tiene que haber en el puerto.
  Se leen los puerto de entrada. Si todas las entradas indican 1 es porque la tecla presionada no pertenecía a la columna 1. Esto se entiende debido a que  la columna 1 tiene un 0, si yo hubiese pulsado cualquier tecla perteneciente a dicha columna, una de las filas debería tener el dato 0.

  Si el valor leído (en los pines configurados como entrada) eran todos 1 eso indicaba que la tecla no pertenecía a la columna 1.
  Ahora se pone a 0 P1 y se deja en 1 P0 y P2.
  Se leen los puertos de entrada. Si alguna entrada está en 0, quiere decir que la tecla pertenece a la columna 2. Porque toda la columna 2 está en 0 y si presiono alguna tecla de dicha columna el 0 se vera en uno de los pines de entrada..

  Si el dato leído era todo 1, se repite el paso para la columna 3.

  Al finalizar todo el proceso de barrido del teclado hay que volver a dejar todas las columnas en 0.

  Como se observa basta con saber que columna está en 0 y que fila está en 0 para saber que tecla está presionada.

  Ejemplo: si presiono la tecla 8 sólo la columna 2 estará en 0 y sólo  la fila 3 estará en 0.
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #27 en: 15 de Marzo de 2011, 18:21:42 »
Hola AngelGris,

breve analisis y sistesis de lo escrito por el compañero.


- cofiguro puertos del expansor.


P0 (bit 0)  -  T1   C1    0
P1 (bit 1)  -  T2   C2    0
P2 (bit 2)  -  T3   C3    0
P3 (bit 3)  -  T4   C4    0
P4 (bit 4)  -  T5   F1    1
P5 (bit 5)  -  T6   F2    1
P6 (bit 6)  -  T7   F3    1
P7 (bit 7)  -  T8   F4    1

filas     entradas (1)  P4-P7
columnas  salida   (0)  P0-P3

el teclado tiene 3x4 asi que c4 la podemos dejar sin conectar o
asignarle un valor como si estubiera conectada y poder usar un teclado 4x4




configuro puerto del expansor:  escribo 0xF0

si pulso tecla cambia las entradas (filas):

pongo dato en columnas (escribo dato en columnas[salidas])  1110

-- analizando esto : solo la columna 1 podra pasar el 0

                       (leo dato de filas[entradas])  

puerto bus               I/O   RW
P0 (bit 0)  -  T1   C1    0    0
P1 (bit 1)  -  T2   C2    0    1
P2 (bit 2)  -  T3   C3    0    1
P3 (bit 3)  -  T4   C4    0    1
P4 (bit 4)  -  T5   F1    1    ?  
P5 (bit 5)  -  T6   F2    1    ?
P6 (bit 6)  -  T7   F3    1    ?
P7 (bit 7)  -  T8   F4    1    ?

creo que hay un pequeño lio entre las entradas y las salidas.


Volvemos a empezar: ...

1.- configuro el expansor de esta forma

  
Px -> puerto del expansor
Tx -> puerto del teclado
Cx -> columnas del teclado
Fx -> Filas    del Teclado
0/1 -> configuracion del puerto
0 -> salidas
1 -> entradas

P0 (bit 0)  -  T1   C1    0
P1 (bit 1)  -  T2   C2    0
P2 (bit 2)  -  T3   C3    0
P3 (bit 3)  -  T4   C4    0
P4 (bit 4)  -  T5   F1    1
P5 (bit 5)  -  T6   F2    1
P6 (bit 6)  -  T7   F3    1
P7 (bit 7)  -  T8   F4    1

--------------------------------
hasta aqui todo va bien

en la simulacion si unimos el expansor y el teclado sin ponerle las resistencias
para evitar el corto circuito del expansor.

cambia el estado de las entradas no de las salidas.
independientemente sean 0xF0 o 0x0F.

Lo verificamos con el proteus.
probamos a inicializar los puertos del expansor pero con 0xF0 y probamos a pulsar.
despues cambimos la inicilizacion del expansor con 0x0F y probamos a pulsar



cuando se produce un cambio de estado en las entradas se produce interrupcion.

--------------------------------
hasta aqui todo va bien

si ahora le colocamos las resistencias para evitar que se cortocircuiten los puertos del expansor,
empiezan las cosas raras.

no es lo mismo una resitencias analogica, que una digital.
no es lo mismo poner las resistencias en las filas, que en las columnas.
si ademas quiero ponerle un led que cuando se pulse tecla se encienda el led la cosa se complica.


 


« Última modificación: 15 de Marzo de 2011, 21:05:27 por pajaro »

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #28 en: 15 de Marzo de 2011, 22:06:13 »
  Hola pajaro, fijate en el comentario del colega pocher

.............
He buscado el que me funcionaba físicamente (no funcionaba con PROTEUS) y te lo dejo.
............

  Tal vez estés teniendo algún error simplemente porque el proteus falla al simular el expansor
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas

Desconectado pajaro

  • PIC24H
  • ******
  • Mensajes: 1121
Re: 00 Rastrear Tecla de Teclado 4x4 con PCF8574 i2c
« Respuesta #29 en: 17 de Marzo de 2011, 19:01:56 »
hola Amigos

sigo con el teclado y el expansor, lo probe fisicamente y decta las teclas pulsada,
pero hay otro problema.

Mi teclado es este:

1 2 3 F
4 5 6 E
7 8 9 D
A 0 B C

aqui debajo los pines de conesiones
1234 5678

1-4 columnas
5-8 Filas

Pues bien el problema es
que si pulso 1 coincide dice en el lcd:
Codigo tecla: 1
Tecla:1

lo mismo para: 5, 9 y C
creo que es porque coinciden, el valor de la fila y el de la columna.

-------------

ahora vienen los problemas:

si pulso 2 me dice que es 4
si pulso 3 me dice que es 7
si pulso F me dice que es A

Es como si estubieran cambiadas las filas y las columnas.

------------------------------
Haciendo más pruebas:
añado una linea al programa

printf(lcd_putc,"dato:%2x f: %2d, c: %2d",datos,f,c);
con ella se que dato hay la fila y la columna de la tecla.
mientras este pulsada, si la suelto se pone la ultima.

pues bien.
Las conexiones fisicas del expansor las tengo de tal forma:

patita    12  11  10   9    4   3   2   1     expansor

bit          7    6    5   4    3   2   1   0     expansor

invertido 8    7    6   5   4    3   2   1    teclado


nada sigue dando problemas

tambien anote el dato que me sacaba en pantalla



ordenado por filas:
===================

tecla - dato      su binario

1 - ee   1110 1110
2 - ed   1110 1101
3 - eb   1110 1011
F - e7   1110 0111

4 - de   1101 1110
5 - dd   1101 1101
6 - db   1101 1011
E - d7   1101 0111

7 - be   1011 1110
8 - bd   1011 1101
9 - bb   1011 1011
D - b7   1011 0111

A - 7e   0111 1110
0 - 7d   0111 1101
B - 7b   0111 1011
C - 77   0111 0111



 

ordenado por Columnas:
===================

tecla - dato      su binario

1 - ee   1110 1110
4 - de   1101 1110
7 - be   1011 1110
A - 7e   0111 1110

2 - ed   1110 1101
5 - dd   1101 1101
8 - bd   1011 1101
0 - 7d   0111 1101

3 - eb   1110 1011
6 - db   1101 1011
9 - bb   1011 1011
B - 7b   0111 1011

F - e7   1110 0111
E - d7   1101 0111
D - b7   1011 0111
C - 77   0111 0111



 


analizando el codigo leo:
 if (!bit_test(dato,4)) c=1;

esta funcion que hace, realmente ?

bit_test(variable,bit);
 testea el bit de la variable..

si el bit 4 de la variable dato es distinto es la columna 1.

¿Es correcta esta interpretación?


Un saludo


« Última modificación: 18 de Marzo de 2011, 08:21:08 por pajaro »


 

anything