TODOPIC
Microcontroladores PIC => Lenguaje C para microcontroladores PIC => Mensaje iniciado por: GAMCH333 en 12 de Noviembre de 2025, 13:43:22
-
:? :? :?
Hola,deseándoles lo mejor en sus actividades, tengo un pequeño problema.
Estoy intentando usar el sensor SDC30 para medir dióxido de carbono (CO2), humedad y temperatura mediante el protocolo I2C.
No me funciona.
¿por favor podrían ayudarme?
Intenté pedir ayuda allí, pero no obtuve respuesta.
Les pido ayuda por aquí.
Tengo dos resistencias pull-up I2C de 1.7 kΩ a 3.3 V.
ME ESTOY TOMANDO LA LIBERTAD DE USAR ESTE CÓDIGO QUE SE ENCUENTRA PRECISAMENTE EN EL FORO
//LCD PUERTO B
#define LCD_RS_PIN PIN_B0
#define LCD_RW_PIN PIN_B1
#define LCD_ENABLE_PIN PIN_B2
#define LCD_DATA4 PIN_B3
#define LCD_DATA5 PIN_B4
#define LCD_DATA6 PIN_B5
#define LCD_DATA7 PIN_B6
#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_C4, scl=pin_C3)
# include <lcd.c>
# include <stdint.h>
char concentracionco2,temperatura;
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,"%d",concentracionco2); // aqui en el lcd imprime un cero
delay_ms(2000);
lcd_gotoxy (1,2); //
printf(lcd_putc,"%u,%u,%u", datahum,temperatura,dataco2 ); // aqui en el lcd me imprime 221 , 0, 221
delay_ms(500); //
lcd_putc("\f");
delay_ms(500);
}
}
Gracias