2014年9月29日月曜日

I2Cの5V↔3.3Vレベルシフト 3.3V固定編

tozさんにHIDaspxのUSB(3.3V)↔AVR(5V)について教えてもらった

この間は勘違いして(USB)5V↔AVR(3.3V)でツェナーで降圧しているものだと思って
よくわからなくなっていた

どうりでRの入れ方が逆だと思った

HIDaspxではAVRの入力スレッショルドが2.5V前後にあるので
5V駆動でも3.3V系の信号が受け取れることを利用して
信号線は3.3Vで固定しているようだ

ATMega328PのDATASHEETを読むとこれとは別にI2Cの特性というのがあった

29.7 Two-wire Serial Interface Characteristics
VIH | Input High-voltage | Min. | 0.7Vcc

5[V] × 0.7 = 3.5[V]

なのでちょっと怪しいが、5Vでも動いているのでとりあえず実験

LEDでレベルシフト


ツェナーの手持ちがないのでLEDで基準電圧を作ることにした

手持ちのLEDのだと

赤色LED×2 1.8[V]×2=3.6[V]
青色LED   3.3[V]

が適当そうなので、LTSpiceでシミュレーション

5V→3.3V


3.3V→5V



電流制限抵抗がないとLEDが飛ぶはずなので、330ΩのR3とR6を入れた

ツェナーよりちょっとややこしいが、シミュレーションはまずまずの結果

青色LEDと赤色LED×2でブレッドボードで試作





5V側をHIGHにして、3.3V側の値を測定した

赤色LED×2 3.49V
青色LED 3.00V
+5V電源 4.92V
+3.3V電源          3.30V

Arduinoで500Hz(というかdelay(1)の繰り返し)のHIGH,LOWを出力するスケッチを作って
ソフト・オシロで波形を測定した

赤色LED×2



青色LED



ソフト・オシロじゃ矩形波の形はまともに測れないのは今までの経験からわかったので
波形の崩れは無視する

で、LCDをつないでみた





やっぱ、だめだ

5V駆動ならちゃんと表示されるので、謎は深まるばかり…

もう観念してI2CのレベルシフトICを使うかなとWebで物色していたら
共立さんでヒントを発見

1bit双方向・バッファタイプレベルシフタIC TXB0101DBVR(http://eleshop.jp/shop/g/gB35411/

→I2C等のオープンドレインアプリケーションには使用できません。

1bit双方向・FETタイプレベルシフタIC TXS0101DBVR(http://eleshop.jp/shop/g/gB35415/

→FETタイプはI2C等のオープンドレインアプリケーションに最適。

オープンドレインというのは名前は聞いたことがあるが、ロジック回路を実作したことがないのでよくわからんが
多分そういうことだろう

中の図を見てもダイオードでのレベルシフトとMOS FETでのレベルシフトだ

疲れたので、これ以上I2Cのレベルシフトについて調べるのはまたいずれ

5Vで統一作戦


作るつもりの実験用両電源には、あんまりイチかバチかのものは使いたくないので、
今回は諦めて5Vで統一することにする。

よく考えれば
AVR用の5VとLCD用の3.3Vの2つ三端子レギュレータを用意するのもどうかと思うし

電源なのに中も電源ばっかりっていう

選択肢は2つ


  1. 3.3VのLCDを無理やり5Vで使う
  2. HDなんちゃら互換の5VのLCDを使う


2の課題はアルミ筐体にでかい角穴がうまく開けられるかどうかだ

空き缶とか百均でなんか仕入れてきて練習するかね

3 件のコメント:

  1. ダイオードの降圧をまたまた利用して
    LCDを駆動できる程度の電流を流せるダイオード(VF 0.8V)を用意して

    5v------▷|-----▷|----------------+-------LCD-VCC
       0.8V 0.8V   VCC 3.4V

    とやっちゃう作戦はあります。

    お送りしたHIDASPXの電源みてください、
    ATTINYに電源供給する前段に謎の小信号ダイオード直列2個があると思います。
    HIDASPXの信号レベルあわせナシ版はそうやって動いてます。
    AVRチップを3.3V近辺で駆動させてるわけです。

    返信削除
  2. I2cよくわかってないんで、オープンドレインってピンとこなかったけど、
    TTLでいうとこのオープンコレクタならわかります。
    Trのベース、コレクタ、エミッタが、ソース、ドレイン、ゲートがFETでしたね。
    LレベルはGNDですが、Hレベルがハイインピーダンスということです。
    基本そのバスはプルアップして使います。
    多分プルアップの電圧が規定されてると思われます。

    とはいえど、回路みるとプルアップされてますよね。

    返信削除
  3. オープンコレクタ/オープンドレインについても少し調べてみたんですが
    やっぱよくわからないので、この辺のことはおいおいやることにします

    I2C専用のレベル変換ICが出ているのがなんか気になります

    返信削除