■PICからAVRに乗り換えて、GPSロガーとか作ってみたりなんかしちゃったりなんかしたわけですが、もうちょっと深く踏み込んでみたい、というかやっぱりGPSロガー初号機は緯度経度の表示も出たし、記録インターバルも1秒間隔だったりで便利だったんですよ。やっぱり、あれくらいのものを作らないとPICを越えたとは言えないのではないか。いや、別に超える必要はないんですが、そこをあえて越えてみたい。
もちろん、単純に作るのであれば、ハードウェアとしてはPICがAVRに置き換わるだけなんですがそれだけでは芸がない。初号機での不満というか、なんとかならんのかというのは幾つかあって、まずは5V駆動だったので、電池3本必要だったということと、SDカードが3.3V駆動の世界なので、間にレベルコンバータをかます必要があったこと。電池3本が不満というのは、世の中乾電池を調達するとき、3の倍数パックというは12本パックとか18本パックとかいった規模になるわけで、せいぜいが4本パック3つとかいった単位で買い込むわけです。電池をくるんでいるビニールを破くと、必然的に1本余るわけですね。これが結構うざったいわけです。どうせなら電池2本で動いてくれよと。
レベルコンバータについては当然部品が増えるわけですし、部品が増えると場所は喰うし、配線は増えるし(プリント基板の発注とかいったスキルはまだ身につけていない)で、それはそれで面倒。
そうなってしまった元凶はLCDが5V必要だということに尽きるのですが、世に工夫に富んだ人はいるもので、LCDも3Vで動くのです。というか、正確にはロジック系だけ3Vにしても動くのです。液晶表示にはやっぱり5V程度は必要。
LCDのデータシートを見てみると、ロジック系とLCD駆動に必要な電圧というのが、Vdd-Vss,Vdd-Voという書かれ方をしていて、要するにVddは共通でも、下側の電位を2種類用意すれば、OKっぽい。しかもロジックのHigh,Lowの閾値が2.2V程度ということは、3Vというのはいけそうな感じ。ロジック系の世界を基準にすると上が3.3Vで下が0Vというのは崩せないので、Voの値はマイナスにすればいい。
この手の工作物ではリファの多いELM氏の事例ではLCD自身が持つクロックの波形を使ったコッククロフト・ウォルトン回路で供給電圧の2倍の絶対値を持つ負電圧を作り、それを利用しています。
自分はそこまでの工作はできないので安易にMAXIMのMAX680で正・負2倍電圧を作り、そこから負圧だけを使いました。3.3V供給なら±6.6Vを取り出せるので、-6.6Vを10KΩの半固定抵抗で分圧し、適当な電圧(-1.5V程度)を取り出すわけです。
あとはえいやと配線を済ませますが、今回もLCDとはデータラインを8ビットパラレルで接続しました。プログラムが簡単になるので。それに使う石がATmega128なので、足は幾らでもあるし。
LCDの初期化シーケンスの資料が手元になかったので再度探すのに手間取りましたが、再発見しました。初期化シーケンスは次のようなことをやります。
1)電源投入から15msec以上待つ
2)RS,R/WをLowのまま、データラインに0x30
3)4.1msec以上待つ
4)RS,R/WをLowのまま、データラインに0x30
5)100μsec以上待つ
4)RS,R/WをLowのまま、データラインに0x30
5)LCD表示の初期化コマンドを流す
資料としてはSUNLIKE Display Tech.Corp.技術資料(Technical)にあるInitialization by InstructionとDisplay Commandsが読み易いと思います。以前秋月で買い求めたLCDに添付されてきた資料は読みにくいし字は小さいし汚いし。(秋月のサイトに観やすいPDFがあることは知っています)
とりあえず表示レベルはOK。AVRのLCD表示ロジックはCのソースだとさすがに単純です。LCD表示装置のアドレッシングが直感的な構造を持っていないのでそれを扱い易くするための仮想画面とマッピングさせたりとか作りこみ始めていますが、まだライブラリとしては未完成。
探せばあるのは知っているんですが、そこをあえて再発明するのがホビーのホビーたるところだと思っています。