パーツ解説

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

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

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

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

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

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

制御IC SED1520

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

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

 

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

まず122x32を左右に半分ずつ分けて、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に画像を表示させてみたいと思います。122x32のモノクロBMP画像としてこんな画像を用意してみました。

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

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

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

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

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

 

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

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

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

▼SED1520ライブラリ

 

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

-パーツ解説

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

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

前回APDS-9960のジェスチャーセンサーを使用しました。今回はジェスチャーに加えて近接センサーも使用してみたいと思います。 前回の記事はこちらhttps://rikeden.net/?p=120さ …

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

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

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

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

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

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

圧電素子とPICマイコンで振動センサー

この記事では圧電素子(ピエゾ素子)を使用してPICマイコンで振動を検出する方法を解説します。   目次1 使用するもの2 圧電素子とは3 圧電効果を見てみる4 PICマイコンで振動検出5 応 …