まごころせいじつ堂

浜町庄金 研究開発  マイコンで遊んでばっかりで

LCD

メモ:LPC810、LCD付きマイコン

 メモばかりですまん。懸賞でLPC810 mini-boardあたったので遊ぶ予定。

LPC810 (= DIP8_ARMマイコン) のフラッシュへの書き込みをシリアルインターフェースで行なう
「LPC810 (= DIP8_ARMマイコン) + LPCXpresso」で,Lチカ (LED点滅)プログラムを動かしてみる
 
LPC800 Mini-Kit


こんなのもある。LPC11U24+LCD
USBマイコン LPC11U24搭載 キャラクタLCDモジュール(16x2行)
lpclcd

マイコン徹底入門 簡単版:DFU(新版)
LPC11U14 LPCXpressoを使ってUSBを研究しよう! - USB研究部会 - (LPCXpresso週間)


LPC810でArduino API互換環境eXodusinoを使うまとめ
https://github.com/lynxeyed-atsu/eXodusino

FONTX関連メモ

FONTX関連のメモ。
 本当は漢字ROMのイメージがあればいいのだけれども。手元の古いマシンから吸い出すこともできるができれば一般に再現可能な方法でやってみたい。

FONTXの使いかた 
グラフィックLCDモジュール 日本語フォント編 
IPAフォントを元としたLXで使える32/24/16ドットフォント 

FONTXメモ

マイコンで漢字表示をしたいと思い、漢字ROMのフォントはないだろうかと色々探したが見つからなかった。古い漢字ROMを搭載したパソコンから吸い出すという手もあるが。

 グラフィックスを扱えるLCDや安いサーマルプリンタで使えそうなDOS/V時代のFONTXについてメモ。

FONTXの使いかた 

グラフィックLCDモジュール 日本語フォント編 

IPAフォントを元としたLXで使える32/24/16ドットフォント

 漢字フォントを内蔵している機器(VFDやサーマルプリンタ)はJISまたはShiftJISで扱っていることが多いようだ。

Arduino 20x4 LCDの動作確認

手持ちの20桁×4行のLCDキャラクタディスプレイモジュール[20×4行][白色LEDバックライト付]SC2004CSWBを接続してみた。特に問題なし。
キャラクタLCDを制御するライブラリはこちら

スケッチ内でLCDの初期化を行う箇所。引数はrs,enable,D5,D5,D6,D7の順。
LiquidCrystal lcd(9, 8, 7, 6, 5, 4); 
接続はArduino UNOの rs=9ピン、enable=8ピン、D5:7は7,6,5,4ピンに接続する。

20x4 LCDのピンは以下のとおり。

1.Vss(GND)
2.Vdd(+5V)
3.VLC(コントラスト)
4.RS
5.R/W
6.E
7.DB0
8.DB1
9.DB2
10.DB3
11.DB4
12.DB5
13.DB6
14.DB7
 
2012lcd20x4

ソースはこちら

Arduino LCD Keypad Shield

Arduino用のLCDシールドで5つのキーが付いたものがあった。

Arduino LCD KeyPad Shield (SKU: DFR0009)

 16×2のLCDに加えて5つのスイッチが付いている。これはADコンバータの入力につながっていて、押すボタンによってアナログ値を返す。ボタンを押した時の値は正確ではないので、ある範囲内で判定する。
 LCDの配線は前回のLCDシールドとは異なっているが、4bitモードで接続するので特に問題はない。


テスト用のサンプルソースはこちら
https://gist.github.com/64778cae2cc590e76747 

2012LCDkeypadshield
 
LCDキーパッド・シールド for ArduinoLCDキーパッド・シールド for Arduino

OEM
売り上げランキング : 36446

Amazonで詳しく見る
by G-Tools

Arduino:LCDシールド

前回はブレッドボード上でLCDを使ったのだが、配線がびよんびよんしたままだとよろしくないのでLCDシールドキットを購入した。スイッチサイエンス扱いだがアマゾンからも購入できる。1980円。

2012LCD01


 早速作ってみた。スイッチサイエンスのサイトに丁寧な作り方があるので参考になる。なおキットには説明書はありませんが、元々はPrototyping Lab ―「作りながら考える」ためのArduino実践レシピ (Make:PROJECTS)という書籍で使うキットらしいです(この本知らなかった)。

2012LCD02

 ハンダ付けは30分ぐらいで完了。これをArduino UNO R3に取り付けて確認。ピン配置は偶然にも前回ArduinoでFizzBuzzやった時と同じ配線だったのでそのまま実行できた。

2012LCD03


2012lcdshield
 

LCDシールドキット(青)LCDシールドキット(青)

スイッチサイエンス
売り上げランキング : 8129

Amazonで詳しく見る
by G-Tools

こういうのもあった。
LCDキーパッド・シールド for ArduinoLCDキーパッド・シールド for Arduino

OEM
売り上げランキング :

Amazonで詳しく見る
by G-Tools

ArduinoでFizzBuzz

Lチカはできたので今度はLCDに文字を表示してみる。

先に部品表。
Arduino Uno x1
超小型LCDキャラクタディスプレイモジュール x1
(付属:ピンヘッダー 16P x1、抵抗100Ω x1)
10KΩ半固定抵抗 x1
ブレッドボード x1
ブレッドボード用ジャンパー線
Arduinoとブレッドボードをつなぐジャンパー線(両端子がオスで、柔らかい線のもの)

Arduino Unoは千石か若松、マルツにあったはず。液晶は秋月から買うと付属品がある。予算は4000円ぐらいかな?
あと、Arduino Unoとパソコンを繋ぐUSBケーブルが必要。

 以下を参考にした。
http://arduino.cc/en/Tutorial/LiquidCrystal 

 ここで示されている実体配線図を参考にしながら、手持ちの液晶モジュールに合わせて配線する。
全体はこんな感じ。
LCD2


 20年くらい前は各社から表示は同じでもコントローラが違う液晶モジュールが出ていたが、日立のコントローラのプロトコルがデファクトスタンダードとなった。行数や桁数が違うだけで同じ。

使用した液晶モジュールは秋月電子で買った16x2(2x16)液晶モジュール。
超小型LCDキャラクタディスプレイモジュール(16×2行バックライト・オレンジ) 

液晶面、下側に端子を置き、左から14,13,12,...2,1,16,15ピンになる。
 
14 DB7 (Data Bit7)
13 DB6 (Data Bit6)
12 DB5 (Data Bit5)
11 DB4 (Data Bit4)
10 DB3 (Data Bit3)
9 DB2 (Data Bit2)
8 DB1 (Data Bit1)
7 DB0 (Data Bit0)
6 E (Enable Signal)
5 R/W (Read/Write)
4 RS (Register Select)
3 VEE (コントラスト)
2 Vdd (5V)
1 Vss (GND)
16 A (LED +4.2V)
15 K (LED -)

 これに付属のピンヘッダーをハンダ付けする。ピンヘッダーの短い方を液晶モジュールに。ハンダ付けはたったこれだけ。あ、液晶モジュールのパネルを保護するためにセロハンテープなど貼っておきましょう。ハンダのヤニが飛んでくっつくことがあります。

ArduinoのLiquidCrystalライブラリは液晶モジュールからの読み出しを行わないためR/WはGNDに落とす。また、液晶モジュールは4bitモードと8bitモードがあるが、4bitモードを使用するためDB0-DB3は使わない。
VEEに与える電圧により文字のコントラストを調整できる。ここでは10KΩの半固定抵抗に繋いでいる。
Vdd,Vssは液晶モジュールの電源。A,Kはバックパネル照明のLED用。これは秋月のモジュールに付属している100Ωの抵抗を直列に接続する。
配線は以下を参照してください。

LCD1


で、表示するだけならサンプルで確認できるので、FizzBuzzができるように改変した。
Arduino IDE 1.0でのスケッチは以下のとおり。
setup() はArduinoスタートアップ後1回だけ実行される。周辺などのイニシャライズを書く。
続けてloop()内の記述を繰り返して実行する。

※Arduino IDEにコピペするときは#includeの行を手で打ちなおしてください
// include the library code:
#include <LiquidCrystal.h>

unsigned int t;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  t=1+millis()/200;
  lcd.setCursor(0,0);
  if(t%3==0 && t%5==0) {
    lcd.print("FizzBuzz");
  } else {
    if (t%3==0) {
      lcd.print("Fizz    ");
    } else {
      if (t%5==0) {
       lcd.print("Buzz    ");
      } else {
       lcd.print("        ");
      }
    }
  } 
  lcd.setCursor(0, 1);
  lcd.print(t);
} 
動画は以下を見てね:

 さて、表示だけでは物足りないのでアナログ入力を使ってみる。
ArduinoのA-D変換入力は0~1023の値をとる。これは0~5Vの電圧に対応する。ここに10KΩの可変抵抗をつないでみよう。黒のミノムシクリップはGNDへ、赤は5Vへ、黄色はA0ポートに接続する。
LCD10

 ソースはさっきのものを元に修正。A0ポートから値0~1023を読み取り、これを元にFizzBuzz判定する。
LCD11
こんな感じでつまみを回すと液晶の下の行に1~100ぐらいが表示され、上の行にFizzBuzz判定される。

ソースはこちら:
// include the library code:
#include <LiquidCrystal.h>

unsigned int t;
int sensorPin = A0 ;
int value = 0 ;

// initialize the library with the numbers of the interface pins
LiquidCrystal lcd(12, 11, 5, 4, 3, 2);

void setup() {
  // set up the LCD's number of columns and rows: 
  lcd.begin(16, 2);
}

void loop() {
  // set the cursor to column 0, line 1
  // (note: line 1 is the second row, since counting begins with 0):
  t=analogRead(sensorPin)/10+1; // (0...1023)/10 +1
  lcd.setCursor(0,1);lcd.print("     ");
  lcd.setCursor(0,0);
  if(t%3==0 && t%5==0) {
    lcd.print("FizzBuzz");
  } else {
    if (t%3==0) {
      lcd.print("Fizz    ");
    } else {
      if (t%5==0) {
       lcd.print("Buzz    ");
      } else {
       lcd.print("        ");
      }
    }
  } 
  lcd.setCursor(0, 1);
  lcd.print(t);
  while(millis()%1000!=0); // wait 1sec.
} 
動画は以下を見てね:
Arduino de FizzBuzz Analog in

 で、感想だがArduinoすごく簡単にいろんなことが出来る。ふつうマイコンボード買ってなんかやろうとしたら接続先のデバイス調べて制御の方針決めてプログラム書いてデバッグし……と三日から一週間コースではないか?Arduinoは本家にライブラリが充実しておりIDEからすぐ呼び出せるので悩むことがなかった。また、Webを探せば先人の苦労がたくさん見つかる。
通常組み込みマイコンの作例は一般に流通することはなかったが、使いやすいワンチップマイコンが現れ、ボード込みで安価に入手できるようになったおかげでたくさん見かけるようになった。さらにArduinoはオープンソースであり、ライブラリもそうやって開発されている。そんなわけでハンダ付け16箇所のみで手先の不器用な僕でも一時間程度で作ることが出来た。この記事をまとめるほうがよっぽど時間がかかっている。組み込みのプロトタイピングとしても有効ではないか。
 昨年発表されてまだ販売されてないArduino Leonardoは小型のボードで価格も安くなりそうで、かなり期待している。プロトタイピングの結果を焼き直して利用できそうだ。前職のデバッグ担当の頃だったら色々な治具として使ってみたかった所だ。
 などと書いたが手元でチカチカ動くのは楽しいね。ほんとに簡単だからみんなもやってみよう!
記事検索
プロフィール

hardyboy

カテゴリ別アーカイブ
月別アーカイブ
QRコード
QRコード
  • ライブドアブログ