Hola sabios de la Electronica, soy novato en esto de los pic y tengo problemas con la visualizacion por medio de un pic 16f877a, estoy utilizando un programa en assembler de la pagina http://www.x-robotics.com/ el cual esta diseñado para la visualizacion con un pic 16f84. Hice modificaciones por que tengo el pic16f877A y para empezar deberia tener en cuenta que los RPG empiezan desde la direccion 0x20 mientras que en el 16f84 empiezan los RPG desde 0x0c.
Este es el programa:
para poder ensamblar en Mplab el anterior programa previamente escribi la rutina llamada LCD.lib que por cierto la guarde con extensión .Lib , despues la adicione a la carpeta library files y despues ensamble el ejemplo HOLA MUNDO y funciono de maravilla.
¿que hice mal?¿que hago para que funcione o que modifico? porque a la hora de probarlo no funciona la LCD solo quedan cuadros oscuros ,muevo el potenciometro pero no aparece nada significativo solo cambia su contraste
si me preguntas sobre ¿la parte electronica? estoy utilizando el puerto A y puerto B,condensadores de 15pf que segun el Datasheet son recomendados con un cristal de 4Mhz, simulo en un protoboard aunque no creo que sea el protoboard el del problema , aunque desconfio de su interferencias y filtraciones de ruido.
si me preguntas sobre ¿ la programacion? estoy utilizando el pickit2 para quemar el pic, no lo estoy grabando en LVP(Programacion en bajo voltaje), los fuse los configuro en el software de pickit2 como el tipo de oscilador XT y desactivo el perro guardian.
si me preguntas sobre ¿el pic? tengo entendido que un pic cuando esta dañado se mide continuidad entre VSS y VDD estan en corto y no es este el caso, si no es asi enseñenme por favor...
Agradeceria mucho la ayuda de un sabio que me pueda colaborar a detectar mi error porque llevo mas de 3 dias intentandolo, o me pudiera dar un programa en assembler para poder visualizar en mi LCD con el pic 16f877a un Hola Mundo el cual estare inmensamente agradecido
Muchas Gracias estare pendiente...
Este es el programa:
Código:
list p=16f877A ;Procesador PIC16f877A ------------->cambio de procesador
list c=132 ;Listado a 132 caracteres -------------->¿no se para que sirve?
TIMER0 equ 01 ;Registro del TIMER0
OPCION equ 0x1 ;Registro de opciones,pgina 1
PCL equ 0x2 ;Registro PC
PCLATH equ 0xa ;Registro alto del PC
STATUS equ 03 ;Registro de estado
RA equ 05 ;Puerta A
RB equ 06 ;Puerta B
PORTA equ 05 ;Puerta A
PORTB equ 06 ;Puerta B
TRISA equ 0x5 ;Reg. de programaci¢n de la puerta A, p gina 1
TRISB equ 0x6 ;Reg. de programaci¢n de la puerta B, p gina 1
INTCON equ 0xb ;Registro de control de interrupciones
DATO_A equ 0x20 ;Registro del dato A --------->RPG despues de la direccion 0x20 en el 16f877a y 0x0c en el
DATO_B equ 0x21 ;Registro del dato B
RESUL equ 0x22 ;Registro de resultados
TEMPO1 equ 0x23 ;Registro temporal 1
TEMPO2 equ 0x24 ;Registro temporal 2
OFFSET equ 0x25 ;Variable de desplazamientos de mensajes
RP0 EQU 05h ;Bit 5 registro STATUS
Digito EQU 1Fh ;Cursor para leer la tabla de datos.
;<<<<<<---------------------- VECTOR DE RESET ------------------------>>>>>>>
ORG 00h ;Direccion del Vector de RESET
GOTO INICIO ;Comienza el programa
ORG 05h ;detras del Vector Interrupcion
Include "LCD.LIB"
;<<<<<<----------------- INICIO PROGRAMA PRINCIPAL ------------------->>>>>>>
INICIO CLRF Digito ;Pone a 0 la variable digito
CALL LCD_PORT ;Puertos en modo LCD
BCF RA,0 ;Desactiva RS del modulo LCD
BCF RA,2 ;Desactiva E del modulo LCD
START CALL LCD_INI ;Inicia LCD (CFG puertos...)
START_1 MOVLW b'00000001' ;Borrar LCD y Home
CALL LCD_REG
MOVLW b'00000110' ;
CALL LCD_REG
MOVLW b'00001100' ;LCD On, cursor Off,Parpadeo Off
CALL LCD_REG
MOVLW 0x80 ;Direccion caracter
CALL LCD_REG
REPETIR MOVF Digito,w ;W=Digito
CALL DATO_1 ;Coge el caracter
IORLW 0 ;Compara
BTFSC STATUS,2 ;Es el ultimo?
GOTO acabar ;Si
CALL LCD_DATOS ;Visualiza caracter
INCF Digito,f ;Incrementa numero de Digito
GOTO REPETIR ;Vuelve a escribir
acabar nop
goto acabar ;Buclee infinito
;<<<<<<---------------------- TABLA DE DATOS ------------------------->>>>>>>
DATO_1 ADDWF PCL,1
RETLW 'H'
RETLW 'O'
RETLW 'L'
RETLW 'A'
RETLW ' '
RETLW 'M'
RETLW 'U'
RETLW 'N'
RETLW 'D'
RETLW 'O'
RETLW 0x00
;<<<<<<\\\\\\\\\\\THE\\\\\\\\\\\\\\\\////////////////END//////////////>>>>>>>
END
para poder ensamblar en Mplab el anterior programa previamente escribi la rutina llamada LCD.lib que por cierto la guarde con extensión .Lib , despues la adicione a la carpeta library files y despues ensamble el ejemplo HOLA MUNDO y funciono de maravilla.
¿que hice mal?¿que hago para que funcione o que modifico? porque a la hora de probarlo no funciona la LCD solo quedan cuadros oscuros ,muevo el potenciometro pero no aparece nada significativo solo cambia su contraste
si me preguntas sobre ¿la parte electronica? estoy utilizando el puerto A y puerto B,condensadores de 15pf que segun el Datasheet son recomendados con un cristal de 4Mhz, simulo en un protoboard aunque no creo que sea el protoboard el del problema , aunque desconfio de su interferencias y filtraciones de ruido.
si me preguntas sobre ¿ la programacion? estoy utilizando el pickit2 para quemar el pic, no lo estoy grabando en LVP(Programacion en bajo voltaje), los fuse los configuro en el software de pickit2 como el tipo de oscilador XT y desactivo el perro guardian.
si me preguntas sobre ¿el pic? tengo entendido que un pic cuando esta dañado se mide continuidad entre VSS y VDD estan en corto y no es este el caso, si no es asi enseñenme por favor...
Agradeceria mucho la ayuda de un sabio que me pueda colaborar a detectar mi error porque llevo mas de 3 dias intentandolo, o me pudiera dar un programa en assembler para poder visualizar en mi LCD con el pic 16f877a un Hola Mundo el cual estare inmensamente agradecido
Muchas Gracias estare pendiente...