# ampliar entradas de un pic



## remramon2007 (Feb 7, 2008)

buenas, como estan por aca?

me anda surgiendo un problema y ando necesitando algo de ayuda... estoy necesitando ampliar las entradas de un pic es decir estoy necesitando leer unos... 100 pulsadores, pense en usar un par de 74hc165 multiplexados o algun integrado de ese tipo.
arme una placa y un soft para un píc 16f628 y un 74hc165 pero no me andubo asi que aca tiro esta consulta haber si alguien me puede orientar en el uso de este integrado o alguno parecido para hacer esto.
estube mirando la hoja de datos de este integrado (74hc165) y arme el programa en pic basic, que es el lenguaje que utilizo, pero no logre hacerlo funcionar    ...
bueno gente haber si alguien me puede tirar una mano.
algo importante no quiero que me pasen un codigo y un esquematico de algo todo lindo andando si no que quiero que me den una mano para poder armarlo.
bueno gracias por esta información y espero me puedan dar una mano

p.d: es algo medio urgente esto ya que estoy armando un programa que simulara un teclado de pc y servira para que personas con problemas motrices puedan usar una computadora...
y este proyecto sera donado a una escuela que ayuda chicos con estas dificultades, un abrazo


----------



## El nombre (Feb 7, 2008)

Pues tiene que funcionar con el 151 (o por ahi ) tienes uno de 16Bits. lo que puedes hacer es pegar algo para hacerse uno la idea del porque no te funciona.


----------



## Eduardo (Feb 7, 2008)

Si los pulsadores se pueden disponer como una matriz de 10x10 y tenes 10 entradas libres en el PIC,  le pones un CD4017 habilitando filas y el PIC lee las columnas.
Ese es el metodo clasico cuando ademas de tener los pulsadores cerca fisicamente no se pulsa mas de uno por vez.


----------



## pepechip (Feb 7, 2008)

hola.
tambien exite la posibilidad de leer los 100 pulsadores sin necesidad de utilizar un multiplexor.
Se trata de hacer que a cada pulsador lleve asociado una resistencia, de modo que el valor de esta resistencia sea distinto a los otros 99. El comun de todas las resistencias las pondrias a una unica entrada del pic, de modo que cuando este detecte la actuacion de algun pulsador utilizara una salida para conectar sobre la entrada anterior un condensador.
tu deveras de medir el tiempo que tarda el condensador en cargarse, ya que ese tiempo dependera del pulsador activado.
Una vez que se halla dejado de actuar sobre el pulsador, deveras de proceder a la descarga del condensador, con objet de dejarlo operativo para proximas actuaciones

Yo personalmente no he tenido la necesidad de probar este sistema, asi que a la hora de llevarlo a la practica no se si te encontraras con alguna dificultad.


----------



## Meta (Feb 7, 2008)

¿Con cual programa haces esto placa en 3D, o al menos eso parece?







[/img]


----------



## pepechip (Feb 7, 2008)

hola.
ese circuito esta realizado con el Wincircuit




la version de libre distribucion la puesdes descargar aqui
http://www.diselc.es/diselc/programas.htm


----------



## remramon2007 (Feb 7, 2008)

hola gracias por las repuestas que me han dado y aca sigo a los manotasos pidiendo ayuda

*El nombre* acá una consulta con codigo de algo que arme
https://www.forosdeelectronica.com/f13/pic16f628a-74hc165-12261/

*eduardo* pense en usar un 4017 pero... para leer los pulsadores tambien necesito varias lineas del pic y lo que quiero y necesito es "evitar el uso de pines" lo ideal es usar los integrados de los que pensaba usar, gracias igual por la idea

pepechip lo que me dices es lo primero que pense usar es medir el tiempo de descarga de un capacitor a traves de una resistencia.
es decir usar varios pulsadores conectados a una resistencia y a un capacitor pero... no me andubo... me leia un valor a la primer pulsada y la siguiente media cualquier cosa... por ese pense en meterme a usar un integrado de los tipos que mencione.
lo que si esto no quita que pueda usar un pulsador conectado a una resistencia si logro una lectura buena, estoy tratando de conseguir como vienen conectados los pulsadores de por ejemplo un equipo de musica para ver si puedo armar algo parecido "obvio que si usan varias patas de un micro no me servira"

bueno seguire investigando espero encontrar algo y gracias por responderme, un abrazo


----------



## alti (Feb 8, 2008)

Podrías usar una linea de interrupción (Tipo Daisy Chain), del tipo como usán algunos de los buses informaciónrmáticos antiguos. Te comento como poderlo realizar.

Usas una línea común para todas las teclas, puesta en colector abierto. Esta línea serà la de interrupción, en cada tecla pulsada deverás conectar esta línea a masa y por el lado del pic a una entrada. De esta manera detectarás que se ha pulsado una tecla (leyendo su entrada). Ahora usando un bus codificas las 100 teclas en binario (2^7=128 codificaciones) por lo tanto usando un bus de 7 bits, puedes codificar todas las teclas. Entra este bus en 7 entradas y de esta manera conocerás que tecla se esta pulsando, ya que solo activarás en la tecla las linias del bus correspondientes a la codificación en binario de dicha tecla. De esta manera con 8 entradas tienes suficientes, para detectar i codificar todas las teclas


----------



## remramon2007 (Feb 8, 2008)

hola *alti* gracias por tu respuesta la lei un par de veces y estoy intentando entender lo que me dices de hacer... pero... no logro entenderte.
seria demaciado pedirte si me puedes enviar un esquema?
espero puedas hacerlo y perdona la molestia que te causo con esto
un abrazo y gracias
p.d: seguire leyendo tu idea haber si logro entenderte, gracias


----------



## Eduardo (Feb 8, 2008)

Cuantas entradas/salidas te quedan disponibles para leer los pulsadores?


----------



## remramon2007 (Feb 8, 2008)

hola _eduardo_ gracias por responder y el proyecto recien lo estoy iniciando pero quiero hacer las cosas bien de entrada asi que por ahora tengo todas las entradas libres, ya habia pensado en usar unos 14 pines del pic y dejar dos libres uno para enviar datos y otro para recibir pero... para que hacer algo asi si tambien puedo hacer las cosas de mejor manera y tener mas pines libres para futuras modificaciones.
aparte para que usar varias patas del pic si tranquilamente puedo tal ves usar un solo puerto (8 pines) o menos para leer todas las teclas.
por ejemplo hace un tiempo use un cd4051 y usaba 3 pines para leer unos 8 pulsadores ahora me dijieron del 74hc165 que puede leer mas entradas y usa 3 pines, pense en poner 2 integrados de estos multiplexandos los pulsadores y bueno  tendre para leer unos cuantos pulsadores.
de ultima usare un pic y un cd4017 o alguno de ese tipo y listo pero... antes quiero agotar otros recursos aparte como todo ahora tengo la espina de hacerlo con usando la menor cantidad de pines jajajajaun abrazo


----------



## Eduardo (Feb 8, 2008)

La mejor eleccion depende de la cantidad y como estan fisicamente dispuestos los pulsadores.

Si tenes 100 pulsadores en un mismo tablero, conviene disponerlos como una matriz, como preferis no usar 10 pines para lectura, en lugar de hacerla de 10x10 la haces de 16x8 (hasta 128 pulsadores), las filas se direccionan con un CD4514, las columnas se leen con un CD4051 + 1 resistencia de pulldown y el direccionamiento lo hace un CD4040, tambien usas 3 pines (clock,data y reset).
Normalmente solo algunos pulsadores pueden estar pulsados a la vez, ahi se elige con cuidado la fila y columna donde van y se ponen diodos si hacen falta.

Si los 100 estan dispersos y en grupos, ahi conviene usar registros de desplazamiento como te dijeron. Con registros de 8 bits te resultan 13 integrados + 100 resistencias de pull down, pero es mucho mas importante la simplificacion del cableado.

Con menos cantidad de pulsadores (14 por dar un ejemplo), si te conviene registros de desplazamiento, despues es medio nebuloso y depende de la aplicacion decir cual es mas apropiado.


----------



## remramon2007 (Feb 8, 2008)

bueno gente gracias! ya lo tengo decidido voy a usar un 4051 y estoy viendo entre unos cd4017 que tengo aca o si me llego a una casa de electronica y uso unos cd4514 como me menciono _eduardo_ , asi que bueno he llegado a una desicion por suerte jajaja
hoy me sente tranquilo y mirando encontre como funciona el cd4051 que era algo que no podia hacer andar me estaba olvidando de poner INH a +V para leer los pulsadores.
lo que me gustaria saber ya que estamos es ¿como se hace para leer los datos obtenidos de los pulsadores de un 74hc165 es decir mira pone ?
es decir mira fijate de poner tal pata a tal lugar tal otra a esta otra y luego por aquella pata sale tal información me explico?
bueno eso me gustaria que me digan ya se alguien me dira lee el datasheet y lo hago pero... mi ingles no es nada bueno, se que es mi culpa y no la de nadie mas pero... bueno es lo que hay! y hay alguna direccion donde hay hoja de datos en español?
bueno si alguien necesita saber como trabaja el cd4051 o el cd4017 pregunten aca y les contestare 
un abrazo y gracias por el tiempo que dedican a responder mis consultas


----------



## Eduardo (Feb 8, 2008)

> ...... y mirando encontre como funciona el cd4051 que era algo que no podia hacer andar me estaba olvidando de poner INH a +V para leer los pulsadores.


INH es Inhibicion, tiene que estar a masa para poder leer, a +V queda en alta impedancia.



> ..lo que me gustaria saber ya que estamos es ¿como se hace para leer los datos obtenidos de los pulsadores de un 74hc165 es decir mira pone ?
> es decir mira fijate de poner tal pata a tal lugar tal otra a esta otra y luego por aquella pata sale tal información me explico?


El 74HC165 es un registo de desplazamiento de entrada paralelo-salida serie.
Primero tiene que cargar las entradas en los registros, eso lo haces con una transicion 1-0-1 del pin 1 (Serial_Shift/Parallel_Load).
Despues de eso tenes que leer la salida (pin 9) que va a tener el valor de H (pin 6), a partir de ahi con cada ciclo de reloj vas leyendo secuencialmente G-F-E-D-C-B-A, si tenes varios 74HC165 en cascada seguis haciendo ciclos de reloj y leyendo.
Una explicacion mejor? ==> leer el datasheet y prestar atensión al timing.


----------



## remramon2007 (Feb 9, 2008)

gracias *_eduardo_* mirare lo que me comentaste y te contare haber como me fue, y en caso de no hacerlo funcionar subire algun codigo y si me dsa una mano lo vamos limando hasta que funcione, por cierto programo en basic espero que conozcas el lenguaje jaja
un abrazo y gracias


----------



## Meta (Feb 9, 2008)

Busca información sobre el expansor de bus I2C PCF8574, puedes meter varios de este IC en el bus I2C y tienes entradas y salidas de sobra.


----------



## remramon2007 (Feb 11, 2008)

gracias por la respuesta y me pondre a investigar =mente por ahora lo estoy manejando con un cd4017 y con el pic pero... igualmente me pondre a investigar los otros integrados que me comentaron ya que... "no hay que limitarse" a solo salir del paso siempre hay que investigar mas y mas para la proxima o para lo mismo que estamos haciendo para tener mas variables 
gracias y un abrazo!


----------



## gabrielg (Feb 26, 2008)

La opcion de META es la mejor y podrias utilizar un micro realmente chico, salvo lo que debe hacer el programa. Ahora, si empleas tantas entradas deberías también utilizar muchas salidas, normalmente la relacion es de 2/1 (2 entradas por cada salida).

Puedes emplear el CD4067 que tiene 16 entradas multiplexadas. Deberiaas utilizar como 7 de estos chips y la correspondiente decodificacion de direcciones con un CD4028 y listo.

Coloca en el foro la solución que adoptas y queremos ver el circuito impreso.
Saludos y suerte


----------

