gracias por tu respuesta habia estado de viaje y no habia podido probar lo el codigo que me pasaste hoy lo probe y no pude hacerlo funcionar pero parece que cuando empieza el primer i2c_start se congela el codigo o algo por el estilo por que despues de esa linea ya no hace nada
#include <16F877A.h>
#device ADC=8
#FUSES NOWDT //No Watch Dog Timer
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOLVP //No low voltage prgming, B3(PIC16) or B5(PIC18) used for I/O
#use delay(crystal=4000000)
#use i2c(MASTER, sda=pin_b0, scl=pin_b1)
# include <lcd.c>
# include <stdint.h>
char concentracionco2,temperatura,humedad;
byte datos;
byte dataco2,datatemp,datahum;
void main()
{
set_tris_d(0);
while(TRUE)
{
set_tris_c(0b11111111);
lcd_init();
delay_ms(2000);
printf(lcd_putc,"hola" );
delay_ms(500); // Le damos un retardo de 500 ms
lcd_putc("\f");
printf(lcd_putc,"hola222222" );
delay_ms(500); // Le damos un retardo de 500 ms
lcd_putc("\f");
delay_ms(500);
output_high(pin_a0);
delay_ms(100);
delay_ms(200);
output_low(pin_a0);
delay_ms(200);
i2c_start();
delay_ms(200);
i2c_write(0xC2);
delay_ms(200);
i2c_write(0x00);
delay_ms(200);
i2c_write(0x10);
delay_ms(200);
i2c_stop();
delay_ms(2000);
i2c_start();
delay_ms(200);
i2c_write(0xC3); // le decimos que vamos a leer
delay_ms(200);
// Nivel de CO2
dataco2 = i2c_read() << 24 ;
delay_ms(200);
dataco2 += i2c_read() << 16;
delay_ms(200);
i2c_read(); // El CRC
delay_ms(200);
dataco2 += i2c_read() << 8 ;
delay_ms(200);
dataco2 += i2c_read();
delay_ms(200);
i2c_read(); // El CRC
delay_ms(200);
printf(lcd_putc,"hola 2 para co2" );
delay_ms(200);
delay_ms(500); // Le damos un retardo de 500 ms
delay_ms(200);
lcd_putc("\f");
delay_ms(200);
delay_ms(500);
// Temperatura
datatemp = i2c_read() << 24 ;
datatemp += i2c_read() << 16;
i2c_read(); // El CRC
datatemp += i2c_read() << 8 ;
datatemp += i2c_read();
i2c_read(); // El CRC
printf(lcd_putc,"hola3" );
delay_ms(500); // Le damos un retardo de 500 ms
lcd_putc("\f");
delay_ms(500);
// Humedad
datahum = i2c_read() << 24 ;
datahum += i2c_read() << 16;
i2c_read(); // El CRC
datahum += i2c_read() << 8 ;
datahum += i2c_read();
i2c_read(); // El CRC
i2c_stop();
printf(lcd_putc,"hola444" );
delay_ms(500); // Le damos un retardo de 500 ms
lcd_putc("\f");
delay_ms(500);
delay_ms(100);
lcd_gotoxy(1,1);
printf(lcd_putc,"%2u:%2u:%2u",concentracionco2,temperatura,humedad);
lcd_gotoxy (1,2); //Uvicamos la palabra en la segunda fila y la primera columna
delay_ms(500);
printf(lcd_putc,concentracionco2 );
delay_ms(500); // Le damos un retardo de 500 ms
lcd_putc("\f");
delay_ms(500);
}
}
adjunto el codigo
el sensor lo tengo conectado a 3.3 v en vin gnd a tierra y el sel a tierra