5V単電源用のHD44780互換LCDキャラクタ液晶モジュールDMC16117Aを3.3Vで使う

課題: AVRで3.3V I2C動作の大気圧モジュールの値を読んで、LCDキャラクタ液晶に値を表示させたいが、5V用の液晶しか手元にない。昔のI2C仕様書にのっていたようなI2Cの5V-3.3Vレベル変換回路をNチャネルFET2個で組むにしても、その回路をつくる手間に加え、5Vから3.3Vを作る手間は別に生じる。3.3Vレギュレータはあと一本なので使わずとっておきたいし、前みたいに青色LEDをかわりに使うのもすでにやったので、ホビーという意味では別の方法を使いたい。
解決策: LCDの仕様書を見ると、コントローラの電圧範囲は4.5-5.5 Vと書いてあるが、HD44780の仕様書をみると3.3Vでの制御は可能。LCD用のコントラストの電圧だけおおよそ 4.0 V以上かかればよいらしい。1-2Vの負電圧をつくってコントラストピンに入れれば良い。負電圧はめんどくさそうだけど、どうするか、と調べてみたら、こちらのページにてチャージポンプを使った回路が紹介されていた。
http://elm-chan.org/docs/lcd/lcd3v_j.html

というわけで、AVRのPWMで50%デューティのクロックを作って、チャージポンプ回路をつくって入れてやりました。 -2.7Vが簡単にでました。手元に転がっていたダイオードはショットキーかどうかわからないが、-2.7 = -3.3 + 0.6であるので2本で ~0.6 Vの電圧降下であった。キャパシタは100nF, 1uFをつかいました。可変抵抗を入れなくても周波数で制御できそうでしたので、それを液晶のコントラストピンに直結しました。電圧が降下して文字が薄くなったので、周波数を83 kHz程度に調整すると、負荷ありで-1.7 Vとなり、良い感じの濃さで表示できました。


見難いけれどチャージポンプ回路。右は3.3Vで表示できた液晶

AVRでPWMをするのは簡単で、デューティを50%に固定してクロックとしてつかうのであれば割り込みなど必要なく、レジスタにPWMの設定をするだけでピンにクロックがでてきます。

PWM設定部分の抜粋です。


void pwm_init(void){
  OCR2A = 0x60;//TOP value, 83 kHz at 8 MHz
  OCR2B = (OCR2A >> 1);//duty 50%
  TCCR2A = 0b00100011;//OC2B PWM, WGM = 111
  TCCR2B = 0b00001001;//timer counter cont. reg., prescaler 1
}