パーツ解説

【PIC】aitendo の 122×32 グラフィックLCDを使ってみた

投稿日:2021-08-08 更新日:

今回は aitendo で 122×32 のグラフィックLCD が 299円(税抜)とかなり安かったので買ってみました。商品ページはこちらです。

グラフィックLCD については以前に記事を書きましたが、それとは制御IC が異なり使用方法も全然違ったので、別の記事として書くことにしました。

以前のグラフィックLCD についての記事はこちら↓

PICで128×64グラフィックLCDを使ってみる

制御IC SED1520

この LCD に使われている制御IC は SED1520 というものです。

ちなみに商品ページの説明欄には “SED1502” と書いてありますが多分誤植です。紛らわしいことに “SED1502” という IC も実在するのですが、リンク先のデータシートが SED1520 でそれを参考にしたら動作しました。

 

この LCD の制御チップ SED1502 のデータ構造は次のようになっています。

まず122×32 を左右に半分ずつ分けて、2つの同一の IC で制御しています。

片方の IC に着目すると、8行ずつがページとしてまとめられていて、各ページの各列が 1Byte のコラムとなっています。

ビットマップファイルの場合、データは左下から横方向に並んでいるので、この LCD に表示させるにはデータを変換する必要があります。

一見するとこのようなデータ構造は使いにくいと思うのですが、高さが8pt の文字を表示させようと思ったときには便利なようです。

 

接続・ピン説明

LCD 基板からは 18本のピンが出ていて、各ピンの役割は次のようになっています。

続いて各ピンについて説明します。

VDD, VSS : 電源(5V)

VO : コントラスト調整。半固定抵抗を接続。

RES : リセット。PIC の MCLR に接続。詳しくは後述します。

E1, E2 : 通信の Enable。先述のように制御IC が2つあるのでそれぞれに対応しています。

R/W : Read/Write。読取り不要の場合は GND に接続。

A0 : データ/コマンド選択。

DB0 ~ DB7 : データ。8bit 専用で4bitモードはないようです。

LED-A, K : バックライト電源。メインの電源と違って 3.3V なので注意。

リセットピンについて、aitendo の商品ページの説明では無接続になっていましたが、無接続では動作しませんでした。

データシートを見てみると次のような記述があります。

The SED1520 Series uses 8 bits of bi-directional data bus (D0–D7) to transfer data. The reset pin is capable of selecting MPU interface; setting the polarity of RES to either “H” or “L” can provide direct interface of the SED1520 with a 68 or 80 family MPU (see Table 1 below).

リセットの極性 (active L / active H) によって MPU の種類を選択し、通信方法も異なるようです。68系とか 80系といのはよく分かっていないのですが、aitendo のピンの説明は 68系のものだったので、それに従うことにしました。(Table 1 の”↑”は同上という意味だと思います。)

気を付けたいのは、active L = idle H なので H か L のどちらかに接続するとしたら H に接続するということです。

PIC の MCLR は active L なので、そこに接続しておけば PIC のリセットと同時に LCD もリセットできます。

 

通信方法

続いて SED1520 との通信方法を見ていきます。データシートの 86系のタイミングチャートは次のようになっています。

立上がりか立下がりかは置いといて、E にパルスを入力したときにデータが送信されるということみたいです。E は idle L にしておけば良さそうです。

なお、今回は読取りは行いません。

 

コマンド

基本的な動作をさせるために必要なコマンドを紹介します。全部のコマンドを知りたい方はデータシートを参照してください。

Display ON/OFF

D 0:OFF 1:ON

リセット直後はディスプレイが OFF になっているので、自分で ON にしてやる必要があります。2つの制御 IC にそれぞれコマンドを送る必要があるので注意してください。

 

Set Page Address

A1, A0 ページ番号(0 ~ 3)

先程説明したページを指定するコマンドです。

 

Column Address

A6~A0 コラム番号 (0 ~ 79)

コラムを指定するコマンドです。A6~A0 の 7bit ありますが、79 が上限のようです。この LCD では 0 ~ 60 を指定することになります。

コラムアドレスはデータを送信する毎にインクリメントされるので、初めにコラムを指定したら連続してデータを送信することができます。ただし、ページはインクリメントされないので注意してください。

どうでも良いことではありますが、コマンドの名前がページのものと異なるのが気になりますね。

 

ライブラリ

以上のことを踏まえてこの LCD を制御するためのライブラリを作りました。

大体見れば分かるかと思いますが、ポイントとしてはコマンドは両方の IC に送信するのに対して、データは適切な方にのみ送信します。

そのために現在のアドレスを保持する変数を用意しています。

また、LCD の表示の端まで来たらページをインクリメントするようにしています。

Sed_Init() 関数ではアドレスを左上に設定しているだけで、中身に何かデータが入っているかもしれないので、まっさらにしたい場合は0を 488回書き込んでください。

 

 

動作テスト

今回は PIC16F1579 を使って LCD に画像を表示させてみたいと思います。

122×32 のモノクロBMP画像としてこんな画像を用意してみました。

データを変換するプログラムを作って、このデータをあらかじめ変換しておきます。

変換したデータを表示するプログラムを書いてみた結果このようになりました。

ちゃんと表示されたと思いきや、右のトランジスタの絵が切れてますね。

どうやらセグメントがそもそも16行x2段に分割されているようです。それを知らずに買ってしまったのでちょっと残念です。

ですが今回はとりあえず表示することができたので良しとしましょう。

 

回路図は次のようになります。

※見やすさのために A0, E1, E2, DB0~DB7 の配線は省略しました。

プログラムは以下の通りです。

▼SED1520ライブラリ

 

今回の記事は以上となります。ご覧いただきありがとうございました。

-パーツ解説

執筆者:


comment

メールアドレスが公開されることはありません。

関連記事

ロータリーエンコーダの使い方

今回は PIC で ロータリーエンコーダ を使ってみたので、使い方や制御するためのポイントを紹介します。   目次1 ロータリーエンコーダとは2 信号3 チャタリング4 実験5 あとがき ロ …

APDS-9960のRGBセンサーを使ってみる

前々回のジェスチャーセンサー、前回の近接センサーに引き続き、APDS-9960 の最後の機能である照度・RGBセンサーを使ってみました。 最初に言っておきますが、今回は動作確認程度のかなり適当な内容に …

PICで7セグドライバTM1630を使ってみた

今回は秋月電子で販売されている7セグメントLEDドライバ TM1630 を使用してみました。 TM16301つで7セグ5桁または8セグ4桁をダイナミック点灯で制御することができます。※カソードコモンじ …

リアルタイムクロック DS1307 の使い方

今回は秋月電子で販売されているこちらのリアルタイムクロック(以下 RTC)の DS1307 について紹介します。 目次1 RTC とは2 DS1307 の特徴3 レジスタ4 プログラム RTC とは …

aitendoのI2CキャラクタLCDが安くて便利

ブレッドボード上で情報を表示したり簡易的なデバッグをしたりするのに便利なのがキャラクタLCD です。 今回は aitendo で販売されているこちらの LCD を使ってみました。 ちなみに以前秋月電子 …