Muy buenas a todos, estoy con el pic 18F458 intentandolo comunicar a través del I2C con el sensor LM75, y mi problema es (o creo que es) que no me ejecuta la instrucción i2c_write, el programa se queda colgado cuando llega a esta línea.
La placa posee un par de led, y lo comprobe encendiendolos antes y después de esta instrucción y efectivamente, solo encendia el primero. La instrucción i2c_start la ejecuta sin problemas. Aquí os pongo el código.
// inicializa sensor de temperatura
unsigned char lm75_init(void) {
i2c_start();
i2c_write(0x90); //Byte de control
i2c_write(0x01); //Configura registro
i2c_write(0x18); //Configura byte
i2c_stop();
return (0);
}
//lee temperatura en grados*100
unsigned int lm75_read(void) {
unsigned int tmp;
unsigned char tmp1,tmp2;
signed char negativo;
i2c_start();
i2c_write(0x90); //Byte de control
i2c_write(0x00); //Direccion registro
/*Restart*/
i2c_start();
i2c_write(0x91); //Byte de control
tmp1=i2c_read(); //Leer temperatura
tmp2=i2c_read(); //Leer temperatura
i2c_stop();
tmp=(((unsigned int)tmp1<<8)|tmp2);
// calculo de grados centigrados
negativo=1;
if (tmp&0x80==1) {
tmp=~tmp+1;
negativo=-1;
}
tmp=tmp>>5;
tmp=tmp*125;
tmp=tmp/100;
return tmp*negativo;
}
Cabe destacar que tambien lo tengo inicializado en el programa principal con la línea:
#use i2c(Master,Fast,sda=PIN_C4,scl=PIN_C3)
Aunque no entiendo muy bien para que se usa el "Fast"
Muchas gracias y a ver si me ayudais a solucionar este problemilla ^^
Un saludo.