ccs811 是一款低功耗微型的mems氣體感測器,使用iic進行通訊,但與最常見的一些iic感測器相比,多了中斷、使能、復位這些功能和相應的管腳,而且程式控制涉及到模式和狀態切換,除錯過程不太順利而且網上可參考的資料較少。
首先需要理清楚iic通行的流程,由於該器件的暫存器較豐富,包括有帶有該器件id的hw_id(0x20)唯讀暫存器,所以在相應的管腳狀態配置完成後通行開始時應該先讀該暫存器以確認ccs811的在位情況,反饋資料為0x81表示器件在位。
接下來應該是配置ccs811的工作模式,主要指工作週期和中斷配置,通過寫暫存器meas_mode(0x01)(這一步可以在讀回資料前任何期間完成)
配置完成之後讀狀態暫存器(0x00)獲得感測器的當前狀態情況:
遇到的幾個坑:
1、讀不到資料
iic傳送指令後沒有相應,通訊無法繼續,如果你的iic通訊沒有問題,應該就是位址的問題了,官方datasheet中的位址是0x5a/5b,但這是7位iic模式,轉換為正常使用的iic通訊(含讀寫位的8位資料格式)應該是0xb4(寫)和0xb5(讀),通訊位址不對,就毫無響應了,這也是iic通訊常見的問題。
讀不到正確的資料:
參考下帖
讀氣體資料時讀回的資料全是0xfd,波形如下:
可能原因包括:感測器未正常工作,有錯誤和異常需要處理。有說需要拉低復位至少20ms等待感測器內部的程式啟動,但這種時間不夠現象是iic通訊中斷,根本收不到資料而不是收到錯誤的0xfd。
在讀狀態暫存器0x00以確認,讀回的資料為0x11,根據錯誤獲取感測器內部的error_id(0xe0)暫存器值為0x03,對照下表:
出現的是錯誤3,感測器的電阻測量結果超量測,結合反饋的資料0xfd,讓我確認不是我收到了錯誤的資料,而是感測器獲取的資料本身就超過了量測範圍,然後又好好檢查了一下,嘗試了一下,然後發現在配置模式暫存器0x01後,一定要等待足夠長的時間,這也是網友提到的問題所在,加上乙個較長的時間後就可以讀到資料了。
ccs811_reset();
ccs811_mode();
delay_ms(30);//延時很重要
ccs811_meas();
在使用過程中(ucos iii系統中實現),工作的週期時間也會影響到採集的資料
while(1)
ccs811除錯指南
最近使用ccs811這一款整合環境引數測量晶元,由於ccs811本身的原因,導致除錯頗為不順利。現在已經除錯出來,把自己的經驗分享給大家。主控晶元stm32f103。這個問題有可能是 1.進行了某些誤操作,導致ccs811晶元本身跑飛,所以怎麼復位都不能讀取。解決辦法是對晶元復位,即int腳接地 2...
氣體類感測器基礎
1.ppm part per million 百萬分之一 ppb part per billion 10億分之一 ppt part per trillion 萬億分之一 ppt part per thousand 千分之一 它們本來是無量綱的量,如果想知道它們是何種含義,還要清楚它們是體積比還是質量...
氣體感測器的量程標定方法
氣體感測器量程的標定可以是相當容易或非常複雜和昂貴,這取決於該氣體的種類和濃度的範圍。按照原則,為了到達滿意的精度,目標氣體與背景環境氣體的平衡混合物是最好的標定氣體。然而,雖然可以做到,但對操作工的技能要求比正常的要高。實際上,大多數的標定氣體是從化學工廠買來的。下面的章節介紹幾種量程標定的方法。...