この間は勘違いして(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
ソフト・オシロじゃ矩形波の形はまともに測れないのは今までの経験からわかったので
波形の崩れは無視する
で、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つ
- 3.3VのLCDを無理やり5Vで使う
- HDなんちゃら互換の5VのLCDを使う
2の課題はアルミ筐体にでかい角穴がうまく開けられるかどうかだ
空き缶とか百均でなんか仕入れてきて練習するかね
ダイオードの降圧をまたまた利用して
返信削除LCDを駆動できる程度の電流を流せるダイオード(VF 0.8V)を用意して
5v------▷|-----▷|----------------+-------LCD-VCC
0.8V 0.8V VCC 3.4V
とやっちゃう作戦はあります。
お送りしたHIDASPXの電源みてください、
ATTINYに電源供給する前段に謎の小信号ダイオード直列2個があると思います。
HIDASPXの信号レベルあわせナシ版はそうやって動いてます。
AVRチップを3.3V近辺で駆動させてるわけです。
I2cよくわかってないんで、オープンドレインってピンとこなかったけど、
返信削除TTLでいうとこのオープンコレクタならわかります。
Trのベース、コレクタ、エミッタが、ソース、ドレイン、ゲートがFETでしたね。
LレベルはGNDですが、Hレベルがハイインピーダンスということです。
基本そのバスはプルアップして使います。
多分プルアップの電圧が規定されてると思われます。
とはいえど、回路みるとプルアップされてますよね。
オープンコレクタ/オープンドレインについても少し調べてみたんですが
返信削除やっぱよくわからないので、この辺のことはおいおいやることにします
I2C専用のレベル変換ICが出ているのがなんか気になります