TODOPIC
Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: blocktel 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
-
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
-
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
-
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.
-
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.