【瑞康原创,转载需说明】
最近家里装修,想要一款空气质量检测的东东,淘宝一查,不便贵,而且无法和我设计的智能系统对接(我采用的PLC工控方案,最好用modbus协议对接)。于是乎有个想法是自已DIY空气质量检测,淘宝一搜,相中CCS811这款小巧的传感器。
东西到手后,发现卖家所配的资料也仅仅是arduino的DEMO,没有51或stm32的例程,因为这个也无需多大系统开销,所以CPU就选用STC12单片机足够了。
从来没有用过的东西当然第一就是百度了,然而失望的发现这款传感器的文章并不多,不管那多,东西已到手了,只有硬起头前进。
我从仅有的几个文章中理思路,边写边调试,经过两天研究,终于看到串口从传感器传来的数据,现将经验再总结一下:
STEP 0:
编写标准的I2C驱动程序,这里需要注意的是
要加100us左右的延时,CCS811太快了会反应不过来。
STEP 1:
CCS811复位:
将RST脚拉低100ms左右再释放,WAK脚拉低。
STEP 2:
读取CCS811序列号:序列号存在HW_ID(0x20)中,我在调试过程中就读取了HW_VER(0x21)中的数据,怎么搞读出的都是0x12,而不是应该值0x81,最后才发现读到版本寄存器了。如果返回值是0x81,证明通信正常,可以进行下一步,否则调试
直到读到出序列号为0x81为止。
STEP 3:
读到状态寄存器值:状态寄存器STATUS(0x00),第7位是工作模式位,为0表示当前是boot(引导)模式,为1表示当前是app(应用)模式,第4位是app指示位,0表示没有安装固件,1表示已安装固件。
正常情况下,应该7位为0,4位为1,即0x10,如果返回值不是0x10,请调试程序,
直到是0x10时进行下一步。
STEP 4:
转换工作模式:将boot模式转入app模式 ,这步实际上是对APP_start(0xf4)一个空写操作。写之后,再读状态寄存器,返回值应该变为0x90,
如果是0x90,证明转换成功,可以进行下一步,否则继续调试。
STEP 5:
设置采样频率:设置MEAS_MODE(0x01)寄存器,该寄存器中4-6位表示测量模式,001表示每秒采样一次,000不测量,010每10秒测量一次,011每60秒测量一次,100是250mS测量一次,我们一般向
MEAS_MODE写入0x10即可。
注意,设置完成后要有一个7秒左右的延时,如果设置后立即读取数据,会返回FB,我开始就是这样,以为出错,搞了近两个小时。
STEP 6:
读取返回值:测量的返回值放在ALG_Result寄存器中(连续读出4个byte),
前两个字节是ECO2,后两个字节是TVOC,简单拼接即可。
附源程序如下:
最后调试发现返回数据不对,才发现sendbyte中有个错误,应该是是先 if sd & 0X80 ,然后再 SD<<1。或者是用CY标志。
源程序
通过串口可以看到有返回值
评论列表
我要评论