Autor Tema: Simular un teclado 4x4 de PIC a PIC  (Leído 2714 veces)

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

Desconectado jhormancely

  • PIC10
  • *
  • Mensajes: 3
Simular un teclado 4x4 de PIC a PIC
« en: 27 de Agosto de 2017, 01:33:26 »
Buenas noches, agradezco mucho su colaboración para poderme guiar en este tema:
Actualmente se tiene un teclado matricial conectado a un puerto de un Microcontrolador X. No se tiene información de este microcontrolador, solo se han realizado medidas en el puerto en el que esta conectado este teclado, indicando que tiene cuatro puertos en 5V y cuatro puertos en 0V. Es lo único que sabemos.
Lo que se requiere es instalar una tarjeta con un PIC entre el teclado matricial y el Microcontrolador X, con la finalidad de modificar las funcionalidades del sistema actual.
He realizado varias pruebas:
Instalada la tarjeta, recibiendo el teclado matricial y conectando el PIC16f873A (puerto C) al puerto donde estaba el teclado en el Microcontrolador X, Entiendo que el teclado matricial realiza un corto circuito entre Fila-Columna y esto hace que un voltaje de entrada (5V (RB4-RB7)) cambie a (0V) y luego se realizan operaciones de de bits para conocer la fila/columna.
Como hago para simular este teclado y me entienda el micro X?

disculpen si no me hago entender :(
adjunto imagen.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #1 en: 27 de Agosto de 2017, 11:27:58 »
En realidad el Micro X realiza un "barrido", hay 4 pines que son entradas (con pull-up o pull-down ) y 4 que son salidas



Supongamos que las filas sean las salidas y las columnas entradas.
Como no se que pines son que cosa en tu micro, aca vamos a suponer que donde tenes 0V es tu entrada con un pull-down para mantenerlo en 0V.
Todas las demas salidas estan en 5V entonces cuando presiones cualquier boton, si seguis el camino todas las entradas ( la de las 4 filas ) van a pasar a 5V.
¿Entonces como es que detecta cual es?
Ya con esto yo logro detectar que hay algo presionado, la mayoria no hace esto, simplemente genera un barrido.
Primero activo ( 5V ) solo la fila 1. Y observo mis entradas, Si alguna esta en 1 significa que ahi esta el boton presionado. Sino repito lo mismo con la fila 2.
Desactivo Fila 1 y Activo Fila 2. Y observo mis entradas. el mismo caso que antes.

En fin, si quisieras simular un teclado, lo que deberias hacer es:

- primero es detectar cual pin es salida y cual es entrada de tu Micro X.
- segundo ver la velocidad con que se genera ese "barrido" ya que recorda que al detectarse el barrido vos deberias aplicar la salida del PIC sobre las entrads del Micro X
- tercero, en cuestiones de tiempo, uno desconoce que tanto tiempo pasa desde la activacion de la salida a la lectura de los pin del Micro X, por lo tanto tal ves pensar en unicamente hacerlo con el PIC puede ser insensato. Ejemplo, si el Micro X va a 100Mhz y su programa tarda 50ns entre eso, vos deberias usar un micro de mucha mayor velocidad ( el doble o mas ), lo cual lo hace absurdo. Y el coste se dispara rapidamente.

Otra forma de evitar esto, es tratar de crear un sistema por hardware que realize esto. Hasta ahora lo mas simple que se me ocurrio es utilizar un micro con 4 ANDs o NANDs ( 2 entradas ) el cual las 4 salidas del Micro X vayan a este. Y un registro de desplazamiento con tri-state. El cual tendrias que 4 salidas son para las ANDs y 4 salidas para el micro X. De esta forma nosotros damos que salida del Micro X al activarse va a hacer que el registro de desplazamiento deje de estar en tri-state. Lo bueno de esto es que tenes todo el tiempo del mundo para llenar el registro de desplazamiento. Luego activas el latch y listo. tendrias al menos 3 pines hacia el registro de desplazamiento, 2 del SPI + 1 de latch.

Entonces vos con tu PIC manejas el registro de desplazamiento nomas. Suponete que el primer nibble sean las ANDs y manejen fila 4, fila 3, fila 2 y fila 1 respectivamente. Y el otro nibble sean columna 4, columna 3, columna 2 y columna 1 respectivamente. Utilizando el diagrama del teclado que te pase. Si por ejemplo quisiera activar el boton 8. Pondria en el registro de desplazamiento:

0100 (Solo la fila 3 me puede activar el Output Enable del registro de desplazamiento ) + 0010 ( Columna 2 que seria la del 8 ) = 01000010

Y ahora todo el "delay" que pueda ocurrir esta dado por la velocidad de las AND/NANDs y del registro de desplazamiento en salir del tri-state

PD: Algunas consideraciones extras hay que tomar con las salidas de las AND (74xx00/74xx08), ejemplo poner un diodo. O tal ves ( no hice la logica ) pero podrias llegar a usar una NAND con open-collector asi pones solo resistencias (74xx03/74xx09 )
PD2: La solucion que se me ocurrio y di es para un uso de un PIC. Podrias utilizar un CPLD, o algun micro que te provea una interfaz configurable para generar una tabla de verdad por ejemplo.
« Última modificación: 27 de Agosto de 2017, 11:34:30 por KILLERJC »

Desconectado jhormancely

  • PIC10
  • *
  • Mensajes: 3
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #2 en: 27 de Agosto de 2017, 17:19:44 »
Gracias por responder KILLERJC,
No entiendo lo ultimo que dijiste sobre el sistema hardware con micros y compuertas. Es posible y espero que no sea mucha.molestia.tengas un diagrama para ilustrarme.
Hasta ahora no he podido tener exito para que el micro X me logre.entender. he pensado tener salidas.en rele pero seria un locura como 16 reles.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #3 en: 27 de Agosto de 2017, 18:20:59 »
Asi:


* dsa.jpg
(137.43 kB, 630x611 - visto 892 veces)


Si usas NAND o AND depende de que use el micro X cuando "activa" una salida.
Y lo que use son AND/NAND con open-colector, en este caso, si usas comunes, tendrias que poner diodos en la salida.
Lo manejas con SPI

Pero primero deberias ver con que niveles lee el teclado antes de poder hacer esto.
Y si por las dudas queres armarlo, te digo que seguramente no funcione asi como esta o termines quemando algo, primero medi correctamente y luego armas el circuito acorde a lo que tenes.

El grafico es lo mismo que explique antes. Con el PIC que posee el teclado usas el SPI y le envias el valor que deberia tener ( fila y columna ) como ya lo explique. Luego envias un pulso al latch y lo que resta es esperar un poco y poner todo a 0 o 1 dependiendo de que valor deeb tener la entrada o la salida.
Lo demas se encarga el circuito.
« Última modificación: 27 de Agosto de 2017, 18:23:35 por KILLERJC »

Desconectado jhormancely

  • PIC10
  • *
  • Mensajes: 3
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #4 en: 30 de Agosto de 2017, 01:33:21 »
Buenas noches KILLERJC,
logre observar el chip (micro X) realmente es un 74C922 (decodificador de teclado).
y tratando de analizar un poco la solución que me sugieres de las compuertas AND y el 74LS595, veo que solo en un principio cargando los datos al 74LS595 se activara la interrupcion(Columnas), pero la fila no la lograria identificar ya que supongo que una de esas 4 salidas realizaria algun comprobacion con las columnas y para ello tendria que llegar a las columnas.
SI el chip de un 74C922 funcionaria igual?. este chip tiene secuencialmente en sus columnas que estara rotando un cero logico.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #5 en: 30 de Agosto de 2017, 16:42:59 »
El 74C922 hace lo que ya comentamos.

Tiene 4 salidas que son las columnas, las cuales va activando una por una. Estas salidas son open-colector, es decir que las entradas a las AND/NAND deberian tener unas resistencias de pull-up. Una ves detectado una de las entradas, ese ciclo de columnas se detiene, y empieza a actuar el tiempo de rebote. Una ves que pasa el tiempo, recien alli avisa que el dato esta listo.

Es decir todas las columnas estan en 5V ( si VCC es 5V obviamente ) excepto una que va rotando, para hacer el multiplexado, la velocidad de que cambia esta dada por el capacitor del oscilador. Cuando la columna que deseamos este en 0, deberiamos tener un 0 en las salidas de la AND para que el 74xx595 de salida ( y no en alta impedancia ). Para que la logica funcione se complica hacerlo con una AND, deberiamos usar otro tipo de compuerta. Lo que necesitamos es una NOR con salidas open colector (74xx33 ), esto nos va a permitir que la salida se active de las NOR solo cuando ambas entradas esten en 0.

Tambien se deberia usar unos pull-up en las lineas de Q0 a Q3 que son los que alimentan las NOR, ya que cuando se vaya a alta impedancia el shift-register, estas deben quedar en 1, y ademas necesitas las resistencias de pull-up para las salidas del 74c922 como ya comente antes.

Teniendo esto en cuenta, solo resta que :

- Para las columnas
    Para cuando no tengas nada presionado, deberias tener las salidas todos en 1, es decir Q0 a Q3 en este caso deberian estar todas en 1111.
    Para cuando se presione una tecla, deberias tener al menos un cero en las columnas. Ejemplo 1101
- Para las filas
    El boton detectado debe estar en 0, los demas botones deben estar en 1.

Ejemplo, si tuviera Q0 la primer columna y Q4 la primer fila, deberia poner 11101110

Lo que me preocupa que hasta que no cargues el registro de desplazamiento con un valor 11111111 va a parecer que esta presionado algun boton.
Habría que buscar alguna forma de actuar sobre el OE del registro de desplazamiento para que hasta que el PIC que tiene el teclado no lo diga, este se encuentre siempre en un estado de alta impedancia. Arreglado eso, pienso que debería funcionar.
« Última modificación: 30 de Agosto de 2017, 16:49:55 por KILLERJC »

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #6 en: 30 de Agosto de 2017, 18:01:43 »
Algo que se me ocurre es que puedes conectar las columnas del teclado y del 74C92 a la parte baja del puerto B del PIC y así tendrías una sincronía del barrido. Es decir las terminales X1 a la X4 irian conectadas a los puertos RB0 al RB3 respectivamente y luego a las columnas del teclado.
Luego, los renglones del teclado iría conectados a la parte alta del puerto B, es decir F1-F4 hacia el RB4-RB7 respectivamente. Configuras el puerto B como entrada y habilitas los pull-ups internos y nomas realizas la lectura del puerto B en su totalidad y dependiendo de la combinación será la correspondiente tecla presionada. Una vez que tienes esto, puedes usar la parte baja del puerto C, esto es del puerto RC0 al puerto RC3 y conectarlo a los pines de los renglones el 74C922. Esto es RC0-RC3 a Y1-Y4 respectiuvamente.
Ahora bien configuras el puerto C como entrada, esto permitirá que si no hay tecla presionada hay una lata impedancia en el puerto C y por lo tanto el 74C922 ve "1" en las terminales Y1-Y4. Cuando se presione una tecla lees la combinación el puerto RB, pero solamente tomas la parte alta que es la correspondiente a los renglones del teclado y luego esta la transfieres a la parte baja del TRISC, permitiendo que cuando un renglon esté en cero configurará el Y como salida. Luego el mismo valor de la parte alta del puerto B lo transfieres a la parte baja del puerto C y eso dejara la salida Y correspondiente en "0". De esta manera tienes sincronizado el barrido del teclado con el 74C922 y el PIC. Esto te permitira realizas modificaciones de modo que puedas desactivar el teclado hacia el 74C922 y volverlo activar mediante un password, entre otras.

Espero esto te sirva. No puedo poner un esquemático porque estoy en el trabajo. Pero en cuanto llegue a casa puedo ponerlo si es necesario.

Saludos.

Elreypic.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #7 en: 30 de Agosto de 2017, 19:53:06 »
Citar
Cuando se presione una tecla lees la combinación el puerto RB, pero solamente tomas la parte alta que es la correspondiente a los renglones del teclado y luego esta la transfieres a la parte baja del TRISC

Ahora que se sabe que se trata de un 74C922 tenes razon, es la mejor solucion.

Antes se suponia que era un PIC, por lo que uno deberia correr contra el otro PIC. Pero viendo que los tiempos del 74c922 son de en le peor de los casos 0.7*R*C donde R = 10K  y seguramente C debe ser de .1uF tendriamos 700us para hacer las cosas. Y un pic a 4Mhz sobra.

Asi que simple y corriente, tiene razon elreypic2, mejor hacerlo directamente con el PIC.

Desconectado elreypic2

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 1297
Re:Simular un teclado 4x4 de PIC a PIC
« Respuesta #8 en: 30 de Agosto de 2017, 23:56:18 »
El esquema que propongo sería algoi así:


* PIC_Keypad.JPG
(91.93 kB, 747x486 - visto 1205 veces)