AVRにLCDをつないで出力できれば、おもしろいしデバックにも使えるなと思って、簡単な方法は無いかと調べてみました。

前回のプログラムと同じ、AVR-LibCのサイトにあるサンプルには他にも数種類あるけれど、中でも「Using the standard IO facilities」と言うサンプルには、LCDとUARTをAVRにつないで、stdin/out/errをUARTやLCDに割り当て、fprintf()等で出力するデモが興味深い。

このプログラムのLCD部分を取り出して使えないか?と見てみたら、使えそうではあるけれど、どうも、機能的にちょっと不十分な感じです。(改行を送っても改行されないなど。)

で、もう少し調べてみたら、Peter Fleuryさんと言う人のサイトAVR-Softwareの「AVR-GCC libraries」の所に、「LCD library for HD44870 based LCD's」と言う物がありました。doxygenで作ったドキュメントもちゃんとしているし。機能も改行や右端まで行ったら次の行にWARPする機能などもあっていい感じです。

今回これを使ってみることにしました。

回路
回路は同じサイトの「Interfacing a HD44780 Based LCD to an AVR」にある物で、Attiny2313でも使える「4-bit Mode」の結線を参考に、(例によって)Xtalを使わず、それとAttiny2313にはPortAは3本しか無いのでPortBを使いました。

それと、ソースコードを読むと、1つづつテストを送るためにPortD2(6pin)でスイッチを使っているので、それも付けておきます。

ソースコード
ソースコードの方は、まずXtalを使わず内臓発信器を使うので、ディフォールトの1Mhzを設定します。
#define XTAL 1000000 /**< clock frequency in Hz, used to calculate delay timer */

そして、LCD接続ポートをPortBにします。
#define LCD_PORT PORTB /**< port for the LCD lines */



これで、OKなので、コンパイルしてみます。
コンソールを見ると、、、
AVR Memory Usage
----------------
Device: attiny2313

Program: 842 bytes (41.1% Full)
(.text + .data + .bootloader)

Data: 93 bytes (72.7% Full)
(.data + .bss + .noinit)

842バイトを使っていますね。

(余談ですが、このライブラリは細かくLCDとの接続ポートを設定出きるのですが、4bitsのデーター線をポートの0..3に割り当てないと、ちょっと複雑なコードがコンパイルされ、サイズが多少大きくなります。)

AVRにダウンロードして、実行してみると、LCDに文字が表示されます。ボタンを押すと、別の文字が表示されます。(プログラムを見ると、XY座標指定や、外字のダウンロードなどもやっています。)

lcd


簡単ですね。
(毎回、写真が下手ですみません、、、)