2016年4月24日日曜日

ロジックICでSPIの5V->3.3Vレベルシフト Nokia LCD5110を動かす

aitendoのNokia LCD5110は、3.3V駆動のLCDで、コントローラーのPCD8544のDataSheetを見ると
VIH | MIN 0.7VDD | MAX VDD
となっていて5Vを入力するとほんとはまずい。(動くことは動くが…)

Rの分圧で5V->3.3Vレベルシフト(片方向)続き」で抵抗による分圧をしてみたが、信号波形があまりよくなかったのでもう少し実験してみた。

Arduinoのスケッチは「LCD5110_Basic」ライブラリのArduino(AVR)/LCD5110_Bitmapを使用。

抵抗分圧



↑120Ωと330Ωの抵抗で分圧
バックライトは基板上に電流制限抵抗が入っているので8PINはVDDに直結してよい。

5V * 330Ω / (120Ω + 330Ω) ≒ 3.67V

少し電圧を高めに設定しているのはArduino(今回はaitendoのびんぼうでいいのを使用)のSPI信号の電圧が5V出ていないから。

ArduinoからのSPI信号

ch1:MOSI ch2:SCK

前回は(と言っても1年以上前)10kΩ:20kΩの分圧でうまく動いてくれたが、今回ブレッドボードで実験したところ10kΩオーダーのRではうまく動作せず、1kΩオーダーでもだめだった。

1.2kΩ:3.3kΩで分圧

MOSI(Data)の方は3.3V~GND程度で出力されているがSCK(Clock)のLがGND付近まで落ちていない。LCD5110の入力インピーダンスが低いのかびんぼうでいいのの出力が弱いのかわからないが。液晶にも何も表示されない。

120Ω:330Ωで分圧

抵抗値を下げるとSCKの波形もきれいになり液晶も無事表示された。


ただ120Ω:330Ωの分圧だと1ピン当たり

5V / (120Ω + 330Ω) ≒ 11.1mA

も抵抗だけで電流を流しているのでかなりもったいない。(一応AVRは1ピンあたり20mAまで流せるが)

またマスター側のVCCによってはHの出力電圧が変動してしまうかもしれない。

5VトレラントのバッファICを使う(74HC4050)


5VトレラントのロジックICを使えばロジックレベルの変換ができるので実験してみた。

5VトレラントとはICを3.3V駆動させても5Vの入力を受け付ける。出力は3.3Vになるので5V->3.3Vにレベルシフトできる。(片方向)

74VHCシリーズはすべて5Vトレラントの様だが、HCシリーズでも74HC4050(6回路入りバッファ)が5Vトレラントなのでこれを使った。

74HC4050ピン接続

ブレッドボード図


SPI信号

ch1:MOSI ch2:SCK

SCKも3.3V~GNDできれいな波形が出力されている。

消費電流をテスタで計測してみると6mA程度だった。これはLCD(バックライト含む)と74HC4540の合計。


まとめ


抵抗分圧によるレベルシフトは手軽だが、条件によっては動作しない場合がある。

74HC4050は値段も安いし6回路入っているので5V->3.3Vのレベルシフトにはなかなか使いやすいと思う。