【英飞凌XENSIV™ PAS CO2 5V Sensor2Go套件】连接单片机
[复制链接]
前面是使用的PAS CO2 5V Sensor2Go套件进行测试的,这次准备使用其它单片机直接对传感器进行测量。
根据文档中的要求将单片机和传感器的6个引脚按下图连接:
实物接好线后如下:
主要程序如下。
IIC地址定义:
#define CO2_READ_Addr 0X28
#define CO2_WRITE_Addr 0X29
IIC初始化:
void IIC0_Init(void)
{
struct bflb_device_s* gpio;
gpio = bflb_device_get_by_name("gpio");
/* I2C0_SCL */
bflb_gpio_init(gpio, GPIO_PIN_0, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* I2C0_SDA */
bflb_gpio_init(gpio, GPIO_PIN_1, GPIO_FUNC_I2C0 | GPIO_ALTERNATE | GPIO_PULLUP | GPIO_SMT_EN | GPIO_DRV_1);
/* 通信速率400K */
i2c = bflb_device_get_by_name("i2c0");
bflb_i2c_init(i2c, 400000);
}
读取主要几个寄存器值:
while (1)
{
IIC_ReadReg(CO2_READ_Addr, 0x01, Buff, 1);
printf("PASCO2 Reg 01: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(50);
IIC_ReadReg(CO2_READ_Addr, 0x02, Buff, 1);
printf("PASCO2 Reg 02: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(50);
IIC_ReadReg(CO2_READ_Addr, 0x03, Buff, 1);
printf("PASCO2 Reg 03: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(50);
IIC_ReadReg(CO2_READ_Addr, 0x04, Buff, 1);
printf("PASCO2 Reg 04: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(50);
IIC_ReadReg(CO2_READ_Addr, 0x05, Buff, 1);
printf("PASCO2 Reg 05: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(50);
IIC_ReadReg(CO2_READ_Addr, 0x06, Buff, 1);
printf("PASCO2 Reg 06: %d\r\n\r\n",Buff[0]);
bflb_mtimer_delay_ms(30000);
}
程序运行后,连续测量值如下:
具体分析下01-06寄存器值:
寄存器01:144,16进制:0x90.
根据文档描述:
按照上面的接线方式,ORVS位为何会报错?
寄存器02、03:60
这是缺省值,表示采集周期为60秒,也即一分钟采集一次。
寄存器04:38,16进制:0x26
根据文档描述:
04寄存器中缺省采集模式为空闲模式,之所以现在是连续采集模式,是因为PWM_DIS引脚接地了。
寄存器05、06:CO2浓度值。
根据文档描述:
浓度值为2个有符号补码短整型,从实际测量值来看,高字节为负数,和采用套件及配套软件测量值900ppm左右无法对应,后边将抽时间再继续研究下。
|