↑ 低価格だが、本体のみ (-_-;)
aitendoの安価な7セグモジュールです。(M7SEGX8R-7219)

安価な価格に惹かれて、何も考えずに購入してみました。
秋月の似た様な7セグモジュールDFR0090がありますが、
実際比較してみると、LEDの大きさが圧倒的に違います。(画像参照)
そしてこれも説明書の類は一切ありません・・・
さらにaitendoのHPにもメーカーLINK等まるで無いですし・・・

しょうが無いので、モジュール基板をチェックしてみる事に。
すると部品が少ない・・・ IC1個、ダイオード1個、コンデンサ1個、抵抗2個・・・
で、基板に張り付いていた、MAX7219のデータシートを参考とする事にしました。

↑ 袋からモジュールを出してみた



↑ モジュール背面
虫眼鏡でよく見ると、ICと他部品少々
ICはMAX2719と判った。



↑ DFR0090との大きさ比較
圧倒的に小さい・・・



↑ 入力ピンは5本
上から、
① VCC・・・ 多分+5V
② GND・・・ 特になし
③ DIN ・・・ DATA入力ピン
④ CS ・・・ LOADピン、ラッチ制御
⑤ CLK・・・ クロック入力ピン
MAX7219および7セグLEDモジュールの概要

データシートを、ぼ~っとしながら眺めていると、結構面白そうな石の様です。
まずは、3線シリアルデータ転送で制御するのが基本みたいです。
そして、このIC(モジュール)をどんどん電車みたいに繋げていける様です。
と言うと、DFR0090(74HC595)と同じIC・使い方に見えますが、
内部ハードウエアはまるで違うようで、インテリジェントです。
基本的な動作目的は8桁7セグLED制御の様です。
そのLED駆動も、DFR0090がスタティックなのに、これはダイナミックです。
また、セグメントLEDのON-OFFを個別にコントロール出来ます。
つまり、バーブラフや自由なLEDディスプレイの制御も可能です。
1モジュール当たり、64個、カスケード接続で、無限のLED制御が可能です。

PIC側からは、データを含む16ビット幅の命令を送信するのが基本の様です。
その命令パケットを、どんどん送信すれば良いだけと言う事になります。
LEDセグメント処理(BCD)および桁処理はMAX2719側でやってくれます。
これは楽ちんですし、その結果、消費電力もDFR0090より少ないですすし、
PICの制御ルーチンは、DFR0090よりコンパクトになりそうです。
ぐだぐだ言って無いで、まずは弄ってみることにします。



モジュールの入出力ピンはそれぞれ5本

ピンの名前は違うが、機能的にはDFR0090と概ね同じで、
データ、クロック、ラッチの3線制御、後は電源ピンです。

入力各ピン概要
①VCC  5V電源、直列に保護用ダイオードが入っている
②GND  電源・制御ピン共有GND

③DIN   シリアルデータ入力ピン
       このデータはCLKの立ち上がりを持って、シフトレジスタにロード
       シフトレジスタは16ビット幅でそれ以上のデータが来ても、DOUT端子から
       破棄される。
       データビット列はMSB(bit15)から入力される事を想定している。
       最後にbit0を受信し全16ビットをロードする、と言う事になる。
       シフトレジスタにロードされただけではMAX2719は何もしない

④LOAD データラッチ制御、MAX2722はCSピンとなり大体同じ機能だが少し違う
       (基板にはCSと印刷されているが、ICはMAX2719です)
       シフトレジスタにロードされている16ビットデータを取り込む
       LOADピンの立ち上がり(L→H)でラッチされる
       ここでやっと、MAX2719は命令を取り込み、実行し始める。

⑤CLK  最速10MHZのクロック入力
       立ち上がりでDINのデータビットがシフトレジスタにロードされる
       立下りでDOUTからクロックアウトされる

出力ピン
③DOUT シフトレジスタからはみ出したビットデータが出力される
       カスケード接続された次のMAX2719のDINへ接続される






↑ 実験用基板と接続
この基板はDFR0090の時に使用した物
8ピンPICなら概ね使えるので便利
今回もシリアル通信入力としています。



PIC12F1822 8桁7セグモジュール
MAX2719対応プログラム
アッセンブラ・ソースファイル

 12f1822_max2719_test1.asm

使用ツール
MPLAB IDE Ver8.92
秋月PICKIT2互換機
PICKIT2 Ver2.61
(PK2DeviceFile.dat 適用済)
命令パケット送信方法の実験


命令送信シークェンス

①LOAD=L、CLK=L

②DINにデータビットを提示、(bit15からbit0まで順番に提示)
③CLK=L→H(シフトレジスタにデータビットをロード)
④CLK=H→L、②に行く、これを16回繰り返す。
  16ビット分がシフトレジスタにロードされたら⑤に行く

⑤LOAD=L→H、16ビットの命令がMAX2719にラッチされる。
⑥次の命令を送信するため、①に行く

実験基板
いちいち製作するのは面倒なので、DFR0090実験基板を流用します。
とりあえず回路図は左記の様になります。



通常動作時の送信シークェンスに当たっての注意点

詳細はデータシートのタイミング図を見ると一目ですので、ご参照ください。
PIC12F1822を最速の32MHZで駆動した場合、1サイクルは8MHZ
つまり、125ns(0,125us)となります。

CLK 10MHZと記してありますので、パルス最速は100ns
    パルスのL側とH側はそれぞれ50ns以上となります。

DIN  データビットを提示してから、CLK↑とする場合、その間隔は最少25ns

LOAD パルスのH側は50ns以上です。

少なくとも、一つの動作に125ns以上掛かっているPICの動作を勘案すると、
あまり気にせずパルス発生動作をさせても問題無さそうです。

以上を踏まえて、基本アクセスサブルーチンを作ってみました。
それは非常に簡単なものですが、とりあえずコマンド送信はできるようです。
ソースファイル中、「SEND_CMD」サブルーチンがそうです。



MAX2719 立ち上がり時の注意点

実際に色々実験してみて分かった事ですが・・・
モジュールに対して、初期設定をし、デバッグ用データをどんどん送信しました。
当初は通常動作し始めると大丈夫だが、立ち上がり動作がイマイチ不安定でした。
PIC自体はプログラムをちゃんと実行していると思います。
デバッガでのチェックでは、特に変な挙動は無かったし、
オシロで出力ピンを観測しても、目に見える異常は発見できませんでした。
PIC初期設定時に変なコマンドを送信してしまうのか、
MAX2719自体の立ち上がりの問題なのか、ハッキリしないのですが・・・
その症状とは、
①全セグメントON(発光)のままハングアップしてしまう時と、
②意味不明な表示をしてから、正常動作し始める時があります。
③最初の命令を受け付けない時がある。

あれこれとMAX7219の初期設定等を変更してみました所・・・
①の場合はディスプレテストモードになっている感じです。
この場合、解除コマンドを送信しないと、そのまま停止状態です。
これは実験で確認しています
②の場合は、テストモード解除コマンド以外の命令が実行されている感じ
Bモードのキャラクタ表示が多い様ですが。
③の場合、PIC立ち上がり時初期設定処理が終了したら、
ある程度待ってからMAX2719への最初の命令を送信すると良い様です。

とりあえずの対処としては、
シャットダウン解除はせず、初期設定命令送信の前に、テストモード命令を実行、
そして、テストモードを解除した後、初期設定命令群を送信、その後
全桁表示ブランク命令を送信してから、シャットダウンを解除しています。
これで、今の所は一見普通に通常実行されるようになりました。
もっと合理的な対処方法があるかもしれません。



コントロールサブルーチン群

LEDは小さめですが、結構明るくてチラつきも感じず、見易いです。
気を良くして?DFR0090用表示プログラムを、この基板用に書き換えました。

基本構成は、ほとんどそのまま使用できましたが、下記の修正を行いました。
基本アクセス部分を全部入れ替え(当然ですが・・・)
セグメントデータは不要なので、全カット
ゼロブランキングとドット点灯処理は方法が違うので、修正
結果、ソースファイルは小さくなりました。

全体的な処理時間に関しては、たいして変わらなそうですが・・・
と言うか、HC565の方が高速なので、高速CPUで高速に処理すれば、
結果的にDFR0090の方が処理時間が早くなると思われます。
しかし、ただの表示器なので、どうでもいいかな・・・

↑ 周波数カウンタに14MHZを入力
それをシリアル通信で実験基板に受信
さらにそれをモジュールで表示させています。



↑ 周波数カウンタに14MHZを入力
6ケタ表示に切り替え
ハンドシェイク版8桁7セグ表示器

当局標準?のLED表示器で、機能的にはDFR0090版やPIC16F648版と同じです。
もちろん動作実験用で、MAX2719コントロールのためにPIC1個は使いません。
実際にはその機器のメインPICがついでに行う事となります。
ソースファイルに出来るだけ丁寧にコメントしていますので、ご参照下さい。
画像は、例によってPIC12F683カウンタ基板からの出力を表示しています。

↑ PIC12F683周波数カウンタ基板

この基板上のPICに、カウンタ処理と、MAX2719モジュールの制御処理を
行っています。
DFR0090モジュールの時同様、
余裕で処理できます。



PIC12F683周波数カウンタ基板

MAX2719対応ソースファイル

count_test4_max2719.asm

PIC12F683周波数カウンタ基板への移植

またもや登場のこの基板・・・
これら3線接続式LEDモジュールとは相性抜群?です。
DFR0090モジュールの時もそうでしたが、MAX2719モジュールも余裕でこなせます。
もはや2コインで周波数カウンタ基板が完成かな?と言う感じになってきました。
しかし・・・この基板も結構実験用として便利なのですが、I/Oポートが不足気味、
PIC16F688かPIC16F1823で再構成し、使い勝手を向上させるのも良いかも。



戻る  実験・製作の記録TOPへ戻る