Hola a todos, realice 2 programas para termostatos distintos para el pic16f886, uno para una sonda lm35 y el otro para una ds18b20 one wire, los compile con picc, las simulaciones en proteus me funciónan perfecto pero en la protoboard no me funcionan, tiendo a pensar que es el lcd (ya que lo compre muy barato y no en una casa del rubro) o el grabador pero el picpgm-1.9.2.3-win32-x86 me detecta bien el pic y en el log me salen perfecto los fuses que cargue y no me salta ningún error en la grabación ni en la lectura, y creo haber hecho todo el conexionado apropiado y VDD es correcto. Probé 100 configuraciones distintas en el programa y elimine casi todo dejando solo los comandos de impresión en pantalla, también configure pines directamente en main.h y cambie frecuencia de reloj y config de la declaración #use delay(internal 8M), incluí la declaración setup_oscillator(OSC_8MHZ|OSC_INTRC). en el display (que es azul) se ven los cuadraditos de pixels en blanco sobre fondo azul Les agradecería cualquier ayuda y desde ya muchas gracias

MCLR resist de 10k a VCC y pulsador a masa.
conexiones LCD
V0 en medio de pot de 10k a vcc y gnd
k GND y A a Vcc por medio de resistor de 100 ohms
vdd 5v
vss GND
RB7 D7
RB6 D6
RB5 D5
RB4 D4
RB2 RW
RB1 RS
RB0 E
El programa: Main.h y main. c:
MAIN.H
#include <16F886.h>
#device ADC=10
#fuses INTRC_IO,NOWDT,PUT,MCLR,NOPROTECT,NOCPD,NOBROWNOUT
#fuses NOIESO,NOFCMEN,NOWRT,NODEBUG,NOLVP
#use delay(internal,clock=8000000)
#define use_portb_lcd TRUE
MAIN.C
#include <main.h>
#include <lcd.c>
#define RELE PIN_C4
#define RELE1 PIN_C3
#define SW1 PIN_A1
#define SW2 PIN_A2
#define SW3 PIN_A3
#define SW4 PIN_A4
#use fast_io(A) // Configuración rápida del puerto A
#use fast_io(B) // Configuración rápida del puerto B
#use fast_io(C) // Configuración rápida del puerto C
long conversion;
float temo;
// ************** Programa Principal ************** //
void main ()
{
//******* Variables *******//
int mical=25;
int mahel=27;
set_tris_a(0x3f);
set_tris_b(0x00);
set_tris_c(0x00);
delay_ms(1000);
lcd_init (); // Inicializa la libreria para manejar el LCD.
delay_ms(1000);
printf ( LCD_PUTC, "\f" ); // Limpia la LCD.
delay_ms(200);
lcd_gotoxy(4,1);
printf(lcd_putc,"TEMP:");
delay_ms(200);
lcd_gotoxy(12,1); //Acomoda cursor LCD
lcd_putc("oC");
delay_ms(200);
lcd_gotoxy(4,2);
printf(lcd_putc,"TC:");
delay_ms(200);
lcd_gotoxy(9,2);
printf(lcd_putc,"-TR:");
delay_ms(200);
while ( true )
{
setup_adc(adc_clock_div_32);
setup_adc_ports(sAN0);
set_adc_channel(0);
delay_us (20);
conversion=read_adc();
temo= conversion*(0.48875);
lcd_gotoxy(9,1);
printf(lcd_putc,"%F",temo);
lcd_gotoxy(7,2);
printf(lcd_putc,"%d",mical);
lcd_gotoxy(13,2);
printf(lcd_putc,"%d",mahel);
delay_ms(300);
if(input(SW1)){
mical++;}
if(input(SW2)){
mical--;}
if(input(SW3)){
mahel++;}
if(input(SW4)){
mahel--;}
if(temo<mical)
output_high(RELE);
else
output_low(RELE);
if(temo>mahel)
output_high(RELE1);
else
output_low(RELE1);
}
}