Buenas compañeros, soy nuevo en el foro y espero me disculpen si llego a usar mal las normas que se manejen.
Estoy utilizando un PIC16F876-20/SP y ya tengo el programa hecho, en proteus arranca perfectamente pero al montarlo en
la tabla de prueba/protoboard no me muestra nada, solo los cuadros
NEGROS en la linea superior, sé que esto significa que la pantalla está en buenas condiciones pero sin embargo no entiendo porque no está enseñando nada. No sé si el problema está en la conexion del PIC o a nivel del código por la
Libreria lcd.c Adjuntare el codigo, trabajo 5 entradas ADC para medir VOLTAJE, CORRIENTE y ESTADO DE BATERIA y no las he montado todavia por cuestiones de seguridad para con el PIC y evitar problemas mayores.
He hecho las conexiones de acuerdo a lo que he visto en internet, sin embargo trabajo con un controlador HD44780a00 y
La identifacion es simple y creo que es asi:
1. VSS(GND) 2. VDD
3. VO(GND) 4. RS
5. RW(GND) 6. E
7. D0 8. D1
9. D2 10. D3
11. D4 12. D5
13. D6 14. D7
#include <16f876.h>
#device adc=10
#fuses hs,nowdt,noprotect,put,brownout,nolvp,nocpd,nowrt
#use delay(clock=20M)
#define lcd_rs_pin pin_b0
#define lcd_rw_pin pin_b1
#define lcd_enable_pin pin_b2
#define lcd_data4 pin_b4
#define lcd_data5 pin_b5
#define lcd_data6 pin_b6
#define lcd_data7 pin_b7
#include <lcd.c>
void main()
{
int16 adcv1;
float v1;
int16 adcv2;
float v2;
int16 adcc1;
float c1;
int16 adcc2;
float c2;
int16 adcc3;
float c3;
setup_adc_ports(ALL_ANALOG);
setup_adc(adc_clock_internal);
lcd_init();
while(true)
{ lcd_init();
set_adc_channel(0);
delay_us(20);
lcd_gotoxy(1,1);
adcv1=read_adc();
v1=adcv1*4.89*0.06*0.1;
delay_us(50);
// tiempo de esperar para cambiar de canal
set_adc_channel(1);
delay_us(50);
adcv2=read_adc();
v2=adcv2*4.89*0.06*0.1;
delay_us(50);
start:
// tiempo de espera para cambiar canal
set_adc_channel(2);
delay_us(50);
adcc1=read_adc();
c1=(adcc1*4.89*0.01164)/5.49;
delay_us(50);
if(c1<=3.9)
{
printf(lcd_putc,"%1.1fV %1.1fA BAT",v1,c1);
}
else
printf(lcd_putc,"%1.1fV OVER BAT",v1);
// tiempo de espera para cambiar canal
set_adc_channel(3);
delay_us(50);
adcc2=read_adc();
c2=(adcc2*4.89*0.01164)/5.49;
delay_us(50);
// Tiempo de espera para cambiar canal de lectura adc
set_adc_channel(4);
delay_us(50);
adcc3=read_adc();
c3=adcc3;
if (c2<=2.9)
{
printf(lcd_putc,"\n%1.1fV %1.1fA",v2,c2);
}
else
{
printf(lcd_putc,"\n%1.1fV OVER",v2);
output_high(pin_c0);
delay_ms(100);
}
if (c3<=371 && c3<=380)
{
lcd_gotoxy(12,2);
lcd_putc("0%");
}
else if (c3>=381 && c3<=389)
{
lcd_gotoxy(12,2);
lcd_putc("25%");
}
else if(c3>=390 && c3<=398)
{
lcd_gotoxy(12,2);
lcd_putc("50%");
}
else if(c3>=399 && c3<=408)
{
lcd_gotoxy(12,2);
lcd_putc("75%");
}
else if(c3>=409)
{
lcd_gotoxy(12,2);
lcd_putc("100%");
}
}
}