FPGA與DHT11串列通訊

使用VHDL硬體描述語言撰寫的串列通訊韌體來讀取DHT11感測到的溫濕度數據。

  • 北科附工
  • 高二
  • 2023
  • 個人製作
左下角DHT11溫濕度感應器,右上角FPGA,左上角有七段顯示器顯示目前溫濕度

前言

當初因為被選上了工科技藝競賽數位電子組的選手,所以開始了VHDL的培訓。經過了兩個月的基本語法培訓後,我開始嘗試去看原模組datasheet,照著要求的訊號去跟DHT11溫濕度感應器溝通獲取溫濕度數據。

原理

  1. 使用moore狀態機來與dht11溝通
    1. 資料腳設為輸出,發送開始訊號
    2. 資料腳設為輸入,接收dht11 回傳資料
    3. 將資料放到signal方便其他模組讀取
    4. 停頓1秒左右給dht11緩衝時間
    5. 重複以上
  2. 將溫濕度integer 型態訊號轉成4位元7段顯示器顯示輸出

心得

在學習這個硬體描述語言過程中其實蠻煩躁的,因為VHDL不像普通程式語言那樣是循序執行,他是有些同步執行有些循序,所以整個邏輯思維大爆炸,完全不能套用以前寫c++、python等程式語言的想法,要邊寫邊想像合成出的電路大概長怎樣來推斷順序是什麼,就算腦袋都想好了,出來結果也可能跟想像完全不一樣😭

這次的串列通訊也花了我整整一星期的時間在debug,但當最後成功時的雀躍感真的遠遠超過使用Arduino來讀取DHT11😆

經過這次成功的經驗後,我對狀態機的使用更為熟練了,也對串列通訊有了更深的認識,debug技術也大幅提升,因為沒有邏輯分析儀,所以我用示波器來debug已經用的滾瓜爛熟了!