Controlar una matriz de leds con un pic 16f628a

Saludos a todos y feliz año! Ayer en mi blog publique un tutorial sobre como multiplexar una matriz de leds y me parece que puede ser de utilidad para la gente del foro, sobre todo para los novatos.

Para controlar la matriz de leds utilizo un pic 16f628a pero el codigo puede ser facilmente portable a cualquier otro pic. La matriz es de 5x7 leds, ideal para mostrar numeros y letras. Los 5 catodos de la matriz estan conectados al puerto A y los 7 anodos al puerto B. La multiplexacion se realiza encendiendo cada una de las columnas de la matriz a la vez, pero se realiza tan rapido que parece que todas las columnas estan encendidas de modo que en la matriz se vea lo que se quiere mostrar.

http://img177.imageshack.us/my.php?image=ledmultiplexge6.jpg

En mi blog esta un poco mas explicado el procedimiento para realizar la multiplexacion, otra pagina con un tutorial muy bueno sobre multiplexar una matriz de leds es http://www.winpicprog.co.uk/pic_tutorial13.htm

Adjunto el codigo de mi ejemplo, espero que a alguien le sirva y si surge alguna duda no duden en preguntar cualquier cosa. Si alguien quiere ver el ejemplo en funcionamiento

YouTube - Multiplex led matrix 5x7 - PIC 16F628a
 

Adjuntos

  • cmo_multiplexar_una_matriz_de_leds_905.pdf
    30.5 KB · Visitas: 3,142
Esta bien explicado. Será de mucha ayuda para los novatos.

Yo ahora mismo, también estoy haciendo el control de una matriz de puntos, pero el mio es un poco mas complicado. La matriz que utilizo yo és de 10x14 RGB.
Las columnas estan unidas entre si las lineas RGB. De manera que para su control, utilizo 14 lineas para selecionar la fila y genero 30 PWM para las senyales RGB que activaran las 14 columnas de un solo paso. La multiplexación la hago por filas.

Y como es lógico, para generar 30 PWM simultaneos + 14 lineas de selección de la fila, no puedo utilizar un PIC, ni un DSPIC. He optado por hacer el control con una FPGA.

Dentro la FPGA, he implementado una memória RAM de doble puerto de 420 bytes, correspondientes a los 140 leds * 3 (R+G+B). Desde un controlador exterior (Este si que será un PIC), le mandaré los 420 bytes via série a la memória RAM interna de la FPGA. La FPGA, independientemente, se encara de realizar la lectura de la RAM y generar los 30 PWM al mismo tiempo para cada columna.

El diseño del FPGA ya lo tengo echo y simulado. Ahora me queda hacer la PCB y probar. A ver si cuando lo termine, cuelgo alguna imagen o video de la matriz.

Un Saludo.
 
Paloky tu proyecto es bastante interesante. Mucha suerte. Espero que lo termines pronto y si se puede tambien cuelgues el codigo del fpga para repasar un poco de vhdl :D
 
El Codigo no lo hago en VHDL. Lo he diseñado en formato grafico.

Lo único que he programado en codigo AHDL es la maquina de estado.

Cuando lo termine, ya lo colgaré.
 
Bueno, esto ya se va a salir totalmente del tema de las matrices, pero como es eso de formato grafico? Yo de lenguajes de programacion de hardware solo conozco vhdl y verilog, si me dices algo acerca de ese formato grafico te estaria muy agradecido.
 
En modo gráfico es, insertando directamente puertas lógicas (AND, OR, Multiplexores, etc... ) y haciendo las conexiónes con lineas con todos los componentes.

Como si dibujaras en un CAD (Orcad, Protel, Altium, Eagle, etc...)
 
Es Gratuito, te lo puedes descargar del mismo fabricante de las FPGA.

En mi caso, utilizo las de Altera. www.altera.com
Bajate el software "Quartus II Web Edition".
Tienes que pedir que te envien un archivo de licencia, pero es gratuito.

Una vez tengas echo el dibujo (esquema), lo puedes simular, compilar y programar la PLD o FPGA.


El Otro gran fabricante de FPGA es Xilinx. Tambien dispone de su software gratuito.

Saludos.
 
hola pic man, una preguntota, espero me puedas ayudar, construí una matriz de leds de 8x8 con un pic 16f84 para control de las filas y un registro de desplazamiento (SN74LSN164) todo al parecer marcha bien pero cuando mando el primer dato al registro lo coloca al inicio, el problema es cuando mando el segundo; el primer dato pasa a la segunda columna pero con el segundo dato, es decir se colocan los dos valores y se borra el anterior, y así con los datos entrantes, no sé mucho al respecto de los registros de desplazamiento pero por lo que eh leido conservan el valor hasta que ya no hay registro a donde mandarlo un ejemplo hacer que prenda un led de la fila 4 col. 1 enseguida poner ensendidos la fila 4 col. 2 y fila 5 col 1. eso se supone que quiero hacer pero cuando lo intento el led que estaba en la fila 4 col 2 ya esta igual que el de la fila 5 col. 1, espero me puedas ayudar, de antemano gracias por el tiempo de leer este mensaje. pongo como referencia el link de donde saque el proyecto http://www.ucontrol.com.ar/wiki/index.php/Matriz_de_LEDS_de_8x8.
 
Saludos amigos, soy nuevo en el foro, apenas hace una semana comence con esto de los pics, al principio me sentia que no iva a aprender porque pensaba que un pic solo se programaba en assembler y es un lenguaje muy dificil de dominar, aunque con ganas se puede, comence comprando un PicKit 2 de Microchip y algunos microcontroladores para ir aprendiendo un poco, 16F84A, 16F628, 18F452 y el que trajo el kit que fue el 16F690, hice un proyecto parecido a este como segundo proyecto, ya que el primero casi siempre para todo el mundo es encender un led y aunque se ve muy sencillo cuando enciende el led da alegria ver que uno puede jajaja, en fin, hice una matriz, de 7x5, de manera que me mostrara dependiendo del estado de 2 pines una flecha hacia arriba o hacia abajo, mi pregunta es, como podria hacer para que esa flecha se desplazara? es decir, que tenga una animacion, tendria que hacerlo por codigo o existe otra manera? ya que creo que si uso un registro de desplazamiento creo que solo animaria la flecha a un solo lado mas no el otro cierto?

Gracias, de antemano
 
Y si tenés que usar un registro de desplazamiento universal que te permita hacer desplazamientos a la izquierda y a la derecha o con un registro de desplazamiento normal primero (flecha hacia arriba) pones los datos para que cuando hayan pulsos de relog muestre la flecha hacia arriba y despúes invertis el orden de los datos para que te muestre la flecha para abajo.

es solo una idea... si me equivoco correjime.
 
como es ese registro de desplazamiento universal? el detalle es que he visto en ascensores que cuando van bajando muestran una flecha corriendo hacia abajo luego que esta pasa vuelva a aparecer corriendo hacia abajo hasta que el ascensor se detiene, y viceversa cuando sube, quiero lograr algo asi, lo que no se es como funcionan los registros de desplazamiento al 100% para decirte si si o no y cuantos tipos de ellos hay
 
el registro de desplzamiento universal por ejemplo es un 74ls95 de entrada serial/paralela de datos este tiene 2 pines shift left y shift rigth con el cual controlamos hacia donde se mueven los bits, te recomiendo que veas el datashet del integrado , aunque sea solo un registro de desplazamiento de 4 bits
 
Hola! Solo les quiero contar que me hice el mio, pero solo lo tengo simulado en Proteus. Se los mando todo en el archivo adjunto. Esquemático y código fuente.

Noten que teóricamente en la realidad esto debería funcionar bien, quiero decir, que las letras se vean completamente y no en forma de parpadeo. Sale mi nombre "ALFRED----". Cuando abran el archivo de Proteus, vuelvan a agregarle el programa adjunto al PIC que sale.

La idea de esto es que lo vean no más, y si realmente quierem llevan el proyecto a la realidad, pero no prometo sorpresas posteriores.

Con la botonera que sale en la parte inferior pueden dibujar cualquier cosa, columna por columna.

Saludos!
 

Adjuntos

  • simulado_matrixled_7x45_189.zip
    24.5 KB · Visitas: 2,210
bueno ya finalice el codigo que me desplaze la flecha en ambas direcciones, fue largo pero no dificil, lo unido que me falta es una condicion que dependiendo de 2 entradas, me de la direccion de la flecha,es decir si a=0 y b=1 goto arriba, y si a=1 y b=1 goto abajo, y si no hay 1 en ninguno de los 2 que apague todo esperando a que encienda alguno en 1, el detalle es que no se formularlo en el Basic del Pic Simulator Ide.
 
Bueno, como ya les mencione hice el desplazamiento hacia la izquierda y a la derecha con programacion en el pic, lo que si me esta fallando es que utilice 2 entradas del pic, si la entradaA = 0 y entradaB = 0 entonces no hace nada, si B es = 1 desplaza hacia la izquierda, y si A es = 1 desplaza a la derecha, es decir, que me queda asi:

A B Funcion
1 1 Ninguna
1 0 Izquierda
0 1 Derecha
0 0 Ninguna


pero no se en que me estoy equivocando, a veces se activan solas, a veces aparece la flecha desplazando a un lado o al otro cuando no lo debe hacer, me podrian ayudar?
 
Atrás
Arriba