Autor Tema: Pregunta básica de keypads  (Leído 3240 veces)

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

Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Pregunta básica de keypads
« en: 17 de Diciembre de 2006, 15:58:43 »
Buenas tardes,

Tengo un prototipo funcionando con una matriz de pulsadores, el que está en la imagen a la izquierda. Es la típica configuración en la que las etiquetas filas son activadas por cuatro pines de salida de un micro, y son todo unos menos una, que es cero y va rotandose secuencialmente (cada unos 20ms). Primero la fila1, luego la 2, etc... Al accionar un pulsador llegará un momento en el que su fila correspondiente será cero, y la etiqueta de salida columna será llevada a cero, y dirá al micro qué pulsador ha sido. La forma de generar las filas es usar dos pines de un micro, que son llevadas a un 74S139.
Hasta aquí lo tengo claro. La cuestión es que en el resto del circuito hay un 4555 sobrante. El 4555 es un decoder como el 74LS139, sólo que las salidas no son negadas, es decir, para una entrada binaria '00' el 139 daría un "1110" y el 4555 daría un "0001". El objetivo es adaptar el keypad, para que las filas no vengan dadas por el 139 sino por el 4555.

¿Se podría usar el esquema de la derecha? Entiendo que no, porque el proteus me dice que no, pero no entiendo porqué... Cuando no hay ninguna tecla pulsada el pin columna del micro está a 1 (?!?!?!)
« Última modificación: 17 de Diciembre de 2006, 16:00:15 por Rakamail »

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Pregunta básica de keypads
« Respuesta #1 en: 17 de Diciembre de 2006, 23:42:50 »
Si, debería funcionar.... si cambias la lógica de negada a lógica positiva tiene que andar siempre y cuando el barrido de las filas sea de unos en lugar de ceros (eso ya lo hace el 14555) y que cuando leas las columnas, leas los unos en lugar de los ceros. Deberías postear un circuito más completo para poder ver el problema en forma más amplia. Por ejemplo, qué micro tenés y qué puerto usas?
En principio considerá que no debés tener habilitado el pull-up de los pines de entrada del pic si trabajás con lógica positiva, esa sería una causa de error...
« Última modificación: 19 de Diciembre de 2006, 23:41:48 por Menta »
     

Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Re: Pregunta básica de keypads
« Respuesta #2 en: 18 de Diciembre de 2006, 17:23:28 »
Estoy usando el 16F84, y uso el puerto B para controlar el keypad, la entrada del mando infrarrojos y el bus de datos del LCD. También controlo un potenciometro digital.
Adjunto la parte del esquema que estoy usando.

Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Re: Pregunta básica de keypads
« Respuesta #3 en: 18 de Diciembre de 2006, 18:43:22 »
A ver si he entendido el asunto de los pullup, que tengo alguna que otra laguna en esto...

El pullup haría de divisor de tensión directamente, por lo que al habilitarlo, si la resistencia del keypad es de 10K por ejemplo, y la de pullup es de 4K7, pues si el pulsador (en la lógica positiva) no está accionado tendríamos 0V-resistencia 10K-resistencia 4K7-5V, o lo que es lo mismo, en el puerto tendríamos casi el nivel lógico "1", en vez del "0".


Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Entonces...
« Respuesta #4 en: 18 de Diciembre de 2006, 19:00:04 »
podría deshabilitar las pullup del pic, para que las entradas de las columnas pudiesen ser usadas con lógica positiva, pero entonces, la otra entrada, que es la de mando a distancia (pin RB4) ?? Y las salidas RB0-RB3 y RB7 necesitarían resistencias externas de 10K a 5V, ¿o no? ¿Cuando pueden llegar a ser indispensables las pullup?

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Pregunta básica de keypads
« Respuesta #5 en: 19 de Diciembre de 2006, 22:44:55 »
Exactamente, el pull up es el problema, yo te aconsejaría en principio que lo deshabilites y que lo implementes por resitencias donde sea necesario. ya que las R no serían muchas ni ocupan tanto lugar y aprovechás el 14555 que tenés. El pull-up (tanto por resistencias como el interno) sólo es necesario cuando en algún momento las entradas puedan quedar al aire y entonces el pull-up les da una referencia.
Usando lógica positiva necesitás una referencia a masa, sería algo como "pull-down"

Reseña:

Pull-up interno del puerto b: Cuando es habilitado, es "como sí" pusieses resistencias entre cada pin del puerto que actua como entrada (nunca las salidas) y la referencia positiva Vdd.
No se trata de un divisor resistivo, ya que no debés poner ninguna otra resitencia en el pin con pull-up habilitado.

Cuando el pin recibe un cero lógico circula corriente por la seudo-resistencia interna y en ella caen los Vdd=5 voltios y en el pin tenemos el cero.... en cuanquier otro caso, ya sea un uno lógico o el pin al aire, no habrá circulación de corriente por la seudoresistencia, por lo cual en el pin tendremos el mismo potencial Vdd= 5 voltios, tenemos un uno.
Por eso el pull-up se usa para lógica negativa

Para el caso de lógica positiva las resistencias de pull-down deben ser implementadas con resistores, debido a que el pic no contempla está situación internamente. Aquí, la llegada de un uno genera corriente por R y un uno lógico, en cualquier otro caso (incluyendo pin al aire, y ahí su ventaja)  R está forzando un cero lógico.

Con estos métodos, nunca tenemos indeterminadas nuestras entradas, que de otro modo estarían flotando y propensas a los ruidos.

Luego de la reseña me parece que debo aclarar que tenés que ponerle pull-down (resistencias a masa) en los pines RB5 y RB6, ya que estós están al aire cuando ninguna tecla se encuantra pulsada.
RB7 parece una salida de chip select por lo que no lleva resitor por ser salida.
No sé bien el funcionamiento de RB0, RB1, RB2 y RB3 si en algún momento son entradas y si esas estradas no vienen de otros chips, entonces se supone que podrían estar al aire alguna vez, le ponés resistencia, si no, no.
No sé el tema del mando a distancia, como es el dato que te envía si es un uno o un cero....
« Última modificación: 19 de Diciembre de 2006, 23:40:17 por Menta »
     

Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Muchas gracias por la explicación tan detallada
« Respuesta #6 en: 20 de Diciembre de 2006, 03:09:29 »
Viendo el reference manual de microchip, ya veo ahora que los pullup no son realmente resistencias, sino "mosfets" habilitados o deshabilitados.
Tomo nota de tus explicaciones, y veo que tengo que modificar un poco el código, porque por cuestiones del temporizador el código "machaca" el contenido de OPTION sin piedad.
La salida RB7 es un chipselect para un potenciometro digital, es una salida. RB0-3 es un bus de salida, usado para mandar información al LCD, para el 4556 y para la comunicación serie con el potenciometro. El mando a distancia de RB4 es la entrada de un TSOP1838, que en reposo está a "1"

Voy a actualizar el esquema y el software  :-/

Muchas gracias, ahora tengo una laguna menos  :-)

Desconectado Menta

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 607
Re: Pregunta básica de keypads
« Respuesta #7 en: 20 de Diciembre de 2006, 11:47:07 »
Exactamente, es un mosfet, por eso puse antes "como si" pusieses resistencias.
Me alegro de haber servido para algo y bueno...  a ver si cuando lo tengas listos compartes para qué usas todo eso que está interesante y me ha despertado curiosidad  :D
     

Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Re: Pregunta básica de keypads
« Respuesta #8 en: 21 de Diciembre de 2006, 02:56:57 »
Si el prototipo está ya funcionando, y perfectamente!!
Lo que estoy haciendo ahora es depurando, tanto el hardware como firmware, intentandolo hacer compacta la pcb, y legigle el código en assembler.  Todo esto para poder presentar en público una cosa decente.
Se trata de un previo de audio, al que por cierto le he hecho mediciones que han resultado bastante buenas.

Desconectado PalitroqueZ

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5474
    • Electrónica Didacta
Re: Pregunta básica de keypads
« Respuesta #9 en: 21 de Diciembre de 2006, 16:54:22 »
Hola Rakamail, esas placas te quedaron requetebien, ojalá a mi me salieran así :?

Salu2
Pedro
La propiedad privada es la mayor garantía de libertad.
Friedrich August von Hayek

Desconectado Rakamail

  • PIC12
  • **
  • Mensajes: 54
Re: Pregunta básica de keypads
« Respuesta #10 en: 01 de Enero de 2007, 05:28:16 »
Estoy teniendo algún problemilla con la simulación del proteus, porque se me queda atascado con la cpu al 100%, pero bueno, algo voy avanzando.
Estoy actualizando el esquema, y me he dado cuenta de que ni siquiera es necesario poner las pullup en RB5 y RB6, porque no quedan al aire en ningún momento, ya que las resistencias del keypad estarían conectadas por un lado a +5V y por otro a RB5-6 según se ve en las etiquetas "columna1"  y "columna2"


 

anything