TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: Arwer en 01 de Octubre de 2009, 05:53:03
-
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.
-
El bus I2C tiene las respectivas resistencias pull-up?
-
Mmm... buscando el esquematico no, no lo tiene, me he estado documentando respecto a este tema, y al parecer que debería llevar, 2 resistencias pull-up de 4k7? si ese es el problema creo que podré hacerle un apaño al PCB.
Muchas Gracias Suky
-
Si exactamente 2 resistencias de 4.7k aunque este valor depende de la cantidad de dispositivos en el Bus, pero con ese valor va a estar bien. Aquí (http://infopic-suky.blogspot.com/2009/04/buses-de-comunicacion.html) puedes encontrar un poco de información al respecto.
Saludos!
-
Muy bueno el link, la verdad me ha ayudado mucho, y al i2c solo va conectado el sensor de temperatura, por lo que creo que con esas resistencias habrá de sobra...
Muchas gracias! ya te comentare si sale :) :)