獣医さんの電子工作とパソコン研究室 |
48.SLX-5024-20ドットマトリクスディスプレイで遊ぶ
|
|
■ SLX-5024 LEDドットマトリクスディスプレイモジュール | |
「現品限り」吉野電装さんで販売していたLEDドットマトリクスモジュールを購入してみましたので、使用レポートを掲載します。いつものごとく製作したのは「時計」です。 時計のプログラムも追及してゆくと結構大変なんです。 |
|
このSLX-5024-20ドットマトリクスLEDモジュールはSANYOの製品で、基板外形寸法が192×96mm、16×32ドット、赤、緑、橙(赤・緑点灯時)LED、ドット間ピッチ6.0mm、ドット寸法 Φ5.3mmの仕様となっています。 SLX-8100とは異なり、基板同士を接続し、大きなディスプレイとして拡張できるようになっています。 |
|
基板上にはLC22052というコントローラー(CPU)が1個とTPC8207 MOS FETなどのLEDドライバが搭載されています。データコネクタ部分は12ピン1列(2mmピッチ、JSR PHシリーズ PHR-12)、電源部コネクタは6ピン1列(2.5mm、JSR EHシリーズ EHR-6)となっています。Digi-Keyで見つけて購入しました。 |
電源電圧は5Vで、赤と緑全てのLEDを点灯させると2A程度流れますので電源は余裕が必要です。 接続は基板にシルク印刷がしてあり、下記のようになっています。データシートのみつかったSLX-5015とほとんど同じだと思います。 使用方法は、シリアルで表示データを転送しパラレルでアドレスを指定、読み込ませるだけでコントロール・表示できます。 |
このモジュールの16×32ドットののデータRAMには表示中のRAMと書き込み用のRAM
( 表と裏 )があります。表と裏の切替はA/BB端子で行なわれます。 SE端子をLowにしてあると、16行分のデータを転送すると自動的に表-裏が切り替わりますが、SEをHighにしておくと、A/BB端子を反転することで表示が切り替わります。 |
書き込みシーケンスは 1列32ビットのシリアルデータをCLKの立ち上がりで読み込ませ、読み込むアドレスを出力しALEをHigh→WRの立ち上がりでアドレスを読み込ませるという手順となります。 データよりアドレスのほうが後に読み込ませるようになっています。その後、A/BB端子を反転させると書き込んだデータが表示されます。 |
|
■LEDドットマトリクス基板 コントロールサンプルプログラム | |
スクロール速度の参考になります。テストは次の5つです。 | |
表示テスト1 矢印の移動・・・スクロール速度の目安になります。 |
表示テスト2 横直線が移動・・・縦スクロールの目安になります。 |
表示テスト3 縦直線の移動・・・横スクロールの目安になります。 |
表示テスト5 ランダム表示 |
表示テスト4 時計の表示シュミレーション、細いフォント |
表示テスト4 時計の表示シュミレーション、太いフォント |
プログラム test_LEDmatrix.c プロジェクトファイル一式 test_LEDmatrix.lzh |
■ コントロール部(H8-3664) | |
コントロール部には秋月電子より販売されているAKI-3664Nフラットマイコンキットを用い、Renesasの開発環境であるHEW(High-performance
Embedded Workshop)を使用してみました。 |
|
H8-3664Nマイコンは中途半端とか言われ、なにやら内臓のEEPROMのアクセスに問題があったり、既に古いチップとなってしまっていますが、 前回のLEDドットマトリクスディスプレイではBASIC言語での開発だったので、今度はちよっと気分を変えて、H8とC言語でチャレンジしてみました。 何もLCDのディスプレイを使う必要もないのですが、LCDへの表示や、時刻設定はRS-232Cを介して、PCのコンソールからの入力にしたりとか、内臓のEEPROMをわざわざ使ったりとか、いろいろなエッセンスを加えて実験してみました。 |
今回もブレッドボード上で全て組んでみました。 AKI-3664Nボードはピンソケットを基盤側にとりつけ、そこにリード線を差し込んでの配線としました。 全体の回路図(接続図)です → ブレッドボード上にLED2個とスイッチが3個載っていますが、スイッチは1個しか使用しておりません。 |
|
← フォント作成時のエクセルシート その他、ピンアサインなどの各種資料です。 H8_3664_CLOCK.lzh |
|
■ 時計プログラム (HEW−C言語でのプログラミング) | |
■インクルードファイル |
iodefine_org.h | オリジナルの定義ファイルはPCR1とPCR8はバイト単位の指定しかなかったが、ビット単位で指定できるようにしてみた。多分大丈夫と思われる。 |
IIC_EEPROM.h | I2Cを使って内臓EEPROMにアクセスするためのファイル。ルネサスのアプリケーションノートに出ていたものに少し改良を施した。 |
LCD.h | LCDコントロール用ファイル。トラ技 2005年2月号 R8C/Tinyマイコン入門 第4回 参考にしH8用に改良 |
SCI_232c.h | RS232Cシリアルデータ通信用。アプリケーションノートを参考に使いやすいように改良。 |
DectoBin.h | プログラム中で2進数表記するためのヘッダファイル。 |
以上ですが、バグはあるかもしれません。 | |
■時計部分 H8-3664のタイマAを利用して、1秒ごとの割り込みをカウントしてゆきます。(こちらを参照ください) タイマAの設定はいたって簡単にできます。ただし、LCDに日付けと曜日まで表示させようと考えたら、結構大変でした。日付けのカウントアップで、月末から翌月への移行部分の判断やうるう年による2月の日数の違い、日付けから曜日を求める方法などソースファイルをご参照ください。 |
|
参考サイト ★初級C言語Q&A(15) http://www.st.rim.or.jp/~phinloda/cqa/cqa15.html ★http://oshiete1.goo.ne.jp/qa3085731.html ★noocyte のプログラミング研究室 グレゴリオ暦/ユリウス暦 ⇔ ユリウス日 (または一般の通算日数) 変換アルゴリズム |
|
■フォントの設計とEEPROMへの書込み このモジュール自体にはフォントを持っていませんから、フォントを展開して送らなければなりません。 フォントは細いものと太いものの2種類を設計(SLX-8100の記事を参照ください)し、AKI-3664Nボード内臓のEEPROM (512バイト) に保存しました。保存は時計とは別のプログラムを走らせる形で行ないました。保存のためのプログラムは、RS-232CでPCと接続し、コンソールから書き込んだものを読み出す操作もできます。 何もEEPROM上でなくてもメモリ上に展開しておいても良かったのですが、EEPROMの読み書きルーチンが完成していたので使ってみただけです。 |
|
フォントデータ作成用エクセルファイル資料 H8_3664_CLOCK.lzh フォントデータ書込みプログラム WriteFontEEPROM.c 〃 プロジェクトファイル WrioteFontEEPROM.lzh |
|
■LEDドットマトリクス基板への書き込み 表示されていないRAM(裏)に書き込んでおき、表示しているRAM(表)と切り替えることで書き込んだものが瞬時に表示されます。 1行32ビットのデータを1ビットずつ転送し、書き込むためのアドレスを出力してCS→WRの立ち上がりでRAMに書き込みます。書き込んだデータはA/BB端子の反転によりれ表RAMと裏RAMの表示を切り替えれば表示されます。 プログラム中で LED_write( 行, 緑, 赤 ) ルーチンがLEDの指定した行にデータを書き込むルーチンです。それぞれの信号間にはウエイトを入れ無くても正常に動作しました。 |
|
■完成プログラム・・・とりあえず動作してはいますが、バグがあるかもしれません。 Cソースファイル test_Clock_1.c プロジェクトファイル一式 test_Clock_1.lzh |
|
■動作の様子 | |
午前は赤色の表示 | 午後は緑色の表示 |
日時の設定はRS-232Cを介してPCのコンソールから設定。 | |
■ 使ってみて |
どうにかH8-3664で実用になりそうなものができました。 最初にSLX-5800をBASIC言語開発したものの、構造化言語でないためCのほうが開発しやすい印象を持ちました。この程度のプログラミングならC言語に長けている人ならすらすらと書いてしまうのかもしれませんね。 私はまだC言語は入門者ですので開発も、HEWのシュミレータデバッガで部分的に確認しながら開発をしました。R8Cのようにオンチップデバッグができないので、周辺回路の動作確認には工夫が必要でした。使ってみると初心者にはR8Cのほうが開発はしやすく便利ですね。 時計の部分も、動作は単純なのですが、そのプログラミングは奥が深いことを感じました。別にLEDでの12時間表示だけなら何も苦労せず作ることができますが、あえて日付けや曜日のルーチンも組み込んで見ました。それらはたいへん良い勉強になったと思っています。 このドットマトリクスディスプレイを使った、実用品はいつできるのやら・・・。 |
Last up date 2008/7/15 | |