趣味のマイコンいじり

安価なマイコンを利用して作成したアプリの紹介です。

温度・湿度センサ DHT11/22 をSTM8S103Fボードで動かして見ました

温度・湿度センサDJHT11の記事をあちこちで見たので、購入してSTM8S103F
ボードで動かしてみました。センサからの出力は40ビットのシリアルで、
信号のHIGHレベルのパルス幅によりデータのHIGH/LOWを判定するものでしたが、
Arduinoのライブラリの方式をそのまま利用しても、8ビット幅のCPUボードでは
処理速度が全然足りませんでした。その為、処理のどこが問題なのかを調べる必要が
有り、テスト信号のポートを用意して、Arduinoのライブラリの修正方法を検討して
その結果を修正に反映させる事により、動かす事ができる様になりました。
以下がその状況です。

<DHT11/22 温度・湿度センサの概要>
   温度センサとしてDHT11が使われている記事をあちこちで見かけたので、
   購入してSTM8S103F3ボードで動かして見ました。センサの出力表示用の
   デバイスとしてはI2CのOLEDを用いてこれに温度と湿度を表示させる事に
   しました。
    イメージ 1

   [DHT11/22]
     1.温度・湿度センサ
     2.温度・湿度測定範囲
          DHT11 :  0 to 50℃ (±2℃) / 20 to 90%RH (±5%RH)
          DHT22 :  -40 to 80℃ (±0.5℃) /  0 to 100%RH (±2%RH)
      3.インターフェイスは1線で40bitsデータ
           データはHighレベルのパルス幅で識別
      4.電源電圧 
           DHT11 :  3 to 5.5V
           DHT22 :  3.3 to 6V

   [OLED]
     1.画素数 128x64ドットの有機LEDディスプレイ
     2.発光色は白色・青色・黄色/青色等が有り
     3.インターフェイスは通常のI2C(SPIの製品も有り)
     4.ドライバIC
          0.96インチは SSD1306
          1.3インチはSSH1106

   [動作状況]
   

<関連資料>
    DHT11/22のデータシートはこちらのものを参考にしました。
   URL : http://www.micro4you.com/files/sensor/DHT11.pdf    --- DHT11
               https://www.sparkfun.com/datasheets/Sensors/Temperature/DHT22.pdf     --- DHT22

     DHT11/22駆動用のライブラリはこちらのArduino用のものをSTM8Sチップ用
     に修正して利用しました。
   URL : https://github.com/markruys/arduino-DHT

   OLEDに関しては以前作成したこちらの記事を参考にしました。

<テスト内容>
   DHT11/22の動作に関しては次の事を目標としました。
 
    1.パルス幅識別方式のデバイスとのインターフェイスがSTM8Sのチップで
          可能かどうか確認
    2.可能な場合、その方法を検討する
    3.その状態で、センサ情報をOLEDに表示できる様にする
    
    結果としては、Arduino用のライブラリは32bitsのチップ用のもので、
    オリジナルの処理の様にパルス幅を計測しながら1ビット毎にHIGH/LOWの
    判定をするにはSTM8Sのチップでは3倍以上の処理速度が必要な事が
    判りました。特にRAMとのアクセスを8ビット幅で行う事が厳しい様で、
    オリジナルの様に途中でループ処理や2バイトデータのシフト処理を入れると、
    処理に大きな時間がかかる事が判明しました。その為、最初に40ビットの
    パルス幅の計測のみを行い、センサからのデータの出力が終わった後に、
    計測した時間のテーブルからビットのHIGH/LOWの判定を行う処理に
    変更しました。この事により、パルス幅計測時のチップの処理をスムーズに
    する事ができ、センサからのデータを読み込む事ができる様になりました。
    問題点を解析して行く途中でもう無理かと思い、一時は割り込みでの対応を
    考えたのですが、ライブラリの一部修正のみの通常の処理で行える様に
    なりました。少し骨の有る内容で、楽しむ事ができました。

 [機器の接続] 
    イメージ 2

    イメージ 3

   [コード類]
     コードの開発にはIARのシステムを利用しました。
  (STM8S103F3P6ボードののコード開発に 関してはこちらの記事
         参照して下さい。)

     Code download URL : https://www.dropbox.com/s/mc86c6y7xjyfcq5/IAR_STM8S103F3_pseude_Arduino_0118.zip?dl=0