2015年12月
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

最近のトラックバック

« 小型ブレッドボードをユニバーサル基板に載せる | トップページ | MTM05に出展してきました。 »

2010年4月17日 (土)

ArduinoにLCDを信号線3本で繋ぐ

 昨年のMTM04に出品した和音マシンで、入力インターフェースにSFCパッドを使った事は、以前にご紹介しました。そこで、今回は出力インターフェースの一つ、キャラクター液晶ディスプレーの接続について書きたいと思います。

 Arduinoにもよく使われるキャラクター液晶ディスプレーですが、そのままArduinoに接続すると、最低でもRS,E,D4,D5,D6,D7の6本の信号線が必要になってしまいます。これをもっと少ない信号線で接続しようと作ったものが、今回の回路です。

Lcd164_v100

 シフトレジスタの74HC164を使い、Arduinoの使用ポート数を減らしています。また、74HC164のコントロールに使うData線を、LCDのRSとしても使用することでも使用ポートを増やさない工夫になっています。

Hello_world

 左上のコネクタが信号線が3本と+5V電源,GNDで、信号線は左からLatch,Clock,Dataです。

74hc164

 液晶モジュールを外すと、基板に乗った74HC164が見えます。他にコントラスト調整用とバックライト調整用の半固定抵抗、バックライト用スイッチ、バックライト過電流防止用の抵抗等が見られます。

 ソフトウェアの方ですが、標準のLCDライブラリを改造して、元と同様に使えるようにしてみました。これなら、いままで標準のライブラリを使っていたスケッチを書きかえるのも非常に簡単になります。改造ライブラリを使ったexampleのHello Worldスケッチを載せますので、参考にしてください。

/*
  LiquidCrystal Library - Hello World 
 */

// include the library code:
#include <LiquidCrystal164.h>

// initialize the library with the numbers of the interface pins
LiquidCrystal164 lcd(2, 3, 4);

void setup() {
  // set up the LCD's number of rows and columns: 
  lcd.begin(16, 2);
  // Print a message to the LCD.
  lcd.print("hello, world!");
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  lcd.setCursor(0, 1);
  // print the number of seconds since reset:
  lcd.print(millis()/1000);
}

 元のHello Worldと違うのは、インクルードするヘッダファイル名と、変数生成の所だけです。

LiquidCrystal164()

LiquidCrystal164型の変数を生成します。


【構文】

LiquidCrystal164(data, clock, enable)

【パラメータ】

data: 74HC164のData(A,B)ピンおよび、LCDのRSピンに接続するArduino側のピン番号
clock: 74HC164のCKピンに接続するArduino側のピン番号
enable: LCDのenableピンに接続するArduino側のピン番号

他は標準のライブラリと同様です。

ダウンロードはこちら
74HC164使用LCDライブラリ:「LiquidCrystal164.zip」

ライブラリのライセンスについてはArduino標準ライブラリと同様LGPLでお願いします。

« 小型ブレッドボードをユニバーサル基板に載せる | トップページ | MTM05に出展してきました。 »

Arduino」カテゴリの記事

コメント

LCDライブラリはどこを変えているのですか。(H8でしたいので)
教えていただけないでしょうか。
宜しくお願いします。

一番重要な変更点は、 8bitモードでデータを出力する write8bitsメソッドです。
LiquidCrystal.cpp / LiquidCrystal164.cpp ともにソースの一番最後ですね。
オリジナルのコードでは、割りつけられたピンにそれぞれ0~7ビットの内容を出力しますが、
改造したコードでは、dataピンとclockピンを使って、
shiftOut関数で8ビット分をシリアル転送しています。
H8にshiftOut関数と同等の物が無ければ、自分でコードを書かないといけませんね。

コメントを書く

コメントは記事投稿者が公開するまで表示されません。

(ウェブ上には掲載しません)

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/1242669/34261107

この記事へのトラックバック一覧です: ArduinoにLCDを信号線3本で繋ぐ:

« 小型ブレッドボードをユニバーサル基板に載せる | トップページ | MTM05に出展してきました。 »