實驗結(jié)果
從視頻中,可以看到,當(dāng)手指捏住傳感器后,OLED屏上的溫濕度數(shù)據(jù)發(fā)生變化。
基于FPGA的OLED動態(tài)顯示(溫濕度實時數(shù)據(jù))
Part一
硬件解析
1. 國產(chǎn)FPGA:HME-P1P060
58K邏輯單元,36K LUT-6,4個PLL,32個全局時鐘,144個DSP,基本上已經(jīng)滿足了學(xué)生等級開發(fā),感興趣的,可以去米聯(lián)客店鋪看看。
2. 0.96寸OLED
關(guān)于OLED的顯示,這里不做介紹,詳見二級菜單文章:京微齊力:基于HMEP060的OLED字符顯示(及FUXI工程建立演示)
3. DTH11溫濕度模塊(比較枯燥,請耐心看完原理)
DHT11數(shù)字溫濕度傳感器是一款含有已校準(zhǔn)數(shù)字信號輸出的溫濕度復(fù)合傳感器。
上圖為DHT11的內(nèi)部原理圖,可以看出感濕元件、感溫元件和OTP內(nèi)存直接連接在內(nèi)部一個八位MCU上,該MCU通過計算得出測量數(shù)值。
DATA用于FPGA與DHT11之間的通訊和同步,采用單總線數(shù)據(jù)格式,一次通訊時間4ms左右,數(shù)據(jù)分為整數(shù)部分和小數(shù)部分,數(shù)據(jù)格式如下:一次完整的數(shù)據(jù)傳輸為40bit,高位在前。
數(shù)據(jù)格式:
數(shù)據(jù)傳送正確時校驗和數(shù)據(jù)等于“8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)”所得結(jié)果的末8位。校驗和=數(shù)據(jù)之和,通過這個可以判斷接收到的數(shù)據(jù)是否正確。
下面說一下,數(shù)據(jù)傳輸時序:
主機(此處指FPGA)首先發(fā)送一次開始信號,即:拉低數(shù)據(jù)線,保持t1(至少18ms)時間;然后拉高數(shù)據(jù)線保持t2(20~40us)時間,隨后開始讀取DHT11的響應(yīng);如果操作正確的話,DHT11會拉低數(shù)據(jù)線,保持t3(80us)時間,作為響應(yīng)信號;接下來DHT11會拉高數(shù)據(jù)線,保持t4(80us)時間,隨后開始輸出有效數(shù)據(jù)。
DHT11共輸出40bit有效數(shù)據(jù),每1bit數(shù)據(jù)都是以50us低電平開始,高電平的持續(xù)時間作為判斷數(shù)據(jù)位的條件。當(dāng)數(shù)據(jù)位為0時,高電平的持續(xù)時間為26~28us;當(dāng)數(shù)據(jù)位為1時,高電平的持續(xù)時間為70us。
DHT11數(shù)據(jù)位“0”時序圖和數(shù)據(jù)位“1”時序圖如圖:
需要注意的是,DHT11的溫度和濕度轉(zhuǎn)換較慢,如果讀取速度過快會導(dǎo)致DHT11無法響應(yīng)的情況。
Part二
程序設(shè)計
1. DTH11數(shù)據(jù)采集(狀態(tài)機)
DHT11驅(qū)動模塊使用三段式狀態(tài)機來讀取DHT11的溫度和濕度值,從下圖可以比較直觀的看到每個狀態(tài)實現(xiàn)的功能以及跳轉(zhuǎn)到下一個狀態(tài)的條件。
再次強調(diào),這里需要注意:由于DHT11溫度和濕度轉(zhuǎn)換較慢,如果讀取速度過快會導(dǎo)致DHT11無法響應(yīng)的情況,所以我們在每次讀操作結(jié)束后延時兩秒(這樣魯棒性會比較高,也可以不要這步)。
在時序圖中,提到了18ms、26-28us、20-40us、50us、70us、80us等等,但是經(jīng)過分析后,并不需要定義這么多個計時周期數(shù),只需要定義兩個即可。為什么只定義這兩個就可以了呢?
在時序圖中,需要FPGA判斷時間的,有兩個位置,一個是FPGA拉低18ms以上,另外一個是判斷數(shù)據(jù)表示是數(shù)據(jù)0還是數(shù)據(jù)1。第一個很清楚就是18ms。數(shù)據(jù)0表示的數(shù)據(jù)位26-28us,為了保險起見,這里設(shè)置為35us,如果高電平的持續(xù)時間低于35us,那么就表示數(shù)據(jù)0。
2. 字符顯示
OLED的顯示(包括字符提取等),這里不做介紹,我在另一篇文章有介紹過,感興趣的可以看看:京微齊力:基于HMEP060的OLED字符顯示(及FUXI工程建立演示)
3. 字符輸出
代碼有注釋,可以看注釋
35 本例中,OLED顯示一共分為如下5個狀態(tài)。在初始化完成后,屏幕顯示的是雜亂無章的數(shù)據(jù),所以在初始化完成后,要進(jìn)行一次刷新,將OLED中的數(shù)據(jù)全部寫0。然后進(jìn)行顯示固定不變的支符,例如像溫度濕度這樣的字符。然后進(jìn)入空閑態(tài),直到DHT11采集到數(shù)據(jù)后,就進(jìn)入到數(shù)據(jù)顯示狀態(tài),數(shù)據(jù)顯示完成后,又回到空閑態(tài)。這是整個的一個流程。
Part三
弧形抓取
在工程中,例化了debugware IP核,對溫濕度傳感器的波形進(jìn)行抓取,可以看到如下:
前文有說過,傳感器的數(shù)據(jù)位總共有40位,考慮到后續(xù)可能抓取別的波形,所以此處debugware的數(shù)據(jù)位寬我設(shè)置到了45位,預(yù)留了5位。
這里抓到的波形是:2E 0019 034A
對應(yīng)的二進(jìn)制即:
0010_1110_0000_0000_0001_1001_0000_0011_0100_1010
根據(jù)上文數(shù)據(jù)公式:8bit濕度整數(shù)數(shù)據(jù)+8bit濕度小數(shù)數(shù)據(jù)+8bit溫度整數(shù)數(shù)據(jù)+8bit溫度小數(shù)數(shù)據(jù)+8bit校驗和數(shù)據(jù)
所以此刻的,濕度:
46.00(10_1110_0000_0000)
溫度:
25.03(0001_1001_0000_0011)
審核編輯:湯梓紅
-
傳感器
+關(guān)注
關(guān)注
2545文章
50445瀏覽量
751075 -
dsp
+關(guān)注
關(guān)注
552文章
7959瀏覽量
347929 -
FPGA
+關(guān)注
關(guān)注
1625文章
21620瀏覽量
601239 -
OLED
+關(guān)注
關(guān)注
119文章
6171瀏覽量
223684 -
動態(tài)顯示
+關(guān)注
關(guān)注
0文章
40瀏覽量
11646
原文標(biāo)題:京微齊力:基于P1P060的OLED動態(tài)顯示(溫濕度實時數(shù)據(jù))
文章出處:【微信號:HME-FPGA,微信公眾號:HME京微齊力】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
評論