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




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




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


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


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




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




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




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




出力を確認します。




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

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





いろいろ試行錯誤した結果、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双方向ロジックレベルコンバータ

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