LCD SD1602VBWB を AVR attiny2313 で動作チェック

前に7セグLEDの表示を行いましたが、今回はLCDの表示を行ってみます。

使用する主な部品、環境は以下のとおり

・LCD SD1602VBWB-XA
・AVR attiny2313
・atmel studio6.1


2013-03-21_LCD

SD1602VBWB-XA

このままではブレッドボード上で使うときに面倒なのでピンヘッダをハンダ付けします。
ちゃちゃっとハンダ付けをしてLCDの準備は完了。

2013-03-21_LCD2

あとはブレッドボード上でLCDに電源、AVRをつなげます。

今回はAVRの出力にはポートDを利用しました。

PD0:RS
PD1:E
PD2:DB4
PD3:DB5
PD4:DB6
PD5:DB7

このようにAVRとLCD接続。
コントラストとバックライトの電圧には半固定抵抗を使うと調節時に便利です。

キャラ型のLCDは4bitモードで制御できるのでつなげるピンが少なくて楽ですね。

これでハードの準備は完了。
あとはソフトの準備をしていきます。

今回LCDをAVRで動作させるにあたって勉強も兼ねて制御関数を少し自分で作ってみて動作はしたんですが、結局のところ自作関数では機能が少ないので公開されているライブラリを利用しました。

やっぱり公開されているものは作りこみもすごいですね(^_^;)

今回利用させてもらったのはこちら
ダウンロードしたらライブラリフォルダに入っている7個のファイルをすべてatmel studioのプロジェクトにドラッグ&ドロップ

次にlcdConfig.hを開いて
13行目をコメント

68行目以降をAVRとLCDを繋げたように変更

[c]/* レジスタ選択 */
#define PIN_LCD_RS_PORT LCD_PORTD.P0
#define PIN_LCD_RS_DDR LCD_DDRD.P0
#define PIN_LCD_RS_PIN LCD_PIND.P0

/* Read/Write選択 */
#define PIN_LCD_RW_PORT LCD_PORTC.P5
#define PIN_LCD_RW_DDR LCD_DDRC.P5
#define PIN_LCD_RW_PIN LCD_PINC.P5

/* Enable信号 */
#define PIN_LCD_E_PORT LCD_PORTD.P1
#define PIN_LCD_E_DDR LCD_DDRD.P1
#define PIN_LCD_E_PIN LCD_PIND.P1

/* DB4 */
#define PIN_LCD_DB4_PORT LCD_PORTD.P2
#define PIN_LCD_DB4_DDR LCD_DDRD.P2
#define PIN_LCD_DB4_PIN LCD_PIND.P2

/* DB5 */
#define PIN_LCD_DB5_PORT LCD_PORTD.P3
#define PIN_LCD_DB5_DDR LCD_DDRD.P3
#define PIN_LCD_DB5_PIN LCD_PIND.P3

/* DB6 */
#define PIN_LCD_DB6_PORT LCD_PORTD.P4
#define PIN_LCD_DB6_DDR LCD_DDRD.P4
#define PIN_LCD_DB6_PIN LCD_PIND.P4

/* DB7 */
#define PIN_LCD_DB7_PORT LCD_PORTD.P5
#define PIN_LCD_DB7_DDR LCD_DDRD.P5
#define PIN_LCD_DB7_PIN LCD_PIND.P5[/c]

lcdLibPrv.hの7,8行目を以下のように変更

[c]#include “./lcdlib.h”
#include “./lcdConfig.h”[/c]

最後にプロジェクトのmain関数に以下のように書きました。

あとはいつもどおりビルドしてAVRに書き込めば完了です。

あとなぜかC++でプロジェクトを作るとビルド時にエラーが出ました。
c++のソースファイルからcで書かれたヘッダファイル上の関数を呼び出すのってなにか問題あるのかな?

2013-03-21_LCD3

あとカウンターのプログラムを書き込んで動作している様子です。

写真にも写ってるように電子工作してる時にはよく3端子レギュレータで作った5V電源使ってるけど
USBにも5Vが通ってるんだからUSBから電源作れそうな気がする。

スポンサーリンク
スポンサーリンク