Autor Tema: Consulta Sensores I2C  (Leído 1922 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado matis14

  • PIC10
  • *
  • Mensajes: 8
Consulta Sensores I2C
« 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;


void main() {
 
   lcd_init();
   enable_interrupts(int_rda);
   enable_interrupts(global);
   address=0;
   

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

void init_temp(int address) {
   i2c_start();
   i2c_write(0x90|(address<<1)); //Genera primer byte (1001A2A1A0W)
   i2c_write(0xee); //Inicia conversión
   i2c_stop();   
}
 
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

Desconectado AngelGris

  • Colaborador
  • PIC24H
  • *****
  • Mensajes: 2480
Re: Consulta Sensores I2C
« Respuesta #1 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

Código: C
  1. dato = read_full_temp(01);
  2. dato = read_full_temp(02);

cuando deberías hacer

Código: C
  1. dato = read_full_temp(01);
  2. dat1 = read_full_temp(02);
De vez en cuando la vida
nos besa en la boca
y a colores se despliega
como un atlas


 

anything