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