Autor Tema: Matriz de leds 8X8.  (Leído 69203 veces)

0 Usuarios y 3 Visitantes están viendo este tema.

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Matriz de leds 8X8.
« en: 05 de Febrero de 2009, 10:06:25 »
Aqui teneis el código para una matriz de leds 8x8 para representar tres animaciones, en el PROTEUS no funciona, en la vida real si.


;****************************************************************************************************************************
;                                                  TRES EFECTOS VISUALES                                                  *
;****************************************************************************************************************************



;registro a usar 74HC164.

;CLOCK= Patilla 1 PORTA,2.

;DATA= Patilla 2  PORTA,3.


;Todas las patitas del PORTB se conectaran a resistencias de 1k5 ohmios y a su vez estas resistencias a base de transistor PNP BC-327
;calculado para soportar un máximo de 15mA x 8 leds.


;las salidas del registro de desplazamiento se conectaran a resistencias de 1/4 w y serán entre 330 ohmio, 220 ohmio según veamos
;la luminosidad de los leds.


;*****************************************************************************************************************************
;PASOS A SEGUIR PARA MOSTRAR UN PATRON DE 8 BITS (1 BYTE) EN UNA MATRIZ DE LEDS 8x8 
;*****************************************************************************************************************************
;1) Apagar todas las filas.

;2) Escribir los valores correspondientes a la primer fila en el registro de desplazamiento, teniendo en cuenta que el primer
;   digito binario colocado corresponde al último LED de la fila, y el ultimo en poner al de la primer columna.

;3) Encenderla primer fila, esperar un tiempo, y volver a apagarla.

;4) Repetir los pasos 2 y 3 para las filas restantes.
;*****************************************************************************************************************************


                           
              __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

              LIST   P=16F84A
              INCLUDE <P16F84A.INC>

              CBLOCK  0x0C
              ENDC

EEPROM        EQU     0x1C           ;registro de control
ALMACEN       EQU     0x20           ;aquí se guarda la informacion para llevarla al registro de desplazamiento 
CONTADOR      EQU     0x21           ;contador 8 bits

DI            EQU     7              ;bit de control
DO            EQU     6              ;bit de control

                 
              ORG    0X00        ;Inicio del ensamblado desde 00
              goto   INICIO          ;Salto a la primera instruccion
              ORG    0X05        ;Ensamblar desde 05



INICIO        bsf    STATUS,RP0      ;pagina 1
              clrf   TRISB           ;portb salidas
              clrf   TRISA           ;porta salidas
              bcf    STATUS,RP0      ;pagina 0
              clrf   PORTB
              clrf   PORTA

              movlw  B'11111111'     ;todas las filas apagadas
              movwf  PORTB           ;1 en base transistores PNP y por lo tanto leds apagados


;**********************************************************************************************************************************
;BARRIDO HORIZONTAL
;**********************************************************************************************************************************      



PRINCIPAL     movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA1         movlw  B'11111110'     ;activo fila 1 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA2         movlw  B'11111101'     ;activo fila 2 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA3         movlw  B'11111011'     ;activo fila 3 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA4         movlw  B'11110111'     ;activo fila 4 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA5         movlw  B'11101111'     ;activo fila 5 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB




              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA6         movlw  B'11011111'     ;activo fila 6 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA7         movlw  B'10111111'     ;activo fila 7 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'00000000'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
FILA8
              movlw  B'01111111'     ;activo fila 8 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


;**********************************************************************************************************************************
;PIXEL OBLICUO
;**********************************************************************************************************************************


              movlw  B'11111110'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA8      movlw  B'11111110'     ;activo columna 8 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



             
              movlw  B'11111101'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA7      movlw  B'11111101'     ;activo columna 7 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB




              movlw  B'11111011'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA6      movlw  B'11111011'     ;activo columna 6 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'11110111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA5      movlw  B'11110111'     ;activo columna 5 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'11101111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA4      movlw  B'11101111'     ;activo columna 4 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB




              movlw  B'11011111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA3      movlw  B'11011111'     ;activo columna 3 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'10111111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA2      movlw  B'10111111'     ;activo columna 2 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'01111111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
COLUMNA1      movlw  B'01111111'     ;activo columna 1 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


;**********************************************************************************************************************************
;PIXEL OBLICUO_2
;**********************************************************************************************************************************


              movlw  B'01111111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'11111110'     ;activo columna 8 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



             
              movlw  B'10111111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'11111101'     ;activo columna 7 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB




              movlw  B'11011111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'11111011'     ;activo columna 6 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'11101111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'11110111'     ;activo columna 5 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'11110111'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'11101111'     ;activo columna 4 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB




              movlw  B'11111011'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'11011111'     ;activo columna 3 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB



              movlw  B'11111101'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'10111111'     ;activo columna 2 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB


             
              movlw  B'11111110'     ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              movlw  B'01111111'     ;activo columna 1 para mostrar dato del registro
              movwf  PORTB
              call   Retardo_500ms
              movlw  B'11111111'
              movwf  PORTB
              goto   PRINCIPAL



;*******************************************************************************************************************************
;RUTINA TRANSMISIÓN BITS A REGISTRO 74HC164
;*******************************************************************************************************************************


             
TX            movlw  .8              ;pone 8 en W
              movwf  CONTADOR        ;carga contador con 8


TXLP          bcf    EEPROM,DO       ;a 0 bit DO
              btfsc  ALMACEN,0       ;mira el bit 7 de ALMACEN y salta si es 0
              bsf    EEPROM,DO       ;a 1 bit DO
              call   BITOUT
              rrf    ALMACEN,F       ;rota a izquierda ALMACEN
              decfsz CONTADOR,F      ;decrementa contador si es 0 salta
              goto   TXLP
              return
         
 

BITOUT        bsf    STATUS,RP0      ;pagina 1     
              movlw  0X00
              movwf  TRISA           ;puerta A salida
              bcf    STATUS,RP0      ;pagina 0
 
              btfss  EEPROM,DO       ;mira el bit DO y salta si vale 1
              goto   BITLOW
              bsf    PORTA,3         ;pone a 1 DATA
              goto   CLOCK

 
BITLOW        bcf    PORTA,3         ;pone a 0 DATA


;********************************************************************************************************************************
;RUTINA DE TRANSMISIÓN SEÑAL DE RELOJ A REGISTRO 74HC164
;********************************************************************************************************************************


CLOCK         bcf    PORTA,2         ;pone a 0 CLOCK
              nop                    ;espera 1 micros
              nop                    ;otro
              nop                    ;otro
              nop                    ;otro
              bsf    PORTA,2         ;pone a 1 CLOCK
              nop                    ;1 micros
              return
       

              INCLUDE <RETARDOS.INC> ;subrutinas de control de tiempos de retardo.
              END




« Última modificación: 20 de Febrero de 2009, 08:32:28 por antimason »

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #1 en: 07 de Febrero de 2009, 12:31:47 »
El código es un poco largo, intentaré simplificarlo con el uso de tablas y mas adelante pondré la información en una memoria I2C para que sea mas sencillo todavía. En este post iré desarrollando todo el proceso, ser pacientes.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matriz de leds 8X8.
« Respuesta #2 en: 07 de Febrero de 2009, 18:18:14 »
Hola!
¿Tenes el esquema a mano?

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado todopic

  • Administrador
  • DsPIC30
  • *******
  • Mensajes: 3495
    • http://www.todopicelectronica.com.ar
Re: Matriz de leds 8X8.
« Respuesta #3 en: 07 de Febrero de 2009, 20:57:20 »
Muy buenas Antimason!, gracias por compartir el codigo !  :-/
Además de emplear tablas, puedes usar rotación en el puerto b, para achicar código  (RLF)  :mrgreen:

Un abrazo

Norberto
Firmat - Santa Fe - Argentina

www.TodoPic.net

Solo se tiran piedras, al arbol que tiene frutos...

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #4 en: 08 de Febrero de 2009, 12:40:00 »
He editado el código, pues existía el pequeño fallo de que al encenderse los leds correspondientes, el resto, los que debieran permanecer apagados, poseían una leve iluminación que fastidiaba el contraste entre leds encendidos y leds apagados. Tambien he quitado el efecto "BARRIDO VERTICAL" pues al activar todas las filas al tiempo se produce una caida de tensión que hace que los leds queden con una iluminación muy apagada.
« Última modificación: 08 de Febrero de 2009, 14:29:09 por antimason »

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #5 en: 08 de Febrero de 2009, 12:44:01 »
Hola!
¿Tenes el esquema a mano?

Saludos!


La verdad es que lo hice en un folio con un bolígrafo, pero lo haré en PROTEUS y la captura la postearé aquí. Pero..............¿como se ponen imágenes en un foro?, colocar vídeos de youtube si sé hacerlo, pero lo de las fotos no lo tengo tan claro.

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #6 en: 08 de Febrero de 2009, 12:47:36 »
Muy buenas Antimason!, gracias por compartir el codigo :-/
Además de emplear tablas, puedes usar rotación en el puerto b, para achicar código  (RLF)  :mrgreen:

Un abrazo

Norberto


Gracias a vosotros por tener un foro tan didáctico y explicativo de este mundillo de los PICS.

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matriz de leds 8X8.
« Respuesta #7 en: 08 de Febrero de 2009, 12:49:28 »
Hola!
Podes scanear la imagen que dibujaste con el boli...yo uso papel casi siempre para mis diseños :)

Para poner la imagen, tenes que usar la opcion que aparece abajo del cuadro en el que escribir el mensaje, el link que pone "Opciones Adicionales...". Dentro de eso está

Adjuntar:          (más archivos)

Ahi buscas la imagen que scaneaste, la agregas, y queda como adjunto al mensaje.

Si luego queres que se vea en el cuerpo del mensaje, escribis [ img ] ruta_de_la_imagen [ /img ] (pero sin espacios) y listo!

Saludos!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #8 en: 08 de Febrero de 2009, 13:54:18 »
A ver la foto.......


« Última modificación: 08 de Febrero de 2009, 14:04:51 por antimason »

Desconectado aitopes

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 5100
    • uControl
Re: Matriz de leds 8X8.
« Respuesta #9 en: 08 de Febrero de 2009, 17:24:19 »
Perfecta!

No fue tan dificil, no? :)

Ya pude ver el esquema. Gracias!
Si cualquier habilidad que aprende un niño será obsoleta antes de que la use, entonces, ¿qué es lo que tiene que aprender? La respuesta es obvia:
La única habilidad competitiva a largo plazo es la habilidad para aprender
“. Seymour Papert

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #10 en: 08 de Febrero de 2009, 17:37:53 »
Muy bueno los efectos ..de pensar que yo empece asi  ...  con una matriz pequeña de 7x5 luego 32x7 despues 80x7 ahora voy por una de 90x8 yo tambien trabajo en asm ....

si es de ayuda dejo unos ejemplos pero creo que es mas avanzado ...
http://micros.mforos.com/1149907/8023880-desarrollo-panel-88x7-16f877-y-eeprom-24lc256/

Saludos y pon una foto del circuito funcionando  :mrgreen:

« Última modificación: 08 de Febrero de 2009, 17:43:53 por jmcs87 »

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #11 en: 08 de Febrero de 2009, 18:33:30 »
Muy bueno los efectos ..de pensar que yo empece asi  ...  con una matriz pequeña de 7x5 luego 32x7 despues 80x7 ahora voy por una de 90x8 yo tambien trabajo en asm ....

si es de ayuda dejo unos ejemplos pero creo que es mas avanzado ...
http://micros.mforos.com/1149907/8023880-desarrollo-panel-88x7-16f877-y-eeprom-24lc256/

Saludos y pon una foto del circuito funcionando  :mrgreen:





Menudas matrices, eso si es nivel. A ver cuando llego a algo así.

jacrmr

  • Visitante
Re: Matriz de leds 8X8.
« Respuesta #12 en: 08 de Febrero de 2009, 19:16:36 »
Citar
lo unico que puedo decir es que hacer tu propia matriz te sale mas barato ya que comprar una hecha sale 300 dolares y yo solo me e gastado un promedio de  100, claro que con la caja y el acabado puede salir algo mas (ojo me refiero a una de ese tamaño) e visto otras matrices del mismo tamaño hechas con matrices pre fabricadas de 8x8 de tres colores verde amarilli y rojo esas si estan mas caras creo que las traen de afuera son importadas ......

tengo una pregunta que dejo a continuacion....se trata sobre el metodo de usar una matriz es decir lo que mayormente e encontrado en internet es el metodo multiplexado ya sea por columnas o filas ...pero me pregunto si los paneles comerciales esos ya profecionales que vemos en las tiendas usaran esa misma tecnica, lo digo porque e leido en otros foros que lo que hacen es usar un registro por cada ocho leds o algo asi es decir los leds estan siempre encendidos ......

espero que los que sepan algo me puedan sacar la duda que tengo gracias

saludos...

Los paneles comerciales usan cada vez menos el multiplexado por varias razones (de hecho los fabricantes líderes dejaron de multiplexar pantallas desde finales de los 90s). Las razones principales son que el multiplexado interfiere con la filmación o grabación de video en pantallas que se usan en sets de tv, estadios deportivos, etc. Que los nuevos leds introducidos al mercado a principios de los 90s (GaInN) y que son la base actual de todas las pantallas de leds, no ganan eficiencia con el multiplexado (a diferencia de otros materiales como el AlGaP que tanto se utilizó), además que reducen su vida útil muchísimo se se multiplexan con corrientes apenas ligeramente mayores a la del promedio. Que debido a la gran cantidad de datos seriales que se manejan (aunque estén divididas por módulos pequeños) los nuevos ICs permiten un conexionado muy simple sin multiplexar (con expensas al costo pero con gran ganancia en calidad de imagen), ya que la norma general es que esas pantalla no llevan memorias eeprom ni generadores de caracteres ni nada de eso. De tu señal de video conectas directo al codec de video, de ahí sale tu señal en 4:2:2 o RGB, y va directo (los ICs ya vienen fabricados con esa facilidad de conexión) a tu memoria multipuertos en donde quedas independiente de la velocidad de video y puedes con un microcontrolador estar leyendo la información para enviarla serialmente a tus drivers. La ventaja de este sistema es que desligas totalmente la información que hay que desplegar de lo que tiene que hacer tu circuitería.

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #13 en: 08 de Febrero de 2009, 19:33:37 »
Gracias por la respuesta....... :)    bueno lo unico que puedo decir es que no pretendo llegar a ser fabricante  :D solo que como me parecio un proyecto muy interesante segui insistiendo y si se que multiplexando la matriz se pierde eficiencia intencidad de los leds ......pero me pregunto entonces para que vienen las matrices esas pre fabricadas  de 8x8 o 7x5 ya que e visto matrices comerciales que las usan inclusive son tri color ...........creo que la respuesta que me diste es tirando para las matrices que ya muestran video con leds rgb .........yo solo busco llegar a una matriz monocolor de gran tamaño

saludos y gracias por la info :mrgreen:

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #14 en: 08 de Febrero de 2009, 20:44:20 »
El video del código de tres efectos:




 

anything