2015年1月30日金曜日

I2Cの5V↔3.3Vレベルシフト 中間まとめ的な

PSoC 4 Pioneer Kitで駆動電圧を3.3Vと5Vに切り替えて実験してみた

PSoC 3.3V | LCD 3.3V | PullUP 3.3V


PSoC 5V | LCD 3.3V | PullUp 3.3V


どちらもLCDはちゃんと表示される

LCD駆動とPullUp用にPSoC 4 Pioneer Kitから引き出している3.3Vの電圧をテスタで測ると3.48V

オシロで測定したSCL、SDAの波形を見るとどちらも3.4V程度だ

データーシートで見ると
High値のMin: 0.7×VDD
High値のMax: VDD+0.5V
なので、

3.3V駆動の時は2.31V~3.8Vで範囲内に収まっているのでこれはOK

5V駆動の時は3.5V~5.5Vなので仕様外になる

PullUpの値を調整して3.5V~3.8Vの間に収めてやればデーターシートの仕様内に収まるが
正直めちゃくちゃめんどくさい(^q^;

3.3Vと5VのデバイスでI2C通信させようと思うとRESETの信号レベルも考えないといけない

PSoCを5V駆動させたときのRESET信号


High値は5Vぐらい

PSoCを3.3V駆動させたときのRESET信号



High値は3.4Vぐらい

PSoCを5V駆動したときは3.3V駆動のLCDの仕様外になる(^q^;)

これもI2Cと同じようにオープンドレインにしてまとめてレベル合わせをするという手もあるが

可変安定化電源を作った時(http://dad8893.blogspot.jp/2014/12/blog-post_18.html)に
ツェナーで実験したようにツェナーで作った電圧は信用できない(誤差がかなりある)

シャントレギュレーターで精度を上げてPullUp用の電圧を調整などと考えてみても
部品点数が増えてどっちの信頼性が高いのかわからなくなる(^q^;

中間まとめ

製品で使うならデーターシートは絶対なのでI2Cで通信するデバイスの駆動電圧を合わせることが第一の解決策だと思う

が、5Vと3.3Vなら3.3VでPullUpすれば大体動くし
深入りしないで動かなければまた考えるという態度でいくことにします

5VでPullUpしてデバイスをぶっ壊すよりは3.3VでPullUpしておいてダメだったらまた考えるというのが趣味の電子工作としては現実的で楽な解決策のような気がします

0 件のコメント:

コメントを投稿