# Controlar una matriz de leds con un pic 16f628a



## pic-man (Ene 7, 2008)

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


----------



## Paloky (Ene 7, 2008)

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.


----------



## pic-man (Ene 7, 2008)

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


----------



## Paloky (Ene 7, 2008)

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é.


----------



## pic-man (Ene 7, 2008)

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.


----------



## Paloky (Ene 8, 2008)

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...)


----------



## pic-man (Ene 8, 2008)

Ah vaya, jamas habia visto algo asi. Con que programa realizas esos diseños? Se ve algo interesante.


----------



## Paloky (Ene 8, 2008)

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.


----------



## pic-man (Ene 8, 2008)

Orale, muchas gracias por la información, me podre a probar


----------



## boy_6_6 (May 22, 2008)

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.


----------



## kosovo37 (Ene 24, 2009)

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


----------



## Moyano Jonathan (Ene 24, 2009)

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.


----------



## kosovo37 (Ene 24, 2009)

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


----------



## Moyano Jonathan (Ene 24, 2009)

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


----------



## kosovo37 (Ene 24, 2009)

Asi si me puede servir, leo el datasheet y te comento, gracias amigo por tu ayuda, aunque tambien ese desplazamiento se puede hacer por programacion verdad?


----------



## ELIUSM (Ene 24, 2009)

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!


----------



## Moyano Jonathan (Ene 24, 2009)

De nada , en el archivo que posteo el amigo eliusm se encuentra bastante explicado el código que utiliza y funciona muy bien en el proteus.


----------



## kosovo37 (Ene 24, 2009)

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.


----------



## kosovo37 (Ene 31, 2009)

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?


----------



## Moyano Jonathan (Ene 31, 2009)

tenés que generar un delay por software que elimine ruidos transitorios en las entradas así no se te activan solas.


----------



## kosovo37 (Ene 31, 2009)

Como serian esos delays en este caso? es decir, por cuanto tiempo? y en donde colocarlos? ya que estoy programando con pic basic del pic simulator ide


----------



## Moyano Jonathan (Feb 1, 2009)

mirá yo te lo pongo en C vos despues lo modificas para hacerlo en basic.


```
rutina_antirrebote() {
delay_ms(10); // Espero 10 ms.
if(input(PIN_BO)) { // Se fija si el pin RB0 (en caso de que tengas un pulsador conectado ahí) esté presionado.
 delay_ms(10);       // En caso de que así sea espera 10 ms para que lo dejes de presoinar.
   }

}
```

Esta rutina la puedes modificar a tu gusto cambiandole los valores del delay a tu gusto.

Espero te sirva.


----------



## dayanmata (Feb 19, 2009)

Buenas amigos monte el siguiente circuito de una matriz de led con el pic 16f84a y me funciono perfecto pero el pic se me daño y consegui fue un pic16F628A que supuestamente lo sustituye pero ahora no me trabaja a pesar de hacer los cambios en el programa ahora la matriz no me sale como antes adjunto el programa original para el pic 16f84 y luego el que modifique  para el pic 16f628A por favor auxilio. quiero que me digan si hay algun error en el programa ya que no se mucho de programacion en asembler. o si tengo que cambiar algo en el circuito para que se adecue para trabajar con el pic 16F628A.


----------



## alejatobm208 (Mar 4, 2009)

hey amigo estoy tratando de hacer alg parecido pero es que soy muy novato en esto sera que esto se puede hacer con comunicacion con el PC usando el mx232, si es posible? por favor ayudenme que estoy un poco perdido


----------



## dayanmata (Mar 4, 2009)

ok amigo me imagino que si se puede hacer algo para hacerlo mediante la computadora la verdad yo tambien soy un poco novato, deberias buscar ayuda en el foro. esta matriz te garantizo que trabaja 100%, pero para programarle lo que dice tienes que hacerlo en el archivo .asm. el pic628a tiene entrada para comunicacion serial por la red salen varios temas de como usarla tambien hay una pagina de ucontrol donde hablan del tema con una matriz pero no dan el proyecto completo solo te dan ideas de lo que podrias hacer.dejame cuando consiga los link te los paso a ver si te sirve para algo.busca el tema sustituir pic 16f84 por pic 16f628a hay sale la matriz que hice es 100% funcional esta todos los archivos y el esquema
.


----------



## alejatobm208 (Mar 5, 2009)

gracias amigo, en lo que me pueda ayudar la verdad es q he buscado muchisimo y no he encontrado nada,ademas no estoy nada familiariado con pic´s asi que esto se complica aun más, pero estoy leyendo para  ver que entiendo.
 le recomiendo como hacer esto con el pc

gracias


----------



## pfascio (Sep 1, 2009)

Hola amigos estoy haciendo ingeniería reversa de un sistema de secuenciado automático de una tira de leds (cada uno tiene tres colores) y se controlan a través de RGB con una alimentación general de 12v dc en el controlador.El tema es que los colores que se forman alimentando cada cañón pasan por una secuencia de transisción que permite ampliar la gama de colores en forma de fade out dando un aspecto muy delicado en el pasaje de los colores.Porsupuesto que cuando el color es uno de los primarios ,en ese momento dicho cañon tiene su voltaje máximo y luego este voltaje va bajando mientras sube el de los otros cañones generando asi la gama de colores.Todos funcionan con el +12 en común y varian sobre -12 en cada cañon.Me interesariá emular esto con un PIC si fuera posible ,se me ocurre que con pwm. Disculpen lo largo del mensaje pero es para aportar datos relevantes, si alguién tiene una idea de por donde debo empezar el análisis se los agradezco.Atte Pablo


----------



## cesar Alvarez (Sep 20, 2009)

Dayanmata.
Yo tambien estoy tratando de hacer una matriz de leds, con el PIC 16f628
La tengo funcionando , con un pequeno problema a nivel de refrescos.
pero de todas maneras se ve bien.
logro desplazar varios mensajes , que se van moviendo por los doce paneles de leds 7x7
con el cual lo hise.

siquieres podriamos cambiar información y cuando lo hayamos logrado desarrollar bien, lo podriamos postera en el Foro. ya corregido y funcionando.


----------



## ju0020 (Nov 27, 2009)

Hola,
pic-man, 
Tu as dicho que hiciste la matriz com Quartus II en formato grafico, como en la figura http://micropic.files.wordpress.com/2008/01/ledmultiplex.png
Yo estoy empezando a utilizar Quartus II ahora, y no consigo encontrar el Symbol File de pic16f628a. Como lo as colocado en Quartus??
Muchas gracias

(Perdon que mi español no es muy bueno)


----------



## beto3574 (Abr 15, 2010)

hola veo compañeros..yo necesito hacer una matriz de leds de 7*20 y no se como hacer el desplazamiento...ya puedo hacer una letra pero la verdad no se como manejar el clock de los registros 74164 que son los que me desplazan por columna ..estoy trabajando con picbasic...alguien me podria colaborar..es que los ejemplos que veo son en assembler...muchas gracias por su atencion

saludos


----------



## PiTter M (Sep 1, 2010)

Hols a todos soy novato en esto y queria hacer un panel de leds como proyecto
pero no puedo lograr programar para q*UE* la matriz muestre todo un mensaje 
abria alguien q*UE* m pueda ayudar


----------



## xaviergarvi (Oct 21, 2010)

necesito controlar 60 salidas para 20 leds rgb como puedo hacer esto con un pic?? en algun lado me dijeron que se puede con 4 pic 16f628 pero no tengo idea de como hacer eso alguien tiene un diagrama?? o una idea de que pic usar??


----------



## cesar Alvarez (Oct 22, 2010)

A que te refieres con controlar.
Encender todos a la vez?.
Encenderlos secuencialmente?.
Cuando un pic no dispone de los suficientes pines para sacar informacion, se puede multiplexar, esta informacion, tal vez si utilizas un registro de desplazamiento. con SN 74HC164  puedas controlar los 60 y hasta mas, 
Aunque la salida del registro es secuencial. a la velocidad apropiada se podria dar la sensacion de todos los leds iluminadpos al mismo tiempo.


----------



## xaviergarvi (Oct 22, 2010)

lo que quiero es usarlos en modo secuencial con leds rgb como puedo hacer esto?? alguien tiene un diagrama para una idea porfavor se los agradecería


----------



## cesar Alvarez (Oct 23, 2010)

xaviergarvi.

*Oye Hice un diagramita en Pint, Peo no he podido adjuntarlo , no se como hacerlo. 
Tal vez te lo podria enviar directamente a tu Correo.
O que alguien me ensene por favor, como adjuntar imagenes y diagramas.*


Mira . esta seria una de las muchas maneras de hacer lo que tu quieres.

SE podria hacer un circuito similar a este , para manejar los LEDS RGB.


Enviariamos primero un 0  a PORTB 0. Al pasar por el transistor Tendriamos a la salida  5 Volts.

Enviamos un pulso a Data por   PORTA,0

Ahora Enviamos Un Clock A los SN 74HC 164 que sea nesesario para manejar la cantidad de leds que queremos, cada SN 74HC164 Maneja hasta 8 salidas * ( 8 Leds )
La ultima salida de cada SN 74HC164 se conecta al pin  Data ( pin 1y2) de el siguiente SN 74 HC 164 y asi susesivamente hasta lograr la cantidad de salidas que queremos

Veamos:

Iluminare los LEDS Rojos.

BCF 		PORTB,0	; Salida para primera hilera de LEDS Rojos
BCF		Data		; DATA en 0 
BSF		Clock		; Ingresa el 0 Del DATA, sale un 0 Por la primer salida de 
				; el SN 74HC164.
				; El primer Led Rojo Enciende, Anodo( RB0 = 5 Volts
				; Katodo 0 Volts ( salida 1 del primer SN 74HC)	

CALL		Retardo_1ms	; Dura iluminado este Tiempo
BCF		Clock		; Pongo el reloj en 0
BSF		Data		; Ahora coloco DATA en 5 Voltios .y lo dejare asi hasta 
				; Ilumniar la totalidad de los LEDS ROJOS
CALL		Retardo_1ms	‘ Se apaga el Led Durante Este Tiempo.

; Ahora bien Lo que haremos ahora en adelante es DESPLAZAR el Primer 0 ( Cero ) que introdujimos En Data,  Desplazandolo por la totalidad de los SN 74HC164 que Hayamos Colocado.

BSF		Clock			; Desplazo el 0 ( cero)	 Saldra cero por la segunda
					; Salida del primer SN 74HC,
CALL		Retardo_1ms		: el Segundo LED ROJO  ilumninara durante este T.
BCF		Clock			; Cero al Clock
CALL		Retardo_1ms		; Ledapagado durante este tiempo.

BSF		 Clock			; Asi iremos desplazando el Cero por 
CALL		Retardo_1ms		; Shift Register
BCF		Clock			; iluminando cada led
CALL		Retardo_1ms		; Hasta Completar los 60  o ma sleds.
					; Cuando terminemos.
					; Ahora colocaremos Cero en la salida de RB1 y
					; Repetiremos lo anterior para iluminar la hilera de 						; Verdes
;Esta seria una de las muchas maneras de hacer un desplazamiento secuencial para los LEDS.

#DEFINE	Clock		EQU	PORTA,0
#DEFINE	Data		EQU	PORTA,1

Al comienzo Coloco  en alto Las salidas de PORTB, para que ninguno illumine,

BSF	PORTB,0
BSF	PORTB,1
BSF	PORTB,2

Y para habilitar cada hilera, Simplemente Coloco un cero en la salida del PORTB correspondiente

BCF	PORTB,0
Los demas  PORTB seguiran en alto hasta que decida Hacerlos Iluminar.

Puedo tambien Hacer

#DEFINE	Clock		EQU	PORTA,0
#DEFINE	Data		EQU	PORTA,1
#DEFINE	Rojo		EQU	PORTB,0
#DEFINE	Verde		EQU	PORTB,1
#DEFINE	Azul 		EQU	PORTB,2

Quedaria entonces
BSF	Rojo
BSF	Verde
BSF	Azul
Para que por ahora  ninguna hilera illumine.

Para que una \hilera illumine

BCF	Rojo
BCF	Data
BSF	Clock
CALL	Retardo
BCF	Clock
BSF	Data
BSF	Clock
Call	Retardo
BCF	Clock
CALL	Retardo


Y ETC.


----------



## PicC (Oct 23, 2010)

ju0020 dijo:


> Hola,
> pic-man,
> Tu as dicho que hiciste la matriz com Quartus II en formato grafico, como en la figura http://micropic.files.wordpress.com/2008/01/ledmultiplex.png
> Yo estoy empezando a utilizar Quartus II ahora, y no consigo encontrar el Symbol File de pic16f628a. Como lo as colocado en Quartus??
> ...



hola, no sé si ya te allan contestado tu pregunta, y te digo que tu imagen que tienes alli, nada que ver con lo que es fpga ya que nunca vas a encontrar un pic alli, el un fpga lo que tu creas es hardware y si necesitas algo tienes que programarlo y pasarlo a algo grafico en pocas palabras si quieres hacer un registro de corrimiento, memoria ram un cpu tienes que hacerlo tu mismo programando VHDL y la vdd yo casi no uso el modo grafico ya que le quita la emocion de programar un fpga y en este caso no sabria decirte que tipo de librerias alla alli y como que tipo de harware puedes encontrar, lo que si estoy seguro es que nunca vas a encontar un pic alli.
Saludos!

nota contesto tu pregunta un año despues, ya asta as de saber esto, pero detodos modos alos que lean esto apenas espero y les sirva...


----------



## yager (Ene 3, 2011)

hola a todos ,necesito de su gran ayuda amigos 



  esta es una matriz 7X40 lo probe en proteus funciono muy bien  y arme luego el circuito, tambien el panel de leds,etc ,pero a ultimo momento perdi el codigo hex para el pic ,resulta que el sito web ya no existe,pido encarecidamente si alguien lo tuviera por favor, la idea original del proyecto es una matriz 5X24  Jose Pino (http://Josepino.com) y que luego la modifico Marcos Aguilar(http://mksdgo.homelinux.com) para una matriz 7X40 ,si no me equivoco el  hex es 
	
	



```
5MATRIZOKI17.HEX
```


----------



## vaco_802808 (Ene 3, 2011)

HOla amigo yager dime  que programador usas  y lo principal cual es el diagrama para asi poder ayudarte ha ademas que anuncio necesitas sacar


----------



## yager (Ene 3, 2011)

gracias por contestar amigo vaco_802808 ,la ventaja de este circuito es que se puede meter el anuncio que tu quieras hasta 128 letras desplazandose,a traves del eprom del pic al momento de grabar el pic (winpic800) ,adjunto esquema que solo es para 5X24 la modificacion incluye para una matriz de 7X40 para una mejora de la visualizacion de los caracteres ,no se como lo hizo pero habilito los pines 11 y 12 (RB5 y RB6) del pic  ademas adjunto el hex para 5x24 nose como se podia modificar mi fuerte es el PBP pero el assembler esta muy dificilismo ,Sds


----------



## cesar Alvarez (Ene 4, 2011)

Yager.
Yo creo que trabajar en base al hex de otroas personas no es muy bueno.
Ya que uno no sabe en realidad como esta trabajando el programa.
Lo primero que debes hacer es seleecionar con que pines del pic ( puerto ) vas a alimentar la matriz. Anodo o catodo?.
Para manejar una matriz de mas de  7 x40  lo mejor es uysar un registro de desplazamiento ( SN 74HC164 ) por ejemplo.
Ahora bien seleccionar por que pines del PIC vas a manejar el DATA y el CLOCK para el Shift Register.

cada shift register tiene 8 salidas por lo tanto nesesitas 5  SN 74hc164.
para el primer SN  unes los pines 1 y 2 . nde ahi en adelante ... la ultima salida de cada SN 74HC debe ir al pin 1 y 2 del siguiente SN. 
Los Clock los puedes conectar en serie ( todos los clock de los  SN  Conectados en serie.)

Si quiero ilumninar toda una hilera de LEDS ( 7 ).
Envio  7 unos  o 7 ceros ( de acuerdo a como tengas polarizados los leds ).Por el PORTB 
B'00000000'   o  B'11111110'  ( anodo o catodo ?)
Ahora envio un pulso de Data desde un pin por ejemplo RA0, hacia  los Pines 1 y 2 del primer SN74Hc.
Ahora envio un Clock por ejemplo por el PORTA,1. hacia el pin de clock del SN74HC.
Bien ya tenemos iluminada esta primera columna. 
Ahora enviamos el siguiente dato que queremos mostrar ., lo enviamos por el PORTB  B'xxxxxxxx'
YA NO ES NESESARIO ENVIAR MAS DATAS, enviamos ahora un pulso de clock.
Ya se desplazao e iluminara la segunda Columna.
De esta Forma hasta la columna 40.
para seguir enviando informacion desde la primera columna , enviamos nuevamente el dato deseado por PORTB, y AHORA SI otro Pulso de data, y uno de Reloj.
Esta clase de programa la he hecho es en ASSEMBLER, es el unico  que conosco.
esto es a groso modo pero asi es como funciona la matriz ( de acuerdo a como yo las he hecho, pero claro  debe haber un sin fin de maneras mas ).
Habria que ver como esta construido tu panel para tratar de ayudarte a desarrollar tu programa.


----------



## yager (Ene 5, 2011)

amigo cesar gracias por responder ,yo mas q nadie quisiera hacer el programa  pero el assembler no lo manejo ,por q me resulta muy complejo y largo hacer el programa ,trate de realizarlo con pic basic pro pero me falta dedicacion, talves por falta de tiempo  ,se nota que sabe mucho del shiftregister una pregunta amigo el 74hc164 tambien puede servir para una desplazamiento de arriba para abajo o viceversa  de acuerdo al sgte esquema


----------



## vaco_802808 (Ene 5, 2011)

Claro  que si sirve para  el desplazamiento que desees  todo depende del programa como lo realices
te cuent oque yo tengo el mismo diagrama puedo escribir las letras que yo dese,e pero no se como hacer que se desplacen las letras ese es mi gran problemilla, estoy programando en pic basic simulator


----------



## fdesergio (Ene 5, 2011)

pic-man dijo:


> 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.
> 
> ...



Lo estuve mirando y esta buenisimo, gracias, yo nunca hice multiplex pero ya es hora de comenzar a hacerlo, gracias, chauuuuuu


----------



## CHR (Abr 3, 2011)

Hola con todos.
Soy un novato en esto de los pics, solo se programación en basic de proton.
Estuve leyendo acerca de la matriz de leds, segun la información que he encontrado el registro de desplazamiento se puede hacer con un 74LS164, pero mi problema esta en que los bit se mandan uno por uno y no se cual comando usar para hacer este trabajo.
Segun la pagina de ucontrol el comando es ShiftLeft un comando de PICsimulator ide, pero cual seria el equivalente de ese comando en proton, o una rutina que haga lo mismo.
Gracias por su ayuda de antemano, adjunto la pagina de donde saque la información:
http://www.ucontrol.com.ar/Articulos/matrizled7x32/matrizLED7x32.htm


----------



## link08 (Abr 25, 2011)

disculpen de casualidad alguien tiene el codigo.hex de la matriz de 7x5 la k exponen al principio???
de antemano gracias


----------



## osk_rin (May 7, 2011)

compañeros les comento que hice la matriz de leds que aparace en la pagina de u control esta para se exactos la de 8x8  

http://www.ucontrol.com.ar/wiki/index.php?title=Matriz_de_LEDS_de_8x8

el asunto es que la arme pero no me funciono no hace nada de nada jejej no enciende, probe con el tester las salidas de el pic para checar voltajes e hice las medidas correspondientes, de voltaje continuidad y ese tipo de cosas, las mediciones a mi parecer están bien pero el problemas es que no funcciona :S 

solo programe el pic pero no estoy seguro si también se programe la eprom, si alguno de ustedes ya la armo  y tubo algún problema similar agradecería mucho su ayuda,

un gran saludo.


----------



## 1119677 (Jun 2, 2011)

yager dijo:


> amigo cesar gracias por responder ,yo mas q nadie quisiera hacer el programa  pero el assembler no lo manejo ,por q me resulta muy complejo y largo hacer el programa ,trate de realizarlo con pic basic pro pero me falta dedicacion, talves por falta de tiempo  ,se nota que sabe mucho del shiftregister una pregunta amigo el 74hc164 tambien puede servir para una desplazamiento de arriba para abajo o viceversa  de acuerdo al sgte esquema





esta muy bueno el proyecto de esa matriz... yo he esatdo teniendo problemas para aumentar mi mensaje de 256 a 512 .... y no le hallo... kiiero saber si ya conseguiste el archivo y ... ver si me podrias ayudar.... saludos


----------



## ivan147007 (Jun 30, 2011)

Soy nuevo es esto pero mi preguntaba, si hay alguna forma de ingresar el mensaje *por un* teclado y si se tendria *que* modificar el circuito para ello y *que* lenguaje de programacion usaria?


----------



## cristian76 (Jul 28, 2011)

hola de igual manera que el amigo yager quisiera hacer oh entender la programacion encontre el asm y el archivo hex de esta pagina. http://www.circuitdb.com/circuits/id/64
mi problema esta es que indica en que se debe de colocar tu mensaje en la eeprom de datos del pic, siendo sincero no se como hacerlo estaria agradecido en que pudieran sakarme de esa duda , gracias.


----------



## sbl (Ago 1, 2011)

hola cristian76 lo que tienes q hacer es implementar la rutina de escritura de la eepron del pic esta en la hoja de datos del pic para rescatar las veriables necesarias


----------



## emmanueldj (Oct 4, 2011)

Hola...alguien podria colaborar para explicarme como hacer estos efectos tal cual el video. Tengo un amigo que sabe de pic pero resulta que vive trabajando como para que se cuelgue armando algo. desde ya les agradesco y si necesitan info de audio,iluminación y/o laser rgb profesional chiflen y con gusto pasare toda la info necesaria.

me olvide de subir el link.jej


----------



## cesar Alvarez (Oct 7, 2011)

Bueno la pregunta del millon es . ? que necesitas ?  El Circuito Electronico, El programa para gravar en el PIC, ?.

Esto por un lado, ademas que Pic quieres utlizar.

Yo te podria ayudar con el programa ( Solo se Programar en Assembler) .
Esto vendria a ser como el famosisimo programa y circuito del auto fantastico.

Solo que aqui los Leds Se colocan de Forma Circular..
Con el adecuado programa se le puede dar la secuencia, orden y efectos  que uno quiera.

Entonces Comenta que es esactamente lo que quieres.

cesaar


----------



## emmanueldj (Oct 11, 2011)

gracias cesar por responder. yo de pic no se mucho. pero creo que seria algo asi como un PLC? pero en versión electronica y con otro lenguaje de escritura. El programa que maneja mi amigo es assembler, asi que viene barbaro que sepas ese. necesitaria supongo yo que seria la hoja con esos valores para que el pic correspondiente al video haga eso. supongo que sera un 16f? desde ya agradesco la paciencia y la buena onda. Y como dije antes, si necesitan apoyo en audio e iluminación profesional no duden en consultarme. gracias


----------



## cesar Alvarez (Oct 11, 2011)

Hola emmanueldj ;

Bueno No se Como colocar dibujos o diagramas aqui en el foro , por lo tanto tratare de explicarte como c Armar tu Circuito.

Podrias comenzar en un Protoboard.

olocas tu PIC 16F628 

Al Pin 5 Le conectas GND ( 0 Voltios)
Al Pin 14 Le Conectas 5 Voltios ( Bien Filtraditos D.C )

Este Microcontrolador No requiere Oscilador Externo ya que lleva uno interno.
Ahora Bien A el PIN 9 Colocas el extremo de una resistencia de 330 Oms El otro extremo a el anodo del LED ( La patica mas larga de el LED es el positivo, por lo tanto la mas corta Negativo) El Otro Extremo del LED PATA CORTA A GND o Volts.

Asi se hara con cada pin Desde el 9 Hasta el Pin 13 .

Deberas conseguir un programador de PC ( sSi tu amigo trabajo con PICS debe Tener un que te Preste)

Aqui esta el programa.


```
; ************************************************* LUCES_1.asm ************************************************** ******

;;;;; Estimado amigo Si quiere iniciarse en el mundo de los microcontroladores PIC Le recomiendo el libr o

;;; ********************************** MICROCONTROLADOR PIC 16F84 Desarrollo de Proyectos Editorial Rama**********
;; Es un exelente libro Presisamente la libreria de Retardo en este ejercicio es de ese LIBRO.
;;;; Usted podra escojer el tiempo que quiera , desde 4 microsegunos hasta 10 segundos  mezclandolo, de acuerdo a su gusto.
;;;; esto es solamente una muestra de lo que usted pidio hay ptras maneras de llegar a el mismo final.

LIST P=16f628A
INCLUDE <P16F628A.INC>





ORG 0x00
GOTO Inicio

Inicio
MOVLW 0x07
MOVWF CMCON ;desactivamos Comparadores
BSF STATUS,RP0 ;Seleccionamos banco 1
CLRF PORTB ; seleccionamos PORTB todo Como salida
MOVLW 0x07
MOVWF CMCON ;desactivamos Comparadores
BCF STATUS,RP0 ; Selecciopnamos Banco 0
CLRF PORTB

Principal

;;; ******************* Seleccionamos la secuencia y orden de encendido de los LEDS.
; Al Finalizar Autoamticamente volvera a continuar, quedara en este loop FOR EVER

MOVLW B'00000000'
movwf PORTB
CALL Retardo_1s ; Usted podra escojer el tiempo que quiera 
MOVLW B'00000001'
movwf PORTB
CALL Retardo_1s
MOVLW B'00000010'
movwf PORTB
CALL Retardo_1s
MOVLW B'00000100'
movwf PORTB
CALL Retardo_1s
MOVLW B'00001000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00010000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00100000'
movwf PORTB
CALL Retardo_1s
MOVLW B'01000000'
movwf PORTB
CALL Retardo_1s
MOVLW B'10000000'
movwf PORTB
CALL Retardo_1s
;;****************** Hasta aqui tenemos los LEDS Encvendiendo Secuencialmente desde RB0 Hasta Rb7. El tiempo de encendido usted
; Lo podra Elegir de acuerdo a Su GUSTO.

MOVLW B'00000000'
movwf PORTB
CALL Retardo_1s
MOVLW B'10000000'
movwf PORTB
CALL Retardo_1s
MOVLW B'01000000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00100000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00010000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00001000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00000100'
movwf PORTB
CALL Retardo_1s
MOVLW B'00000010'
movwf PORTB
CALL Retardo_1s
MOVLW B'00000001'
movwf PORTB
CALL Retardo_1s

;;;;****************************aHORA ESTAN eNCENDIENDO Y APAGANMDO EN SENTIDO CONTRARIO DE RB7 HASTA RB0

MOVLW B'10000001'
movwf PORTB
CALL Retardo_1s
MOVLW B'01000010'
movwf PORTB
CALL Retardo_1s
MOVLW B'00100100'
movwf PORTB
CALL Retardo_1s
MOVLW B'00011000'
movwf PORTB
CALL Retardo_1s
MOVLW B'00101000'
movwf PORTB
CALL Retardo_1s
MOVLW B'01000010'
movwf PORTB
CALL Retardo_1s
MOVLW B'10000001'
movwf PORTB
CALL Retardo_1s
MOVLW B'10010001'
movwf PORTB
CALL Retardo_1s
MOVLW B'00111001'
movwf PORTB
CALL Retardo_1s

GOTO Principal ; Vuelve a Em[pezar 
;;;****************************aQUI iLUMINA Y APAGA DE AFUERA HACIA ADENTRO Y DE ADENTRO HACIA AFUERA.**********

;; Esta seria "" UNA " de las manera de hacer un juego secuencial de luces .. La secuencia u orden de encendido 
;; La decide cada uno Al Colocar el digito "" 1 "" equivaldra a sacar una senal de Alta por el Pin del 
;; Microcontrolador ( 5 Voltios Puede Usar una resistencia de unos 330 omhios para conectar cada LED).

;; De cada pin del PORTB saldra una resistencia de 330 Omhs. Al ANODO de cada LED El Catodo ira a GND ( 0 Volts) 

;; 8 PINES igual 8 salidas = 8 resistencias = 8 LEDS.

;**************************** Librería "RETARDOS.INC" *********************************
;
; ================================================== =================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. [url]www.pic16f84a.com[/url]
; Editorial Ra-Ma. [url]www.ra-ma.es[/url]
; ================================================== =================
;
; Librería con múltiples subrutinas de retardos, desde 4 microsegundos hasta 20 segundos. 
; Además se pueden implementar otras subrutinas muy fácilmente.
;
; Se han calculado para un sistema microcontrolador con un PIC trabajando con un cristal
; de cuarzo a 4 MHz. Como cada ciclo máquina son 4 ciclos de reloj, resulta que cada
; ciclo máquina tarda 4 x 1/4MHz = 1 µs.
;
; En los comentarios, "cm" significa "ciclos máquina".
;
; ZONA DE DATOS ************************************************** *******************

CBLOCK
R_ContA ; Contadores para los retardos.
R_ContB
R_ContC
ENDC
;
; RETARDOS de 4 hasta 10 microsegundos ---------------------------------------------------
;
; A continuación retardos pequeños teniendo en cuenta que para una frecuencia de 4 MHZ,
; la llamada a subrutina "call" tarda 2 ciclos máquina, el retorno de subrutina
; "return" toma otros 2 ciclos máquina y cada instrucción "nop" tarda 1 ciclo máquina.
;
Retardo_10micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
nop ; Aporta 1 ciclo máquina.
Retardo_5micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
Retardo_4micros ; La llamada "call" aporta 2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
; RETARDOS de 20 hasta 500 microsegundos ------------------------------------------------
;
Retardo_500micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'164' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_200micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'64' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_100micros ; La llamada "call" aporta 2 ciclos máquina.
movlw d'31' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_50micros ; La llamada "call" aporta 2 ciclos máquina.
nop ; Aporta 1 ciclo máquina.
movlw d'14' ; Aporta 1 ciclo máquina. Este es el valor de "K".
goto RetardoMicros ; Aporta 2 ciclos máquina.
Retardo_20micros ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "K".
;
; El próximo bloque "RetardoMicros" tarda:
; 1 + (K-1) + 2 + (K-1)x2 + 2 = (2 + 3K) ciclos máquina.
;
RetardoMicros
movwf R_ContA ; Aporta 1 ciclo máquina.
Rmicros_Bucle
decfsz R_ContA,F ; (K-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto Rmicros_Bucle ; Aporta (K-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_500micros: 2 + 1 + 1 + 2 + (2 + 3K) = 500 cm = 500 µs. (para K=164 y 4 MHz).
; - Retardo_200micros: 2 + 1 + 1 + 2 + (2 + 3K) = 200 cm = 200 µs. (para K= 64 y 4 MHz).
; - Retardo_100micros: 2 + 1 + 2 + (2 + 3K) = 100 cm = 100 µs. (para K= 31 y 4 MHz).
; - Retardo_50micros : 2 + 1 + 1 + 2 + (2 + 3K) = 50 cm = 50 µs. (para K= 14 y 4 MHz).
; - Retardo_20micros : 2 + 1 + (2 + 3K) = 20 cm = 20 µs. (para K= 5 y 4 MHz).
;
; RETARDOS de 1 ms hasta 200 ms. --------------------------------------------------------
;
Retardo_200ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_100ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_50ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_20ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_10ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_5ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_2ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'2' ; Aporta 1 ciclo máquina. Este es el valor de "M".
goto Retardos_ms ; Aporta 2 ciclos máquina.
Retardo_1ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'1' ; Aporta 1 ciclo máquina. Este es el valor de "M".
;
; El próximo bloque "Retardos_ms" tarda:
; 1 + M + M + KxM + (K-1)xM + Mx2 + (K-1)Mx2 + (M-1) + 2 + (M-1)x2 + 2 =
; = (2 + 4M + 4KM) ciclos máquina. Para K=249 y M=1 supone 1002 ciclos máquina
; que a 4 MHz son 1002 µs = 1 ms.
;
Retardos_ms
movwf R_ContB ; Aporta 1 ciclo máquina.
R1ms_BucleExterno
movlw d'249' ; Aporta Mx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta Mx1 ciclos máquina.
R1ms_BucleInterno
nop ; Aporta KxMx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMx1 cm (cuando no salta) + Mx2 cm (al saltar).
goto R1ms_BucleInterno ; Aporta (K-1)xMx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1ms_BucleExterno ; Aporta (M-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_200ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 200007 cm = 200 ms. (M=200 y K=249).
; - Retardo_100ms: 2 + 1 + 2 + (2 + 4M + 4KM) = 100007 cm = 100 ms. (M=100 y K=249).
; - Retardo_50ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 50007 cm = 50 ms. (M= 50 y K=249).
; - Retardo_20ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 20007 cm = 20 ms. (M= 20 y K=249).
; - Retardo_10ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 10007 cm = 10 ms. (M= 10 y K=249).
; - Retardo_5ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 5007 cm = 5 ms. (M= 5 y K=249).
; - Retardo_2ms : 2 + 1 + 2 + (2 + 4M + 4KM) = 2007 cm = 2 ms. (M= 2 y K=249).
; - Retardo_1ms : 2 + 1 + (2 + 4M + 4KM) = 1005 cm = 1 ms. (M= 1 y K=249).
;
; RETARDOS de 0.5 hasta 20 segundos ---------------------------------------------------
;
Retardo_20s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'200' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_10s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'100' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_5s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'50' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_2s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'20' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_1s ; La llamada "call" aporta 2 ciclos máquina.
movlw d'10' ; Aporta 1 ciclo máquina. Este es el valor de "N".
goto Retardo_1Decima ; Aporta 2 ciclos máquina.
Retardo_500ms ; La llamada "call" aporta 2 ciclos máquina.
movlw d'5' ; Aporta 1 ciclo máquina. Este es el valor de "N".
;
; El próximo bloque "Retardo_1Decima" tarda:
; 1 + N + N + MxN + MxN + KxMxN + (K-1)xMxN + MxNx2 + (K-1)xMxNx2 +
; + (M-1)xN + Nx2 + (M-1)xNx2 + (N-1) + 2 + (N-1)x2 + 2 =
; = (2 + 4M + 4MN + 4KM) ciclos máquina. Para K=249, M=100 y N=1 supone 100011
; ciclos máquina que a 4 MHz son 100011 µs = 100 ms = 0,1 s = 1 décima de segundo.
;
Retardo_1Decima
movwf R_ContC ; Aporta 1 ciclo máquina.
R1Decima_BucleExterno2
movlw d'100' ; Aporta Nx1 ciclos máquina. Este es el valor de "M".
movwf R_ContB ; Aporta Nx1 ciclos máquina.
R1Decima_BucleExterno
movlw d'249' ; Aporta MxNx1 ciclos máquina. Este es el valor de "K".
movwf R_ContA ; Aporta MxNx1 ciclos máquina.
R1Decima_BucleInterno 
nop ; Aporta KxMxNx1 ciclos máquina.
decfsz R_ContA,F ; (K-1)xMxNx1 cm (si no salta) + MxNx2 cm (al saltar).
goto R1Decima_BucleInterno ; Aporta (K-1)xMxNx2 ciclos máquina.
decfsz R_ContB,F ; (M-1)xNx1 cm (cuando no salta) + Nx2 cm (al saltar).
goto R1Decima_BucleExterno ; Aporta (M-1)xNx2 ciclos máquina.
decfsz R_ContC,F ; (N-1)x1 cm (cuando no salta) + 2 cm (al saltar).
goto R1Decima_BucleExterno2 ; Aporta (N-1)x2 ciclos máquina.
return ; El salto del retorno aporta 2 ciclos máquina.
;
;En total estas subrutinas tardan:
; - Retardo_20s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 20000807 cm = 20 s.
; (N=200, M=100 y K=249).
; - Retardo_10s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 10000407 cm = 10 s.
; (N=100, M=100 y K=249).
; - Retardo_5s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 5000207 cm = 5 s.
; (N= 50, M=100 y K=249).
; - Retardo_2s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 2000087 cm = 2 s.
; (N= 20, M=100 y K=249).
; - Retardo_1s: 2 + 1 + 2 + (2 + 4N + 4MN + 4KMN) = 1000047 cm = 1 s.
; (N= 10, M=100 y K=249).
; - Retardo_500ms: 2 + 1 + (2 + 4N + 4MN + 4KMN) = 500025 cm = 0,5 s.
; (N= 5, M=100 y K=249).

; ================================================== =================
; Del libro "MICROCONTROLADOR PIC16F84. DESARROLLO DE PROYECTOS"
; E. Palacios, F. Remiro y L. López. [url]www.pic16f84a.com[/url]
; Editorial Ra-Ma. [url]www.ra-ma.es[/url]
; ================================================== =================






END
```



Executing: "C:\Program Files (x86)\MPLAB IDE\MCHIP_Tools\mpasmwin.exe" /q /p16F628A "LUCES_1.ASM" /l"LUCES_1.lst" /e"LUCES_1.err"
Message[313] C:\ASM TEST\LUCES_1.ASM 153 : CBLOCK constants will start with a value of 0.
Loaded C:\ASM TEST\LUCES_1.COD
BUILD SUCCEEDED


----------



## fourfingerx (Nov 12, 2011)

Buenas a todos,

Antes que nada pido disculpas por molestarlos y por quitarles su valioso tiempos, pero lo hago porque he buscado y en el momento no tengo una persona que me pueda guiar en esto.

Resulta que, he diseñado el Banner Led con una matriz 8x8 pero me gustaria ampliarla, colocando otra o mas matrices para la continuacion del mensaje, alguien me habia sugerido hacerlo con Registros de Desplazamiento, pero a la hora de aplicarlo, no he podido dar como conectarlos, Si alguien pudiera colaborarme, se lo agredeceria en el alma. O si saben de que otra manera se puede hacer o simplemente si saben que no sepuede hacer con Registros de Desplazamiento, por favor haganmelo saber.
Muchas gracias por su tiempo.
Saludos.

Adjunto archivo en ISiS con el .Hex del micro.
PD: Disculpen el mensaje de la matrix, esta dedicado a un compañero de clases y la bestialidad que hice con los Registros de Desplazamiento


----------



## andyt (May 11, 2012)

como multiplexar una matriz de leds  de 8x8 ... solo tengo el puerto b disponible......... que integrado debo usar...
con la programacion no hay problema ....


----------



## MrCarlos (May 11, 2012)

Hola andyt

Fíjate Por Acá:_ https://www.forosdeelectronica.com/posts/653123/ _ 

saludos
a sus ordenes


----------

