Hola a todos.
Estoy intentando realizar un proyecto con un 16f877 que lea la temperatura de un ds1624. He recogido algunos ejemplos que tenemos por ahí (Jesus Trelles) pero no consigo mostrar una temperatura correcta. El programa que tengo en estos momentos es:
#include <16f877.h>
#use delay (clock=4000000)
#use I2C(MASTER, SDA=PIN_C4, SCL=PIN_C3, fast)
#use fast_io(A)
#fuses XT, NOPROTECT, NOPUT, NOWDT, NOBROWNOUT, NOLVP, NOCPD
#include <lcd_lolo.c>
#define simbolo_grados 0b11011111
#define simbolo_coma 0b00101100
#define I2CWRITE 0b10010000
#define I2CREAD 0b100100001
#define DS1624_CMD_ACCESSCONFIG 0xAC
#define DS1624_CMD_INITIATECONVERT 0xEE
#define DS1624_CMD_ACCESSTEMPERATURE 0xAA
#define DS1624_CMD_ACCESSMEMORY 0x17
# byte port_a=6
int datah, datal;
void i2c_conversion()
{
i2c_start();
i2c_write(I2CWRITE);
i2c_write(DS1624_CMD_INITIATECONVERT);
i2c_stop();
}
void i2c_ds1624_inicia()
{
i2c_start();
i2c_write(I2CWRITE);
i2c_write(DS1624_CMD_ACCESSCONFIG);
i2c_write(0b01001011);
i2c_stop();
delay_ms(20);
i2c_conversion();
}
int i2c_ds1624_leer_temp_c()
{
i2c_start();
i2c_write(I2CWRITE);
i2c_write(DS1624_CMD_ACCESSTEMPERATURE);
i2c_start();
i2c_write(I2CREAD);
datah=i2c_read(0);
datal=i2c_read(0);
i2c_stop();
}
void main (void)
{
int temperatura;
int dec;
lcd_inicia();
i2c_ds1624_inicia();
set_tris_a(0b111110);
lcd_ponc("f"
;
port_a=0;
while(1)
{
temperatura=i2c_ds1624_leer_temp_c();
i2c_conversion();
lcd_ponc("f"
;
switch(datal)
{
case 120: dec=9; break;
case 112: dec=9; break;
case 104: dec=8; break;
case 96: dec=8; break;
case 88: dec=7; break;
case 80: dec=6; break;
case 72: dec=6; break;
case 64: dec=5; break;
case 56: dec=4; break;
case 48: dec=4; break;
case 40: dec=3; break;
case 32: dec=3; break;
case 24: dec=2; break;
case 16: dec=1; break;
case 8: dec=1; break;
case 0: dec=0; break;
}
lcd_vaixy(1,1);
printf(lcd_ponc,"T= %d%c%d%cC",datah,simbolo_coma,dec,simbolo_grados);
if ((datah>26) & (dec>5)) output_high (PIN_A0);
if (datah<25) output_low (PIN_A0);
delay_ms(2000);
}
}
Lo unico que he conseguido es sacar: "T= -1º -2ªC"
En donde esta el fallo o fallos...