Wenas, tengo un problemilla. Con el programa siguiente: #include "16F877.h"
#device adc=8
#use delay(clock=4000000)
#fuses xt,nowdt,noput,nobrownout,nolvp,noprotect
#use rs232(baud=9600,parity=N,bits=8,stop=1,xmit=PIN_D6,rcv=PIN_D7,enable=PIN_D5)
#define use_portb_lcd TRUE
#include "lcd.c"
#include <ds1302.c>
#include <24515.c>
#include <external_eeprom.c>
#define EEPROM_SDA PIN_C4
#define EEPROM_SCL PIN_C3
void borrat_lcd()
{
lcd_gotoxy(1,1);
printf(lcd_putc," ",);
lcd_gotoxy(1,2);
printf(lcd_putc," ",);
}
float mediana(int canal)
{
float medida[5],mediana;
set_adc_channel(canal);
delay_ms(400);
medida[0]=read_adc();
delay_ms(200);
medida[1]=read_adc();
delay_ms(200);
medida[2]=read_adc();
delay_ms(200);
medida[3]=read_adc();
delay_ms(200);
medida[4]=read_adc();
delay_ms(200);
mediana=(medida[0]+medida[1]+medida[2]+medida[3]+medida[4])/5;
return mediana;
}
void main(void)
{
float temperatura, temperatura2, tension, intensidad, irradiancia, dada;
int dir=0, dir2=0, min=0,sec=0,hr=0;
char string[7];
setup_adc_ports(AN0_AN1_AN2_AN4_AN5_VSS_VREF);
setup_adc(ADC_CLOCK_INTERNAL);
lcd_init();
init_ext_eeprom();
rtc_init();
while (true)
{
borrat_lcd();
rtc_get_time(hr,min,sec);
delay_ms(250);
temperatura=mediana(0)/4.63;
temperatura2=mediana(1)/4.63;
tension=mediana(4)/2.55;
intensidad=(256-mediana(2))/10.24;
irradiancia=(((256-mediana(5))/10.24)*1000)/5.29;
write_ext_eeprom(dir,hr);
dir=dir+1;
write_ext_eeprom(dir,min);
dir=dir+1;
write_ext_eeprom(dir,sec);
dir=dir+1;
write_float_ext_eeprom(dir,temperatura);
dir=dir+4;
write_float_ext_eeprom(dir,temperatura2);
dir=dir+4;
write_float_ext_eeprom(dir,tension);
dir=dir+4;
write_float_ext_eeprom(dir,intensidad);
dir=dir+4;
write_float_ext_eeprom(dir,irradiancia);
dir=dir+4;
borrat_lcd();
lcd_gotoxy(1,2);
printf(lcd_putc," ENVIANDO DATOS",);
printf("h");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+1;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+1;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+1;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
printf("a");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
printf("t1_real");
sprintf(string,"%03.2f",temperatura);
printf("%s",string);
printf(" ");
printf("m");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
printf("t2_real");
sprintf(string,"%03.2f",temperatura2);
printf("%s",string);
printf(" ");
printf("V");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
printf("tensio_real");
sprintf(string,"%03.2f",tension);
printf("%s",string);
printf(" ");
printf("I");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
printf("int_real");
sprintf(string,"%03.2f",intensidad);
printf("%s",string);
printf(" ");
printf("i");
dada=read_float_ext_eeprom(dir2);
delay_ms(200);
dir2=dir2+4;
sprintf(string,"%03.2f",dada);
printf("%s",string);
printf(" ");
printf("irr_real");
sprintf(string,"%03.2f",irradiancia);
printf("%s",string);
printf(" ");
printf("E");
delay_ms(2000);
borrat_lcd();
}
}
guardo unas medidas en la eeprom, y las envio de la eeprom al PC. Para comprobar que el envio es correcto, envio tambien la variable directamente. En el PC recibo esto:
h23.00 11.00 13.00 a0.00 t1_real55.07 m132.00 t2_real55.07 V0.00 tensio_real0.00 I123.00 int_real0.09 i131.00 irr_real18.46 E
La hora se envia correctamente. Todo lo demas no. Me temo que sea porque guardo mal los floats, o los leo mal. Alguien puede ayudarme??
GRACIAS