Problema con Pic16f887

Hola amigos, llevo ya 2 dias buscando por la red y leyendo el datasheet pero no doy con mi problema.

Por el proyecto que estoy haciendo decidí usar el pic16f887 por su gran numero de pines. Anteriormente he hecho otros proyectos con lcd y diferente Pic y me han funcionado bien.

Lo extraño, esque con este pic no funciona e incluso al simularlo en proteus, el mismo programa con el pic 16f84a(por ejemplo) funciona a la perfección. He reducido el circuito al máximo de tal modo que solo los 4 pines de datos, el RS y E estan al puerto B, con oscilador interno y ni aun así funciona. Solo consigo ver una linea que parpadea 2 veces y no vuelve a encender hasta que reinicio el pic.

Espero que alguien pueda ayudarme porque ya no se que mas hacer.
Gracias y un saludo



* Aunque el problema no creo que es de aqui, uso PBP
 
Última edición:
Código:
Define osc 4
 alldigilal

Define LCD_DREG PORTB 
Define LCD_DBIT 4     
Define LCD_RSREG PORTB
Define LCD_RSBIT 1    
Define LCD_EREG PORTB 
Define LCD_EBIT 2     


TRISB=%00000000

Bf0 var byte
Bf1 var byte


inicio
pause 1000


LCDOUT $FE, 1 
LCDOUT $FE, 1, "Hola mundo"   
Lcdout $fe, $C0, "Hola mundo"  
pause 1000

lcdout $fe, 1,"Decimal: ", dec 25
Lcdout $fe, $C0,"Binario: ", hex 25


pause 1000

LCDOUT $FE, 1       
FOR Bf0 = 0 TO 13
  LOOKUP Bf0,["Hola mundo"],Bf1
  lcdout $fe,$0C,Bf1
  pause 400
NEXT 

lcdout $FE, $C0
FOR Bf0 = 0 TO 13
  LOOKUP Bf0,["Hola mundo"],Bf1
  lcdout $fe,$0C,Bf1
  pause 400
NEXT 

goto inicio
end
Aqui está, pero creo que el problema es de configuración del pic porque en un 16f84a si funciona.
 
Código:
Define osc 4
 alldigilal

Define LCD_DREG PORTB 
Define LCD_DBIT 4     
Define LCD_RSREG PORTB
Define LCD_RSBIT 1    
Define LCD_EREG PORTB 
Define LCD_EBIT 2     


TRISB=%00000000

Bf0 var byte
Bf1 var byte


inicio
pause 1000


LCDOUT $FE, 1 
LCDOUT $FE, 1, "Hola mundo"   
Lcdout $fe, $C0, "Hola mundo"  
pause 1000

lcdout $fe, 1,"Decimal: ", dec 25
Lcdout $fe, $C0,"Binario: ", hex 25


pause 1000

LCDOUT $FE, 1       
FOR Bf0 = 0 TO 13
  LOOKUP Bf0,["Hola mundo"],Bf1
  lcdout $fe,$0C,Bf1
  pause 400
NEXT 

lcdout $FE, $C0
FOR Bf0 = 0 TO 13
  LOOKUP Bf0,["Hola mundo"],Bf1
  lcdout $fe,$0C,Bf1
  pause 400
NEXT 

goto inicio
end
Aqui está, pero creo que el problema es de configuración del pic porque en un 16f84a si funciona.

No es el Basic que yo uso pero es buena practica en la cabecera y para dejar fuera de toda duda a la hora de compilar comenzar con la declaración del Pic utilizado y la configuración de los fusibles algo así :

Device = 16F877

Config HS_OSC,WDT_OFF,PWRTE_OFF,CP_OFF,BODEN_ON,LVP_OFF
Declare Xtal = 20
All_Digital= true 'El puerto es digital
PortB_Pullups = On ' Enable PORTB pullup resistors

por otro lado hablas del oscilador interno pero el 877 que yo sepa no lo tiene por ahí puede estar la falla.

Saludos.


Ric.
 
Saludos.
No se con que editor esta escrito el programa de Chicle :confused: parece del PIC Simulator IDE
Lo pase a PIC Basic Pro de MCS que es el lenguaje mas sencillo para trabajar con LCD ;)
Aca dejo el programa de Chicle compilado mas su simulación en ISIS
 

Adjuntos

  • LCD.rar
    9 KB · Visitas: 70
Muchas gracias a todos por vuestro interes mostrado.

El compilador que he usado ha sido PBP de microcode. Ya solucioné el problema. EL pic que he usado era 887 no 877 como entendisteis.
Con el 877 si funciona el codigo que hice sin editar nada.

El problema estaba en el registro ANSELH. Pero tengo la duda de si utilicé ALLDIGITAL ¿Porque con otros pics con entradas analogicas no me obliga a especificar el registro?

Gracias de nuevo a todos
Un saludo
 
Atrás
Arriba