So-net無料ブログ作成

8ビット双方向ロジックレベル変換モジュールを試してみた! [Arduino]

I2Cに続いて8ビット双方向ロジックレベル変換モジュールも試してみました。Amazonで入手したノーブランド品です。当然、何も説明書がついていません。まぁなんとなかなるだろうと思いましたが、それが甘かった。

DSC03910.JPG


接続するセンサーはSPI対応の加速度センサーです。こちらは完成後ですが、こんな感じで接続しました。

DSC03907.JPG


加速度センサーの詳細や使用したスケッチは次の記事を参照してください。


Arduino で3軸加速度センサーを試してみた!
http://makers-with-myson.blog.so-net.ne.jp/2014-03-08


さて、今回はこのモジュールのOE端子の話です。なんの説明書もないので、負論理なのか正論理なのかよく分かりません。

加速度センサーSPI_OE.png


OEなのできっと負論理なのだろうと、最初はGNDに接続してみました。

DSC03911.JPG


スケッチを動かしてみました。

LVC_OE_LOW.png


どうやら負論理ではないようです。では正論理なのだろうとセンサー側の電源(3.3V)につないでみました。

DSC03913.JPG


出力を確認します。

LVC_OE_HIGH.png


値は出ているものの、Xの値だけがなぜかおかしい。

OEの正負のタイミングで挙動がどう変わるか調べるために、Arduinoの9ピンに接続してみることにしました。説明書がないので適正な電圧レベルがよく分かりませんが、ブランド品のモジュールでは大丈夫なので恐らく問題ないでしょう。


加速度センサーSPI.png


いろいろ試行錯誤した結果、Arduino のSPIの初期化中にロジックレベル変換モジュールのOE(出力)をONにしておくと値がおかしくなる ということが分かりました。

つまり、SPIの初期化コード中はロジックレベル変換モジュールをOFFにして、初期化後にONにする必要があるということです。

void setup() { 
  unsigned int res = 0;  
  
  pinMode(CS, OUTPUT);
  pinMode(OE, OUTPUT);
  digitalWrite(OE, LOW); // ロジックレベルコンバータの出力を止める

  Serial.begin(9600);
  
  SPI.begin();
  SPI.setBitOrder(MSBFIRST);
  SPI.setDataMode(SPI_MODE3);
  SPI.setClockDivider(SPI_CLOCK_DIV2);
  
  digitalWrite(OE, HIGH); // ロジックレベルコンバータの出力を開始(SPIでデバイスと通信開始) 

  writeRegister(0x20, 0x27); 
  res = readRegister(0x0F);

  Serial.println(res);
}


再掲になりますが、加速度センサーの駆動やスケッチについてはこちらを参照ください。

Arduino で3軸加速度センサーを試してみた!
http://makers-with-myson.blog.so-net.ne.jp/2014-03-08


あらためて調べてみると、8ビット双方向ロジックレベル変換モジュールはVA側とVB側で対応電圧が違ったり、OEの論理が正負逆だったり、色々なバリエーションがあるようです。

無駄な時間を費やさないよう、説明書付きのものを購入されることをお勧めします。
( ̄▽ ̄;)








TXB0108搭載8CH双方向ロジックレベルコンバータ

TXB0108搭載8CH双方向ロジックレベルコンバータ

  • 出版社/メーカー: スイッチサイエンス
  • メディア: エレクトロニクス