Autor Tema: MATRIZ DE LED  (Leído 2656 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
MATRIZ DE LED
« en: 23 de Enero de 2005, 08:51:00 »
BUENAS, A VER SI ME PUDIERAN AYUDAR EN ESTO.
    TENGO UNA MATRIZ DE LED DE 08 COLUMNAS X 07 FILAS, LAS FILAS CONECTADOS AL PORTB DEL PIC, LAS 08 COLUMNAS CONECTADAS AL 74LS373
A SU VEZ ESTA CONECTADA AL 74LS164. CADA 1MILISEG SE ESCANEAN LAS FILAS, Y ASU VEZ POR EL PORTA ENVIO SERIALMENTE AL 74LS164 EL DATO (08 ROTACIONES)  Y DESPUES ACTIVO EL 74LS373 PARA CARGAR LAS COLUMNAS. TODO ANDA BIEN AL DESPLAZAR DE ABAJO ARRIBA. QUISIERA QUE ME INDIQUEN COMO PUEDO HACERLOS DESPLAZAR DE IZQUIERDA A DERECHA Y VICEVERSA. PROBE CON HACER ROTAR CADA REGISTRO CON RRF O RLF PERO ME RESULTO MUY ENGORROSO. AQUI LES ENVIO EL PROGRAMA. GRACIAS DE ANTEMANO

;SE DESPLAZA DE ABAJO ARRIBA
   list      p=16f628          
   #include <p16f628.inc>


BYTE1  EQU    H"20"
BYTE2  EQU    H"21"
BYTE3  EQU    H"22"
BYTE4  EQU    H"23"
BYTE5  EQU    H"24"
;
BYTE6  EQU    H"25"
BYTE7  EQU    H"26"
BYTE8  EQU    H"27"
BYTE9  EQU    H"28"
BYTE10  EQU    H"29"
BYTE    EQU    H"3E"
;
CONTADOR1  EQU H"3A"
CONTADOR2  EQU H"3B"
COLUMNAS   EQU  H"3C"
CONT_TABLA EQU  H"3D"
COUNT_BIT  EQU  H"3F"
LINEA      EQU  H"40"
; DATO Y CK AL 74LS164(REG DE DESPLAZAMIENTO
;CARGO ; AL 74LS373
#DEFINE DATO       PORTA,2
#DEFINE CK         PORTA,0  
#DEFINE CARGO      PORTA,1  
        ORG 0x00
        GOTO  START
        org     4
        GOTO  INTERRUPCION


 Table1      ; LETRA M
             ADDWF 02h,1        
             RETLW h"DD"  
             RETLW h"C9"  
             RETLW h"D5"  
             RETLW h"DD"  
             RETLW h"DD"    
             RETLW h"DD"      
             RETLW h"DD"  
;
             RETLW h"FF"  ;ESPACIO  
             RETLW h"FF"  ;ESPACIO

             RETLW h"00"
START  
          CALL   INIT_PORT
          CALL   INITTIMERS
LOOP
          GOTO   LOOP   ,ESPERA INTERRUP
INIT_PORT
          movlw  H"07"  
          MOVWF CMCON
          CLRF  PORTA                                                                                                                                            
          BSF  STATUS,RP0
          MOVLW 00h
          MOVWF TRISA
          MOVWF TRISB
          BCF STATUS,RP0
INICIAA
             MOVLW   H"BF"
             MOVWF   LINEA
             MOVLW  BYTE1
             MOVWF  FSR
               MOVLW  H"FF"     ;BORRA
               MOVWF  BYTE        
               MOVWF BYTE1        
               MOVWF BYTE2
               MOVWF BYTE3
               MOVWF BYTE4
               MOVWF BYTE5
;
               MOVWF BYTE6        
               MOVWF BYTE7
               MOVWF BYTE8
               MOVWF BYTE9
               MOVWF BYTE10
               CLRF  CONT_TABLA
               CLRF  CONTADOR1
               CLRF  CONTADOR2
              RETURN
;
INITTIMERS
        bsf     STATUS,RP0      
        movlw   B"10000100"    
        movwf   OPTION_REG      
        bcf     STATUS,RP0      
        movlw   B"00100000"    
        movwf   INTCON          
        movlw   .225            
        movwf   TMR0  
        RETFIE                    

INTERRUPCION
             btfsc   INTCON,T0IF            
             goto    SERICIOTMR0            
             movlw   B"00100000"            
             movwf   INTCON
             RETFIE
SERVICIOTMR0
               movlw   .225              
               movwf   TMR0
               bcf     INTCON,T0IF            

               INCF CONTADOR1,1
               MOVF CONTADOR1,W
               BTFSS STATUS,Z
               GOTO  SIGUE_1MSEG

               CLRF  CONTADOR1
               INCF    CONTADOR2,1
               MOVF  CONTADOR2,0  
               XORLW   .2
               BTFSC   STATUS,Z  
               CALL    UNSEG    ; CADA 1/2 SEG SE DESPLAZA

SIGUE_1MSEG            
            MOVF  INDF,W
            MOVWF BYTE
            INCF  FSR
            MOVLW H"27"
            SUBWF FSR,W
            BTFSC STATUS,Z  
            GOTO  EMPIEZA_SCANER
PRIMERO
             MOVLW  H"08"
             MOVWF   COUNT_BIT
TX_X
             BCF     DATO
             RLF     BYTE
             BTFSC   STATUS, CARRY
             BSF     DATO
             CALL    CLOCK         ;ADENTRO
             decfsz  COUNT_BIT,1   ;ES OCHO BIT
             goto    TX_X          ;AUN            
; SI OCHO BIT
             MOVF    LINEA,W   ;TOMO LINEA
             MOVWF   PORTB     ; ACTIVO          
             BSF     CARGO     ; CARGO LATCH DE 74LS373
             NOP
             BCF     CARGO     ; APAGO
             NOP
             bsf     STATUS,CARRY
             NOP
             RRF    LINEA,1       ;LA PROXIMA
             BTFSC STATUS,CARRY
             RETFIE
             MOVLW   H"BF"
             MOVWF   LINEA
             RETFIE
EMPIEZA_SCANER                    
             MOVLW BYTE1
             MOVWF FSR
             GOTO PRIMERO  
CLOCK              
             bsf  CK    
             NOP
             NOP
             NOP
             bcf  CK
             RETURN
;                      
UNSEG ; CADA1/2 SEG DE DESPLAZA EL
      ;CRACTER DE ABAJO ARRIBA
           
           INCF CONT_TABLA,1
           MOVF CONT_TABLA,0    
           CALL Table1
           MOVWF BYTE8  
           MOVF  BYTE8,W
           XORLW H"00"     ;SI EL VALOR DE BYTE10 ES 00 ,EMPIEZA DE NUEVO
           BTFSC 03,2              
           GOTO  INICIAA
;
            CLRF CONTADOR1
            CLRF  CONTADOR2
            MOVF BYTE2,0        
            MOVWF BYTE1        
            MOVF BYTE3,0        
            MOVWF BYTE2        
            MOVF BYTE4,0        
            MOVWF BYTE3        
            MOVF BYTE5,0        
            MOVWF BYTE4
;
            MOVF BYTE6,0        
            MOVWF BYTE5  
;
            MOVF BYTE7,0        
            MOVWF BYTE6
;
            MOVF BYTE8,0        
            MOVWF BYTE7                
            RETURN

          END

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: MATRIZ DE LED
« Respuesta #1 en: 27 de Enero de 2005, 17:27:00 »
Hace tiempo diseñe una pantalla de matriz de leds con efectos de movimiento de textos. El problema es que lo hice con el 8051, pero la filosofia es exactamente la misma. Si quieres te puedo mandar el archivo en ASM para el 8051 (tendre que buscarlo).

De todas formas, el libro en el que me base es este:

Prácticas con microprocesadores de 8 bits
Javier Martínez Pérez/Mariano Barrón Ruiz
McGraw-Hill, 1995

Un saludo

Desconectado blocktel

  • PIC10
  • *
  • Mensajes: 11
RE: MATRIZ DE LED
« Respuesta #2 en: 27 de Enero de 2005, 20:14:00 »
PARA FALCONHUNTER : TE AGRADEZO EL INTERES PRESTADO,  A VER SI ME LO PUDIERAS ENVIAR EL ASM DE  LA MATRIZ DE LED CON EL 8051 PARA DARLE UN VISTAZO. MI CORREO ES BLOCKTEL@HOTMAIL.COM.GRACIAS..
  SALUDOS

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: MATRIZ DE LED
« Respuesta #3 en: 29 de Enero de 2005, 11:58:00 »
Hola blocktel de nuevo. Siento darte malas noticias. No encuentro por ninguna parte el codigo que te dije que tenia. Es una lastima porque tenia un monton de efectos.
Mira a ver si puedes conseguir el libro ese en alguna biblioteca de ingenieria o librerias tecnicas.
Un saludo y lo siento, de verdad.

Desconectado Falconhunter

  • PIC12
  • **
  • Mensajes: 60
RE: MATRIZ DE LED
« Respuesta #4 en: 29 de Enero de 2005, 12:11:00 »
Espera que me ha venido a la cabeza algo.
Recuerdo que se utilizaban dos zonas de memoria que eran una copia de la matriz de leds. En una se cargaba el texto a visualizar y la otra servia para sacar la imagen completa directamente a la matriz.
En tu caso necesitas dos tablas de 8col x 7filas (8 bits x 7):esto son dos zonas de memoria de 7 bytes cada una.
Para visualizar la tabla a extraer no tienes problema, se van sacando las filas una a una en un determinado tiempo para evitar el parpadeo. esto se puede hacer con una interrupcion a un tiempo prefijado (timer), vamos, esto ya lo haces creo.

El truco estaba en la forma de transferir la imagen del texto a la imagen a extraer. Para hacer que el texto corriese hacia arriba, se cargaban los bytes correspondientes a la fila superior en la zona de la tabla a extraer correspondiente a los bytes inferiores. Bueno, esto creo que ya lo has echo.
Para el desplzamiento lateral, pues con las instrucciones de bits y dos punteros (una para columnas y otro para filas) vas cargando los bits iniciales de cada fila de la imagen del texto en los ultimos bits de la imagen a mostrar y viceversa.
Creo recordar que lo hice asi.

Espero haberte ayudado.