Autor Tema: Ayuda GIROLED  (Leído 2364 veces)

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

Desconectado pet897

  • PIC10
  • *
  • Mensajes: 2
Ayuda GIROLED
« en: 05 de Junio de 2016, 23:55:17 »
Necesito ayuda con mi codigo de mi giroled al parecer no puede mostrar mensajes tan extensos como yo quiero. Mensajes cortos o enunciados los visualiza casi sin problemas "Hola" "taxi" "the flash" sin embargo al tratar de ingresar oraciones no las visualiza ni si quiera encienden los led al pasarlos por blancos.
Este es el codigo , quiero poder poder hacer que se visualicen textos mas largos sin ningun problema. En este codigo solo logra visualizar hasta la "D". Agradecería su ayuda.


    __CONFIG    _CONFIG1, _LVP_OFF & _FCMEN_ON & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
    __CONFIG    _CONFIG2, _WRT_OFF & _BOR21V


    nop
    goto    start              ; go to beginning of program

start
   MOVLW   0X60
   MOVWF   STATUS
   CLRF   ANSELH
   CLRF   ANSEL
   BCF      STATUS,RP1
   CLRF   TRISC
   CLRF   TRISB
   CLRF   TRISA
   BSF      TRISB,0
   BCF      STATUS,RP0
   CLRF   PORTA
   CLRF   PORTB
   CLRF   PORTC
   CLRF   0X30
   CLRF   0X31
   CLRF   0X21
   MOVLW   .48
   MOVWF   0X24
OTRO
   MOVLW   .5
   MOVWF   0X20
PROGRAMA
   BTFSS   PORTB,0
   GOTO   $-1
   MOVFW   0X21
   MOVWF   0X23
AQUI
   CALL   DATO
   MOVWF   PORTC
   CALL   TIEMPO
   INCF   0X23
   MOVFW   0X23
   SUBWF   0X24,W
   BTFSS   STATUS,Z
   GOTO   AQUI
   CLRF   PORTC
   DECFSZ   0X20
   GOTO   PROGRAMA
   MOVLW   .6
   ADDWF   0X21
   ADDWF   0X24
   GOTO   OTRO
LIMPIAR
   CLRF   0X30
PROGRAMA2
   BTFSS   PORTA,6
   GOTO   $-1
ACA
   CALL   TABLA
   MOVWF   PORTC
   CALL   TIEMPO
   INCF   0X30
   GOTO   ACA
   
TABLA
   MOVFW   0X30
   ADDWF   PCL

DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S

DT B'01111111', B'00000001', B'00000111', B'00000001',B'01111111',0X00 ; W

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
 
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T

DT  0X00 ;ESPACIO

DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D

DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A

DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M

DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S

DT  0X00 ;ESPACIO

DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A

DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT  0X00  ;ESPACIO

DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M

DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A

DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT  0X00 ;ESPACIO

DT B'0111111',  B'01000001', B'01000001', B'01000001',B'01111111',0X00 ; O

DT B'0111111',  B'01001000', B'01001000', B'01000000',B'01000000',0X00 ; F

DT  0X00 ;ESPACIO

DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T

DT B'01111111', B'00001000', B'00001000', B'00001000',B'01111111',0X00 ; H

DT B'01000001', B'01000001', B'01111111', B'01000001',B'01000001',0X00 ; I

DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S


DATO
   MOVFW   0X23
   ADDWF   PCL


DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO

DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S

DT B'01111111', B'00000001', B'00000111', B'00000001',B'01111111',0X00 ; W

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E
 
DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T

DT  0X00 ;ESPACIO

DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D

DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A

DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M

DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S

DT  0X00 ;ESPACIO

DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A

DT B'01111111', B'01001000', B'01001100', B'01001010',B'00110001',0X00 ; R

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT  0X00  ;ESPACIO

DT B'01111111', B'01000000', B'01110000', B'01000000',B'01111111',0X00 ; M

DT B'00111111', B'01001000', B'01001000', B'01001000',B'00111111',0X00 ; A

DT B'01111111', B'01000001', B'01000001', B'00111110',B'00000000',0X00 ; D

DT B'01111111', B'01001001', B'01001001', B'01000001',B'01000001',0X00 ; E

DT  0X00 ;ESPACIO

DT B'0111111',  B'01000001', B'01000001', B'01000001',B'01111111',0X00 ; O

DT B'0111111',  B'01001000', B'01001000', B'01000000',B'01000000',0X00 ; F

DT  0X00 ;ESPACIO

DT B'01000000', B'01000000', B'01111111', B'01000000',B'01000000',0X00 ; T

DT B'01111111', B'00001000', B'00001000', B'00001000',B'01111111',0X00 ; H

DT B'01000001', B'01000001', B'01111111', B'01000001',B'01000001',0X00 ; I

DT B'01111001', B'01001001', B'01001001', B'01001001',B'01001111',0X00 ; S


DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO
DT 0X00, 0X00, 0X00, 0X00, 0X00, 0X00 ;ESPACIO

TIEMPO
   MOVLW   .120
   MOVWF   0X50
UNO
   NOP
   DECFSZ   0X50
   GOTO   UNO
   RETURN

    END                       ; directive 'end of program'

Desconectado SavageChicken

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 931
Re:Ayuda GIROLED
« Respuesta #1 en: 06 de Junio de 2016, 15:00:26 »
Hola Pet.

Lo primero es que das muy poca información.
Que PIC estas usando?, como es el circuito?, El texto tiene dos letras "D", ¿hasta cual de las dos se visualiza?.

Sin tener más información es difícil ayudarte, pero intuyo que el problema es el manejo de tablas.
Es bien conocido que un PIC puede manejar tablas relativamente pequeñas, si quieres manejar tablas de datos más grandes, debes implementar una forma un poco más compleja para hacerlo que usar un simple "ADDWF   PCL".

Te aconsejo que busques información de manejo de tablas en assembler (en este foro ese tema se ha tratado muchas veces)
Si tienes opción de cambiarte de lenguaje, en lugar de usar assembler, podrías intentar hacer el programa en algún lenguaje de más alto nivel, como "C" o "Basic", donde el tema de las tablas de gran tamaño lo resuelve el compilador de forma automática....

salud 8)
No hay preguntas tontas...
Solo hay tontos que no preguntan.

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda GIROLED
« Respuesta #2 en: 06 de Junio de 2016, 16:01:43 »
Opino lo mismo que SavageChiken, lo mas seguro que el problema venga por el cruce de pagina de la tabla.

Otra cosa que me parece algo molesta incluso para el mismo programador es:

Código: [Seleccionar]
   MOVFW   0X21
   MOVWF   0X23
   ADDWF   0X21
   ADDWF   0X24
   INCF   0X30

Es decir tener que recordar que es cada uno de los registros. mejor ponele nombres al menos.

Desconectado pet897

  • PIC10
  • *
  • Mensajes: 2
Re:Ayuda GIROLED
« Respuesta #3 en: 10 de Junio de 2016, 02:31:47 »
Hola Pet.

Lo primero es que das muy poca información.
Que PIC estas usando?, como es el circuito?, El texto tiene dos letras "D", ¿hasta cual de las dos se visualiza?.

Sin tener más información es difícil ayudarte, pero intuyo que el problema es el manejo de tablas.
Es bien conocido que un PIC puede manejar tablas relativamente pequeñas, si quieres manejar tablas de datos más grandes, debes implementar una forma un poco más compleja para hacerlo que usar un simple "ADDWF   PCL".

Te aconsejo que busques información de manejo de tablas en assembler (en este foro ese tema se ha tratado muchas veces)
Si tienes opción de cambiarte de lenguaje, en lugar de usar assembler, podrías intentar hacer el programa en algún lenguaje de más alto nivel, como "C" o "Basic", donde el tema de las tablas de gran tamaño lo resuelve el compilador de forma automática....

salud 8)



Hola el pic es un 16f886, lo que el programa trata de hacer es cargar el dato que tiene en 0x23  a la tabla ya que es el registro que controla la linea de la tabla que se saca y por eso primero muestro espacios para que se vea de derecha a izquierda. Borre el codigo que tenia en tabla y ya me logra visualizar completo el mensaje si embargo este no se queda estatico no hace el efecto pov . Me gustaria poder cambiar de lenguaje a C solo que es estrictamente por ensamblador ya que este trabajo es para mi proyecto final de titulacion  de prepa y requiere total uso de assembler  solo ya manejo el codigo que tengo en el 0x23 en "Dato". Me serviria mucha ayuda saber mas acerca del manejo de tablas de datos del microcontrolador ya que quiero visualizar un mensaje mas grande manteniendolo estatico dando un efecto pov ya que solo me va recorriendo los bits de dercha a izquierda

Desconectado KILLERJC

  • Colaborador
  • DsPIC33
  • *****
  • Mensajes: 8242
Re:Ayuda GIROLED
« Respuesta #4 en: 18 de Junio de 2016, 16:07:17 »
Respecto a las tablas y por que no te funciona, la respuesta esta en el datasheet.

Los DT en realidad crean RETLW. Si buscas en el datasheet acerca de los GOTO vas a notar que no pueden saltar a cualquier parte de la memoria y que suele necesitarse modificar el PCLATH si es que supera una cierta cantidad de datos.


 

anything