STEMMAで広がるArduinoの世界⑨Step1 対数変化電子抵抗器DS1841
IC自体が3.3/5Vの電源で使えるデバイスのため、I2Cの信号レベル変換回路は入っていません。SDA/SCL信号のプルアップ抵抗は10kΩが入っています。
●Adafruitのブレークアウト・ボード
STEMMA QT(JST SH 4ピン)コネクタは2か所に装着されていて、どちらにつないでもかまいません。このコネクタを使ってI2Cで制御する場合、特に、ジャンパ線をつなぐなどは不要です。
Adafruit DS1841 I2C Logarithmic Resistor
裏面には、I2Cアドレスを設定するA0とA1ピンのショート・ジャンパが用意されています。デフォルトで、A0/A1は10kでプルダウンされており0x28です。アドレスは、0b01010'A1''A0'の7ビットなので、ジャンパをはんだでショートし'1'にするとアドレスを変更できます。
●DS1841のおもなスペック
- 電源電圧 2.7~5.5V
- 可変抵抗範囲 370Ω~22kΩ(RW端子)
- タップ 128
- インターフェース I2C(0~400kHz)
- スレーブ・アドレス 0x28(デフォルト)。A0/A1の設定で0x29、0x2a、0x2bに変更できる
●使用環境
- Arduino UNO R3
- Arduino IDE 1.8.13
- Windows10 20H2
●接続
電源は5V を使いました。Arduino UNO R3のI2Cは、SCLとSDA端子がありますが、SCLはA5に、SDAはA4につながっています。どちら側につないでもかまいません。白色のリード線は見えないので、黄色で配線図を描きました。
●スケッチ
利用手順は、Adafruit DS1841 I2C Logarithmic Resistor Overviewに書かれています。
ライブラリを導入します。メニューのツールから、「ライブラリを管理」を選び、検索欄にDS1841を入力します。見つけてきたAdafruit DS1841のインストールをクリックします。
同時にサンプル・スケッチも導入されます。
メニューのファイルからサンプルの入っているスケッチ例を選択します。そこから、Adafruit DS1841- adafruit_ds1841_testを選択します。
実行中の様子です。Wiper(POS)を10LSBと120LSBの位置に動かし、その時点の電圧を読んでいます。
Wiperの出力をコメントアウトし、シリアルプロッタを動かしました。
RW端子をA0へ、RH端子を3.3Vへつなぎました。温度(赤色)は一定、電圧(青色)は0.47Vと2.87Vを交互に表示しています。Wiperの動作が確認できました。
●Adafruit_ds1841_lut_test
もう一つのサンプル・スケッチAdafruit_ds1841_lut_testを読み込んで動かします。
実行結果です。
LUTは、72バイトの Lookup Tableを指します。-40~100°Cの温度範囲を0x80~0xc7のアドレスに対応させた表で管理します。0x80~0xc7のアドレスには、0xd8~0x65の値が入っています。
LUTには、LUTモードとLUT加算モード(デフォルト)があります。
LUT加算モードはLUTと同じように働きますが、LUT Value Register のWRには、
- LUTVAL(LUTARに格納されているアドレスが指す値)
- Initial Value RegisterであるIVRの値
を合計した値がロードされます。LUTにプログラムされた値は2の補数で表現されるので、正または負のオフセットがついて扱いやすいです。
LUTモードの場合、電源投入時にIVR値がWRに読み出されます。 上記の実行例では0x72です。この値は、電源投入後の最初の温度変換が完了するまでそこに残ります。
温度はtFRAMEごとに測定されます。 温度の値は、LUT内の対応する値を指すインデックスを計算するために使用されます。 このインデックスはLUTアドレス・レジスタ(LUTAR)と呼ばれ、アドレス08hにあります。 LUTARが指す位置でLUTに格納される値は、LUTVALと呼ばれ、この値は、更新モード・ビット= 1のときにアドレス09hにWR値(WR)として格納されます。その後、プロセスが繰り返され、Wiper設定が継続的に更新されます。
このLUTモードでは、72バイトのLUTに温度ウィンドウごとにWiperに設定が入力されます。 有効なWiperの設定値は0x00から0x7fです(MSBは無視される)。
LUTが0x42の場合、そのときの温度の値は0x21(32-33℃)です。
Wiperの値を読み出すと0x72でした。
Enabling LUT mode
LUTモードを有効にします。LUTを0x42にセットします。Wiperの値を読み出すと0x72です。
Disabling LUT mode
LUTモードを無効にします。LUT加算モードになります。Wiperの値を0x66にセットします。Wiperの値を読み出すと0x66でした。
このスケッチは、LUT関連の関数の動作を確認しただけのようです。