Microcontroladores PIC => Todo en microcontroladores PIC => Mensaje iniciado por: matis14 en 21 de Febrero de 2013, 23:38:35
Título: Consulta Sensores I2C
Publicado por: matis14 en 21 de Febrero de 2013, 23:38:35
Hola amigos, quería ver con un 16f877 la temperatura de 2 sensores comunicados por I2C, pero no encuentro la manera de leer mas de un sensor, quería saber si alguien me podía ayudar... les paso el programa principal y el archivo
#include <SensorI2C.h>
#include <lcd.c> #include <TEMP_ds1621.c> #use fast_io(D) #define use_portd_lcd TRUE // Indico que enchufo el lcd al puerto b
int dat_in, cnt, hr,min,sec; int16 address=0; float dato; float dato1;
while(1){ lcd_gotoxy(1,1); printf(lcd_putc,"ENTRA WHILE"); //Visualiza en LCD la temperatura delay_ms(300);
init_temp(0x01); //Inicializa el DS1621 init_temp(0x02); delay_ms(100); tiempo(hr,min,sec); //Lee tiempo del DS1307 dato = read_full_temp(0x01); //Lee temperatura del DS1621 dato = read_full_temp(0x02); lcd_gotoxy(1,1); printf(lcd_putc,"Temp1=%4.1f C\n",dato); //Visualiza en LCD la temperatura delay_ms(500); lcd_gotoxy(1,1); printf(lcd_putc,"Temp2=%4.1f C\n",dato1); //Visualiza en LCD la temperatura delay_ms(500); } }
---------------------------------------------------------------------------------------------------------------------------------------------- Esta es la libreria del sensor
float read_full_temp(int address) { signed int datah; int datal; float tura;
i2c_start(); i2c_write(0x90 |(address<<1)); //Genera primer byte (1001A2A1A0-W) i2c_write(0xaa); //Leer temperatura i2c_start(); i2c_write(0x91 |(address<<1)); //Genera primer byte (1001A2A1A0-R) datah=i2c_read(); //Lectura parte alta datal=i2c_read(0); //Lectura parte baja y NACK i2c_stop();
tura=datah; //Conversión a flotante if (datal==128) tura=tura+0.5; return(tura); }
Espero que puedan ayudarme a entender como buscar en otra dirección. Graciasss
Título: Re: Consulta Sensores I2C
Publicado por: AngelGris en 23 de Febrero de 2013, 11:04:47
Descontando que no haya errores en la librería del sensor, tienes un problema cuando haces la lectura desde tu programa ya que en ambos casos almacenas el dato leído en la variable "dato". Es decir que haces esto