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

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

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #15 en: 08 de Febrero de 2009, 20:48:56 »
Aquí otro código para matriz 8x8, representa la letra "A" e invierte los leds para que se vea la "A" como una sombra. Ya subiré el vídeo.



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

;La vista humana puede retener información que se muestre durante 20 ó 30 ms, por eso los tiempos de encendido y apagado
;de las filas han de programarse teniendo en cuenta esto. Cuantos mayores tiempos demos cercanos a esos 20 ó 30 ms mas
;luminosos se mostraran los leds, en cambio la sensación de parpadeo será mayor. Como ejemplo de ello tenemos la superposición
;de los cuadros de las tv que funcionan a 50Hz-----> F = 1/T -----> T= 1/50 = 0,02s = 20ms

;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 de 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
REPITE        EQU     0x22           ;repetición ciclos en columna

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

             

;****************************************************************************************************************************
;                                    LETRA A
;****************************************************************************************************************************      



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



CARGA         movlw  D'60'           ;cargo registro con 60 para que se visualize letra A 1 seg
              movwf  REPITE


COMIENZA      movlw  D'231'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'254'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB
     

              movlw  D'195'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'253'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'153'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'251'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'153'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'247'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'129'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'239'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'153'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'223'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'153'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'191'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'153'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'127'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              decfsz REPITE,1        ;decrementa control salta si vale 0
              goto   COMIENZA
              movlw  D'60'
              movwf  REPITE



;****************************************************************************************************************************
;                                    A INVERSA
;****************************************************************************************************************************



SIGUE         movlw  D'24'           ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'254'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB
     

              movlw  D'60'           ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'253'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'102'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'251'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB
     

              movlw  D'102'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'247'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'126'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'239'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB
     

              movlw  D'102'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'223'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'102'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'191'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              movlw  D'102'          ;dato a sacar por un registro de
                                     ;desplazamiento serie-paralelo 8 bits
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'127'
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              decfsz REPITE,1        ;decrementa control salta si vale 0
              goto   SIGUE
              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: 08 de Febrero de 2009, 20:54:49 por antimason »

jacrmr

  • Visitante
Re: Matriz de leds 8X8.
« Respuesta #16 en: 08 de Febrero de 2009, 21:48:51 »
Citar
bueno lo unico que puedo decir es que no pretendo llegar a ser fabricante 


Pues creo que ya lo fuiste ¿no? porque creo que el publik que hiciste fue para una aplicación comercial ¿o me equivoco?.

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


Sólo por convencionalismo. La matriz de 7x5 es típica para representar cualquier caracter alfanumérico, como en el caso de los LCDs de caracteres.

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

No necesariamente. De hecho poniendo ceros en los coeficientes de corrección de gamma de las memorias multipuertos para los colores verde y azul te quedaría la típica matriz roja monocromática. Incluso con un publik monocromático se simplifica totalmente la escritura de los mensajes a desplegar, ya que si se visualiza una matriz de mayor tamaño como si fueran pequeños módulos de 7 por NColumnas sería complicadísimo, además de tedioso, tratar de programar los mensajes y hacer efectos. Esto ya se había tratado en el siguiente hilo:

http://www.todopic.com.ar/foros/index.php?topic=19091.msg196153#msg196153

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #17 en: 08 de Febrero de 2009, 22:18:54 »
hola Jacrmr  con decir que no pretendo llega a ser fabricante es que no pretendo vender o comercializar los paneles que hago  solo me pico poder hacer algo mas grande de lo que encuentro comunmente en internet .........como un joby me entiendes  :mrgreen:

veo que tienes muchos conocimiento de esto .......dime no te a picado hacer un panel con las caracteristicas que mencionas?

todo lo que describes en el enlace que me pusiste lo pude vivir en la practica porque el ultimo panel que estoy haciendo es de 90 x8  y cuenta con 20 efectos programables por puerto usb y capacidad de 5000 caracteres  ...podremos decir que no esta mal pero ya se que los comerciales me pasan de largo ........bueno para que el pic logre trabajar varias tareas a la vez es algo imposible ya que siempre todos nuestro progrmas son lineales , digamos que las interrupciones tratan de simular eso de la multitarea pero tiene que dejar una tarea para hacer otra cosa ....pienso que por eso dices que no se puede hacer con un simple pic esa tarea de hacer un gran panel y dejame decirte que estoy totalmente deacuerdo contigo


saludos

jacrmr

  • Visitante
Re: Matriz de leds 8X8.
« Respuesta #18 en: 08 de Febrero de 2009, 22:33:41 »
Citar
hola Jacrmr  con decir que no pretendo llega a ser fabricante es que no pretendo vender o comercializar los paneles que hago  solo me pico poder hacer algo mas grande de lo que encuentro comunmente en internet .........como un joby me entiendes 


Claro.

Citar
veo que tienes muchos conocimiento de esto .......dime no te a picado hacer un panel con las caracteristicas que mencionas?

De hecho los hago cada vez que me piden uno. Precisamente en estos momentos estoy terminando uno monocromático de 80x32. Si me queda algo de tiempo al rato subo algunas fotos o videos.

Citar
todo lo que describes en el enlace que me pusiste lo pude vivir en la practica porque el ultimo panel que estoy haciendo es de 90 x8  y cuenta con 20 efectos programables por puerto usb y capacidad de 5000 caracteres 


¿es uno azul que subiste fotos en algún otro foro creo? Muy bueno quedó.

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #19 en: 08 de Febrero de 2009, 22:47:58 »
ya me suponia eres un conocedor en esto de los paneles ..........no podrias compartir algo de informacion de los paneles que haces o es secreto profesional ?    ..............te contere que yo tengo poco tiempo con esto de los pic  y solo me e dedicado a usarlos para estos panelitos que hago y tengo una duda los paneles que haces cuanto de energia consumen ya que supongo que usaras fuentes conmutadas .......ese es uno de los problemitas que tengo la fuente ya que a mayor cantidad de leds mayor es el consumo y ya con las justas me alcansa mi humilde fuente lineal  si pudieras dar las carcteristicas que tiene las fuentes que usas me refiero a corriente voltaje etc..?
 
« Última modificación: 08 de Febrero de 2009, 22:52:23 por jmcs87 »

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #20 en: 09 de Febrero de 2009, 20:14:59 »
Aquí el vídeo del segundo código, notar el parpadeo perceptible a vista de cámara que no en la realidad, del multiplexado por líneas:



jacrmr

  • Visitante
Re: Matriz de leds 8X8.
« Respuesta #21 en: 10 de Febrero de 2009, 08:15:41 »
El detalle está en que varios de los circuitos integrados que facilitan todo sólo se consiguen por contrato en base anual (como memorias multipuertos de IDT). En cuestión de fuentes de alimentación sólo uso fuentes de 3.3 volts (para leds rojos para no disipar tanta potencia). El aspecto del software, ó más bien el firmware para exportar de un video en Adobe Premiere a un PIC tan simple como el PIC16F59 sí está manejado a un nivel de propiedad intelectual y por lo mismo no podría dar más detalles al respecto. Sin embargo, los publiks que han implementado nico y Cryn no le piden nada a ningún publik comercial.
« Última modificación: 11 de Febrero de 2009, 08:17:50 por jacrmr »

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #22 en: 10 de Febrero de 2009, 15:11:06 »
Muy bien con el video antimason ahora esperamos ver un mensajito desplazarse por tu matriz jejeje :mrgreen:

Jacrmr gracias por responder muy interesante los datos que das  ........seguire con lo mio haber hasta donde llego.....

quien sabe tal ves llegue a hacer algo interesante pra el foro.....

SAludos

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #23 en: 10 de Febrero de 2009, 20:31:28 »
Muy bien con el video antimason ahora esperamos ver un mensajito desplazarse por tu matriz jejeje :mrgreen:

Jacrmr gracias por responder muy interesante los datos que das  ........seguire con lo mio haber hasta donde llego.....

quien sabe tal ves llegue a hacer algo interesante pra el foro.....

SAludos


Con paciencia todo llega. :mrgreen:

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #24 en: 14 de Febrero de 2009, 16:45:34 »
Por fin, aquí el código con uso de tablas para mostrar la letra "A" y la "A" invertida o sombreada, perdonadme si es algo largo (soy un poco torpe :D), solo teneis que ir poniendo en la tabla el caracter que os dé la gana y cambiar algo en el código sobre el offset para ir mostrando lo que querais (mientras haya memoria claro). El reto siguiente es poner un mensaje desplazandose, usaré tablas para hacerlo. Luego como la memoria de programa del 16F84 no dará mucho de si intentaré colocar los datos en una memoria I2C y acceder a ella por emulación de software del protocolo I2C (por aquí andan algunos ejemplos supongo que serviran). :mrgreen:




 __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
REPITE        EQU     0x22           ;repetición ciclos en columna
SALIDA        EQU     0x23           ;registro para rotación de salida PORTB
PUNTERO       EQU     0x24           ;registro para offset
FILA1         EQU     0x25           
FILA2         EQU     0x26
FILA3         EQU     0x27
FILA4         EQU     0x28
FILA5         EQU     0x29
FILA6         EQU     0x30
FILA7         EQU     0x31
FILA8         EQU     0x32
VECES         EQU     0x33           ;controla nº de veces que se produce un evento




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
              clrf   FILA1
              clrf   FILA2
              clrf   FILA3
              clrf   FILA4
              clrf   FILA5
              clrf   FILA6
              clrf   FILA7
              clrf   FILA8
              clrw



;****************************************************************************************************************************
;AQUI HAGO LA LLAMADA A LA TABLA PARA IR SACANDO LOS DATOS Y CARGAR LOS REGISTROS
;****************************************************************************************************************************

               

RESET         clrf   PUNTERO         ;comienza PUNTERO en 0
              movlw  D'2'            ;cada vez que se hace reset se carga el registro con 2
              movwf  VECES           ;para controlar el nº de veces que se muestra la A y la
                                     ;A inversa
             
             

CARGA         movf   PUNTERO,0       ;muevo contenido dígito a W
              call   TABLA           ;llamo a tabla
              movwf  FILA1           ;y cargo resultado en FILA1
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


 
              call   TABLA           ;llamo a tabla
              movwf  FILA2           ;y cargo resultado en FILA2
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


             
              call   TABLA           ;llamo a tabla
              movwf  FILA3           ;y cargo resultado en FILA3
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w



              call   TABLA           ;llamo a tabla
              movwf  FILA4           ;y cargo resultado en FILA4
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


             
              call   TABLA           ;llamo a tabla
              movwf  FILA5           ;y cargo resultado en FILA5
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


             
              call   TABLA           ;llamo a tabla
              movwf  FILA6           ;y cargo resultado en FILA6
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w



              call   TABLA           ;llamo a tabla
              movwf  FILA7           ;y cargo resultado en FILA7
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w



              call   TABLA           ;llamo a tabla
              movwf  FILA8           ;y cargo resultado en FILA8
              call   REG
             
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w
              goto   CARGA
             
             
             
;****************************************************************************************************************************
;AQUI CARGO LOS REGISTROS LLAMADOS FILA_X EN EL REGISTRO ALMACEN PARA SER SACADOS POR REGISTRO DE DESPLAZAMIENTO
;****************************************************************************************************************************



REG           movlw  D'60'           ;cargo registro con 60 para que se visualize el dato 1 seg
              movwf  REPITE

             

MUESTRATE     movf   FILA1,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX         
              nop
              movlw  D'254'          ;activo fila 1
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA2,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'253'          ;activo fila 2
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA3,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'251'          ;activo fila 3
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA4,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'247'          ;activo fila 4
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA5,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'239'          ;activo fila 5
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA6,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'223'          ;activo fila 6
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA7,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'191'          ;activo fila 7
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA8,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'127'          ;activo fila 8
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB


              decfsz REPITE,1        ;decrementa control salta si vale 0
              goto   MUESTRATE
              decfsz VECES,1         ;controla que se mostró la A y la A inversa, es decir 2 veces
                                     ;para poner offset a 0 y empezar desde el principio de la tabla
              return
              goto   RESET           ;reset en offset y comienza de nuevo
             
             





;****************************************************************************************************************************
;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


;****************************************************************************************************************************
;TABLA DONDE SE GUARDA LA INFORMACIÓN A MOSTRAR
;****************************************************************************************************************************


TABLA         addwf  PCL,F
               
              retlw  D'231'         
              retlw  D'195'
              retlw  D'153'
              retlw  D'153'          ;letra A
              retlw  D'129'
              retlw  D'153'
              retlw  D'153'
              retlw  D'153'

              retlw  D'24'         
              retlw  D'60'
              retlw  D'102'
              retlw  D'102'          ;letra A inversa
              retlw  D'126'
              retlw  D'102'
              retlw  D'102'
              retlw  D'102'
 

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

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #25 en: 17 de Febrero de 2009, 16:51:23 »
;Este código desplaza la letra "A" a la izquierda hasta que desaparece y vuelve a aparecer y vuelve a desplazarse. Tiene un error y es que al desplazarse
;aparecen unos leds encendidos, ¿alguien me puede ayudar a que salga bien y se queden apagados?.





 __CONFIG _CP_OFF &_WDT_OFF &_PWRTE_ON &_XT_OSC

              LIST   P=16F84A
              INCLUDE <P16F84A.INC>

              CBLOCK  0x0C
              ENDC

EEPROM        EQU     0x0D           ;registro de control
ALMACEN       EQU     0x0E           ;aquí se guarda la informacion para llevarla al registro de desplazamiento 
CONTADOR      EQU     0x0F           ;contador 8 bits
REPITE        EQU     0x10           ;repetición ciclos en columna
SALIDA        EQU     0x11           ;registro para rotación de salida PORTB
PUNTERO       EQU     0x12           ;registro para offset
FILA1         EQU     0x13
FILA2         EQU     0x14
FILA3         EQU     0x15
FILA4         EQU     0x16
FILA5         EQU     0x17
FILA6         EQU     0x18
FILA7         EQU     0x19
FILA8         EQU     0x1A
OCHOVECES     EQU     0x1B


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
              clrf   FILA1
              clrf   FILA2
              clrf   FILA3
              clrf   FILA4
              clrf   FILA5
              clrf   FILA6
              clrf   FILA7
              clrf   FILA8
              clrw


RESET         clrf   PUNTERO         ;comienza PUNTERO en 0
             

CARGA         movf   PUNTERO,0        ;muevo contenido dígito a W
              call   TABLA           ;llamo a tabla
              movwf  FILA1           ;y cargo resultado en FILA1
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


 
              call   TABLA           ;llamo a tabla
              movwf  FILA2           ;y cargo resultado en FILA2
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


             
              call   TABLA           ;llamo a tabla
              movwf  FILA3           ;y cargo resultado en FILA3
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w



              call   TABLA           ;llamo a tabla
              movwf  FILA4           ;y cargo resultado en FILA4
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


             
              call   TABLA           ;llamo a tabla
              movwf  FILA5           ;y cargo resultado en FILA5
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w


             
              call   TABLA           ;llamo a tabla
              movwf  FILA6           ;y cargo resultado en FILA6
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w



              call   TABLA           ;llamo a tabla
              movwf  FILA7           ;y cargo resultado en FILA7
              nop
              incf   PUNTERO,F       ;incremento PUNTERO como offset para tabla
              movf   PUNTERO,0       ;y lo cargo en w



              call   TABLA           ;llamo a tabla
              movwf  FILA8           ;y cargo resultado en FILA8
              nop
              movlw  D'9'
              movwf  OCHOVECES
   
             
             
             
             
;****************************************************************************************************************************
;AQUI CARGO LOS REGISTROS LLAMADOS FILA_X EN EL REGISTRO ALMACEN PARA SER SACADOS POR REGISTRO DE DESPLAZAMIENTO
;****************************************************************************************************************************



DELAY         movlw  D'60'
              movwf  REPITE


MUESTRATE     movf   FILA1,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX         
              nop
              movlw  D'254'          ;activo fila 1
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA2,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'253'          ;activo fila 2
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA3,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'251'          ;activo fila 3
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA4,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'247'          ;activo fila 4
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA5,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'239'          ;activo fila 5
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA6,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'223'          ;activo fila 6
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA7,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'191'          ;activo fila 7
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB




              movf   FILA8,0
              movwf  ALMACEN         ;registro donde se almacena el dato
              call   TX
              nop
              movlw  D'127'          ;activo fila 8
              movwf  PORTB
              call   Retardo_2ms
              movlw  B'11111111'
              movwf  PORTB

              decfsz REPITE,1        ;decrementa REPITE cuando sea O salta
              goto   MUESTRATE       ;no es 0
              call   ROTACION        ;si es 0
              decfsz OCHOVECES,1     ;acude 8 veces a rotación de bits
              goto   DELAY
              goto   RESET
             


;****************************************************************************************************************************
;RUTINA DE ROTACION DE BITS DE LOS REGISTROS "FILA_X"
;****************************************************************************************************************************


ROTACION      rlf    FILA1,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA2,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA3,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA4,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA5,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA6,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA7,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA8,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz

              return


;****************************************************************************************************************************
;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


;****************************************************************************************************************************
;TABLA DONDE SE GUARDA LA INFORMACIÓN A MOSTRAR
;****************************************************************************************************************************


TABLA         addwf  PCL,F
               
              retlw  D'231'         
              retlw  D'195'
              retlw  D'153'
              retlw  D'153'          ;letra A
              retlw  D'129'
              retlw  D'153'
              retlw  D'153'
              retlw  D'153'
 

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

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #26 en: 17 de Febrero de 2009, 17:13:09 »
En el siguiente video se vé la A desplazándose y el fallo que he comentado anteriormente.


Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #27 en: 18 de Febrero de 2009, 01:02:02 »
bueno ..muy bueno te salio el desplazamiento  ..........voy a chequear el codigo
 :-/ :-/ :-/

Saludos :mrgreen:

Desconectado jmcs87

  • PIC10
  • *
  • Mensajes: 44
Re: Matriz de leds 8X8.
« Respuesta #28 en: 18 de Febrero de 2009, 02:45:23 »
antimason seguramente ya solucionaste el problema pero no esta demas .......aqui dejo la solucion
solamente se le agrego el BSF STATUS,C al principio de la rutina :mrgreen: :mrgreen:

;****************************************************************************************************************************
;RUTINA DE ROTACION DE BITS DE LOS REGISTROS "FILA_X"
;****************************************************************************************************************************


ROTACION      bsf    STATUS,C
                     rlf    FILA1,1         ;roto una posición a la izquierda la trama de bits
                     bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                     nop                    ;la derecha de la matriz



              rlf    FILA2,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA3,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA4,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA5,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA6,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA7,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz



              rlf    FILA8,1         ;roto una posición a la izquierda la trama de bits
              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
              nop                    ;la derecha de la matriz

              return

Desconectado antimason

  • PIC12
  • **
  • Mensajes: 81
Re: Matriz de leds 8X8.
« Respuesta #29 en: 18 de Febrero de 2009, 09:21:30 »
Has sido mas rápido que yo jmcs87, ya había encontrado la solución como está el código ahi abajo, el problema radicaba en que efectuaba la rotación en la primera línea antes de modificar el bit de acarreo del registro STATUS, por lo que en esa primera línea me llevaba ese acarreo y aparecían esos leds encendidos. De todas formas tú colaboración y aporte hubiera sido clave para la solución del problema. Gracias mil jmcs87.


;****************************************************************************************************************************
;RUTINA DE ROTACION DE BITS DE LOS REGISTROS "FILA_X"
;****************************************************************************************************************************


ROTACION      bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA1,1         ;roto una posición a la izquierda la trama de bits
              nop                   



              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA2,1         ;roto una posición a la izquierda la trama de bits
              nop       



              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA3,1         ;roto una posición a la izquierda la trama de bits
              nop       
     


              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA4,1         ;roto una posición a la izquierda la trama de bits
              nop       



              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA5,1         ;roto una posición a la izquierda la trama de bits
              nop       



              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA6,1         ;roto una posición a la izquierda la trama de bits
              nop       
   


              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA7,1         ;roto una posición a la izquierda la trama de bits
              nop       
     


              bsf    STATUS,C        ;borro el bit de acarreo para que no aparezca por
                                     ;la derecha
              rlf    FILA8,1         ;roto una posición a la izquierda la trama de bits
              nop       
 

              return
« Última modificación: 18 de Febrero de 2009, 15:27:52 por antimason »


 

anything