# Multiplexor de 4x4 leds



## jcelec (Jun 21, 2007)

Hola;
soy nuevo en esto, y me gustaria recibir ayuda para programar un pic 16f84.
La idea es controlar 16 leds en un arreglo de 4x4 por el puerto B, multiplexados
por el puerto A a traves de un multiplexor de 16 canales CD4067, utilizando la salida del
multiplexor en el pin RA4 del pic.
El resultado seria: un led por cada switch en el multiplexor. Aunque paresca un circuito tonto,
pero evitaria el utilizar un 74154, un 4067, un contador binario, un LM555 y otros componentes.
todo esto sustituido por el pic y el 4067.
Estoy haciendo el programa en MPLAB y agradesco cualquier ayuda

Gracias


----------



## mabauti (Jun 21, 2007)

el cd4067 tiene solo una salida. Como vas a controlar a los 15 restantes?


----------



## jcelec (Jun 22, 2007)

multiplexando con el puerto A en las entradas A, B , C, y D del 4067, asi que seleccionamos uno de 16 switches por cada dato binario, obteniendo si es switch cerrado o abierto en la salida y mandando el dato por el pin 3 (RA4) del pic y a su vez encendiendo el led correspondiente a este dato binario. Espero me de a entender. Gracias


----------



## mabauti (Jun 22, 2007)

yo utilizaría el puerto B para eso.

Suerte y postea como te fué


----------



## jcelec (Jun 22, 2007)

El puerto B esta para la matriz de 4x4 leds
4 lineas para las hileras y 4 para las columnas con una resistencias de 120 ohms para cada columna


----------



## jcelec (Jun 22, 2007)

como podria enviar el diagrama?


----------



## mabauti (Jun 22, 2007)

> como podria enviar el diagrama?


 Utiliza el submenu de "Agregar una Imagen o Archivo al Mensaje" al poner respuesta


----------



## Francisco Galarza (Jun 22, 2007)

Hola. Yo usaría el método del barrido. Con 4 líneas del micro y un CD4017 lo solucionás.

Funcionaría así: ir prendiendo de a 2 LED's a la vez. Tendrías 8 grupos de 2 leds. Digamos que de cada grupo, un led se lama A y el otro B. Entonces conectás todos los negativos de los A juntos por un lado y todos los negativos de B por otro. Con dos resistencias los mandás a dos salidas del micro.
Ahora, a cada grupo de 2 leds les ponés los positivos de los 2 leds juntos, entonces tenés  un positivo común por cada grupo. Conectás los 8 positivos al CD4017 (secuenciador de 10 salidas). Con eso elegís qué grupo de leds se activa. El secuenciador lo controlás con dos salidas del micro: clock y reset para sincronizarlo.

Entonces, mas o menos, la idea es ir prendiendo de a 2 leds a la vez: prendes 2 y los tenés un ratito prendidos, despues los apagás y prendes los 2 que siguen y así los vas prendiendo. En realidad nunca están todos los leds prendidos pero el ojo humano, cuando ve un led que se prende y apaga a más de 50Hz, ya lo vé como si estubiera siempre prendido.

La rutina sería:

resetear el 4017
enviar a la salida el estado de los 2 led's seleccionados
esperar 5 milisegundos
enviar un pulso al clock del 4017
enviar a la salida el estado de los 2 led's seleccionados

y repetís eso hasta que ya pasaste por los 8 grupos de leds. Después reseteás el 4017 y empezás otra vez.

El problema de esto es que necesitás tener el micro esclavo de los leds, lo unico que hace es estar actualizando el estado de los leds. Tenés que ver como meter el resto del programa en el medio de esta secuencia pero se puede.


----------



## jcelec (Jun 22, 2007)

Hola Francisco
agradesco tu sugerencia, voy a tatar de enviar el diagrama, mi idea es tratar de controlar el encendido de cada led por cada switch.
Gracias


----------



## MICH010 (Jul 13, 2007)

oberve tu diagrama y me parece que esta bien, estoy de acuerdo con francisco utiliza el metodo del barrido, te sugiero lo siguente

1.lee el puerto de entrada adquiere el codigo binario, compara el codigo con una variable en ram x

si PORTB=x es igual realiza el barrido
si no guarda el codigo en la misma variable x=PORTB y realiza el barrido

2. barrido
lee la variable x

columna1=1
si x=1  fila1=1   else fila1=0
si x=2  fila2=1   else fila2=0
si x=3  fila3=1   else fila3=0
si x=4  fila4=1   else fila4=0
retardo de 1 mseg
columna1=0

columna2=1
si x=5  fila1=1   else fila1=0
si x=6  fila2=1   else fila2=0
si x=7  fila3=1   else fila3=0
si x=8  fila4=1   else fila4=0
retardo de 1 mseg
columna2=0

columna3=1
si x=9  fila1=1   else fila1=0
si x=10  fila2=1   else fila2=0
si x=11  fila3=1   else fila3=0
si x=12  fila4=1   else fila4=0
retardo de 1 mseg
columna3=0

columna4=1
si x=13 fila1=1   else fila1=0
si x=14  fila2=1   else fila2=0
si x=15  fila3=1   else fila3=0
si x=16  fila4=1   else fila4=0
retardo de 1 mseg
columna4=0

regresa a 1  ;nota las columnas y las filas son los bits de tu puerto de salida de tu matriz

espero te agrade y  te resulte mi propuesta

saludos



l


----------



## jcelec (Jul 13, 2007)

Gracias Mich, voy a probar.
El objetivo final: (una vez logrando experiencia en programar)
El switch esta abierto; el LED esta apagado,
El switch esta cerrado; el LED enciende y apaga,
El switch se abre de nuevo; el LED queda encendido.
Con un switch de reset los LEDs que esten encendidos se apagan y se reinicia el proceso.
La meta es lograr un monitor de Alarmas; (cuando esta una alarma activada o saber que una ves se activo al ver un LED encendido)
Todo esto ya lo logre, pero con un 4067,74154,74ls293,74ls27,555 y una ram 5101.
logrando utilizar el pic, se va a reducir a un 4067 y el 16f84 solamente.
Te puedo enviar el diagrama si me indicas el formato que pueda utilizar por este medio.


----------

