製作モジュール一覧

2015年3月17日火曜日

Rの分圧で5V->3.3Vレベルシフト(片方向)

5Vから3.3Vへの一方通行のレベルシフトに決め打ちすると
Rで2:1に分圧してやればちょうど3.3Vの電圧が取り出せる

半導体を使わないのでめっちゃシンプルだ

SPIはMOSI、MISO、SCK、CSのどれも一方通行だしNokia 5110はMISOすらない
(デバイスからデータの読み出し不可。すべてマスター→スレイブの流れ)

ブレッドボードの配線

Rによる20kΩ(10kΩ×2の直列):10kΩの分圧×4だ


問題なく動作した(^q^/

SCKの波形


赤色が5V側(Arduinoの出力)、黄色が3.3V(LCDに入力)

3.3V側もほぼMAX3.3Vに変換できた

単なるRの分圧なのになぜだか波形がかなりなまってしまった

Nch MOS FETを使った時と逆のなまり方だ

Loが0Vまで落ちていない

LCDをつながない状態でも波形のなまりはほぼ同じ
だったと思う、たぶん(^q^;

ブレッドボードの容量が影響してるのかな?
300kHz程度でもこんなに影響するんだろうか

あれか?Arduinoの出力のドライブ能力が不足してるのかな?

う~んわからない(^q^;

大して手間でもないのでユニバーサル基板で組んでしまって
もう少し様子を見てみようと思います

Nch MOS FETで3.3V<->5V双方向レベルシフト

交換してもらったオシロのプローブが届いたのでハードウェアの実験

I2Cではなく、SPI等普通の入出力のレベルシフトです

<追記: 2015.03.17>調べてみたらこの回路I2Cでも使えるようです。前書いた記事「I2Cの5V↔3.3Vレベルシフト」(http://dad8893.blogspot.jp/2014/09/i2c5v33v.html)の「Nch MOS FETを使う」で挙げた回路と一緒です。パッと見の見た目が違うだけだった(^q^;</追記>

SparkFunの「Logic Level Converter - Bi-Directional」の回路図を参考にNch MOS FETで実験してみた
https://www.sparkfun.com/products/12009

LTSpiceでシミュレーション

手持ちにあったので実際は2N7000で実験したが、シミュレーションはLTSpiceにデフォルトで入っていた2N7002で行った



500Hzの矩形波でのシミュレーションだ

3.3V→5V、5V→3.3Vの両方をやってみた
どちらもうまくいった

ブレッドボードで実験



5V→3.3Vの変換はArduinoで5V/500Hzの矩形波を出力するスケッチを書いて
3.3V側の波形をオシロで見た

電源電圧の実測値は
3V: 3.37V
5V: 4.93V

赤色が3.3V側、黄色が5V側(Arduinoの出力)

3.3V→5VはPSoC 4 Pioneerを3.3V駆動させて波形を出力、5V側をオシロで測定した

電源電圧の実測値は
3V: 3.40V
5V: 4.92V

赤色が3.3V側(PSoCの出力)、黄色が5V側

どちらもうまく動いているようだ(^q^/

動作周波数を上げてみる

PSoCのPWMを使って出力周波数をあげてみた

100kHz



変換後の波形がなまり始めた

200kHz



かなりなまってきたが、まだ5V付近まで電圧は上がっている

500kHz


最大でも4V程度までしか電圧が上がっていない

1MHz



もはやコンバート前の3.3Vより電圧が下がってしまっている(^q^;

Nch MOS FETでのコンバートは200kHzぐらいまでと考えたほうがいいかもしれない

負荷にRやCをつなぐとさらに出力電圧は下がる

LTSpiceで周波数を500kHzにしてシミュレーション


シミュレーションでも500kHzにすると波形がなまる
実験と案外似通った結果だ

Nch MOS FETのレベルシフタを通してNokia 5110を動かしてみた


画像ではLCDに何も表示されていないが表示はされる。

が、データの読みこぼしがあるのか頻繁に表示が崩れてしまう(^q^;;;

画像の通り何も表示されない状態になることもある

SCKの波形


Arduinoからの5V出力は3.3Vにレベルシフトされているが、波形がかなりなまっている

カーソルを使って周波数を調べるとだいたい315kHz程度だった

<LCD-5110_Basic>ライブラリのソースを眺めた感じでは
Arduinoの<SPI>ライブラリは使わずにAVRのSPI用のレジスタを直にたたいているようだ

ともかくNch MOS FETを使ったレベルシフトはSPIでは速度的にきついのかもしれない

考えてみればSPIはMOSI、MISOとマスタ・スレーブ間が一方通行なので双方向変換でなくてもいいのか

Rとダイオードとかもっと速度的に期待できる方法も試してみようかな

ぴゅんぴゅん3号のファームウェアのプログラミングが何かやる気が起きないので
こまごましたハードの実験をもう少しやるかもしれません

2015年3月15日日曜日

ArduinoでSPIのグラフィックLCDを使ってみた

使ったのはaitendoで仕入れた「ノキア液晶5110(SPI) [M-LCD5110-PCB]」だ
http://www.aitendo.com/product/1164

液晶と基板の接続は導電性のゴムみたいなやつでやるのでここはんだ付けしなくていい
ピンヘッダだけはんだ付けすればOK

ちょっと心配だったが無事動いてくれた


ライブラリはaitendoのページにある通りRinky-Dink ElectronicsさんのLCD5110_Basicを使った

http://www.rinkydinkelectronics.com/library.php?id=44


SPIはパラレル接続とI2Cの中間みたいな感じで動かしやすいのかもしれない

といってもLCDが3.3V駆動で信号線はAruduinoからの5V出力なのでたぶん仕様外の動作だと思います

SPIのMOSI(マスター→スレーブ)の波形


きっちり5V突っ込まれてます(^q^;

グラフィック表示のLCDだと絵的に何かやりたくなって
とりあえずLIFE GAMEでも作ろうかなと思ったが
適当にやるとArduinoのSRAMが足りないので今日はあきらめました

bit演算してメモリの使用量を減らそうとおもったんだがやっぱめんどくさい(^q^;

でもグラフィックLCDは表現力が高いのを実感したので使いこなせるように頑張りたいと思います。