感測器的離線判斷

2021-08-10 20:04:47 字數 1276 閱讀 2215

之前用的方式較為簡單,就是不插上感測器,微控制器會讀到乙個異常的值(看起來就很不正常的值),但是這種方式還是有些缺陷的,根本的做法是根據晶元時序來判斷,即利用晶元將微控制器io口拉低這個動作來確定感測器晶元是否存在。

在sht1x的手冊中,有這麼一段:

sht1x

會以下述方式表示已正確地接收到指令:在第8 個

sck

時鐘的下降沿之後,將

data

下拉為低電平(

ack位)。在第9 個

sck時鐘的下降沿之後,釋放

data

(恢復高電平)

因此乙個自然的想法就是利用這一特點來檢測:

u8 sht1x_write_byte(u8 value)

//到這個地方正好是第8個sck時鐘的下降沿

sda_set_in();

delay_us(30);

bit=gpio_readinputdatabit(gpioa, sda);   //

判斷data 

是否被拉為低電平

error=bit;

scl_pin_out(1);

delay_us(30);

scl_pin_out(0);

bit=gpio_readinputdatabit(gpioa, sda); 

error=(error<<1)|(bit&0x01);                //如果列印資訊是1,則表明存在,若是3,則表明不存在

return error;  

}

穩妥起見,將sda輸入模式配置為內部上拉,因為不插器件的時候io是浮空狀態,不知道讀的是什麼。

void sda_set_in(void)

測試結果表明,該方法可以作為有效的檢測手段。

主機首先發出乙個480-960微秒的低電平脈衝,然後釋放匯流排變為高電平,並在隨後的480微秒時間內對匯流排進行檢測,如果有低電平出現說明匯流排上有器件已做出應答。若無低電平出現一直都是高電平說明匯流排上無器件應答。

做為從器件的ds18b20在一上電後就一直在檢測匯流排上是否有480-960微秒的低電平出現,如果有,在匯流排轉為高電平後等待15-60微秒後將匯流排電平拉低60-240微秒做出響應存在脈衝,告訴主機本器件已做好準備。若沒有檢測到就一直在檢測等待。

將初始化函式改為有返回值型別,返回0說明器件存在,返回1說明器件不存在。

u8 ds18b20init()

else

delay_us(480);

return err;

}實驗結果表明,該方法是有效的。

2 感測器 動作感測器

動作感測器概述 android平台支援一些用於監視裝置動作的感測器 這樣的感測器共有5個 其中兩個 加速感測器和陀螺儀感測器 是純的硬體感測器。另外三個 重力感測器 線性加速感測器和旋轉向量感測器 可能是硬體感測器,也可能是軟體感測器。例如,在一些android裝置中,這些基於軟體的感測器會從加速和...

感測器與感測器融合

在乙個無法預知全部資訊的多變環境中,對於移動機械人而言利用感測器實時識別當前環境是最為重要的一環。對於乙個生物而言,視覺能夠提供豐富的資訊並利用這些資訊來導航 計畫 決策。相同的對於移動機械人而言,視覺也是基本的標配感測器。隨著影象處理技術的發展,這種情況尤其明顯。影象處理技術有助於從靜止或移動的攝...

感測器 1 感測器緒論

感測器 測量儀表火組成元件是否準確可靠 測量方法是否完善 測量儀表安裝 調整或放置是否正確合理 感測器或儀表工作場所的環境條件是否符合規定條件 測量者操作是否正確 二 系統誤差的消除 在測量結果中進行修正 消除系統誤差的根源 在測量系統中採用補償措施 實時反饋修正 以正態分佈為前提 例題 mems工...