スポンサーサイト
新しい記事を書く事で広告が消せます。
Author:剣菱P
剣菱Pと申します。
性別:男
年齢:27
二兎を追って一兎も得られないタイプ
マイコンやプログラミング、ニコニコ動画、雑記等
方向性は見えずとも、ちょっとずつ更新していく予定です!
リンクフリーです。
こんなブログでよかったらよろしくお願いしま~す。
公開メール kenbishiP@gmail.com
8桁の7セグメントLEDをドライブできるMAX7219
このICを使うと8×8のマトリクスLEDを簡単に制御できるらしいので
使い方を調べてみました
通常は8×8のマトリクスLEDを制御するには8本+8本の16本の信号線が必要になり
マイコンのポートをかなり圧迫してしまいます
さらに、ダイナミック点灯をしなければならないので、常時LED表示用のプログラムを走らせておく必要があります
このMAX7219を使うとそんな問題とはおさらば
制御信号は CLK LOAD DATAの3本
さらに、LEDの点灯状況は内部のレジスタに記録されたものを自動で表示してくれるので
一度セットしたら後は放っておいてかまわない
ピン配置
このICは16ビットのシリアルデータで制御します
その16ビットのうち8~11ビット目にレジスタのアドレス
0~7にレジスタにセットする値を指定します
12~15は無効です
8×8のマトリクスLEDドライブ用に使うためには
まず初期化しなくてはならないレジスタがあります
まずShutdown mode
これをいじらないと、ずっとシャットダウンモードで何時までも実行できません。
Shutdown modeのレジスタアドレスは 00001100
ノーマルオペレーションにするには値を 00000001にしなくてはならないので
00001100 00000001を送信します 送信方法は後述
次にDecode mode
今回は文字を表示するわけではなく、マトリクスLEDに任意のパターンを表示するので
No decode (00000000)を選択します レジスタアドレスは00001001なので 送信データは
00001001 00000000
次にIntensity mode
LEDの輝度を設定します リセット後は最小に設定されているので、任意の値に
最大にしたければ00001111をセットします
アドレスは00001010なので 送信データは
00001010 00001111
最後に ScanLimit
7セグメントLEDを何桁分表示するかを設定します
今回は8×8のマトリクスLEDなので 8桁分表示にします
レジスタアドレスは00001011 セットする値は00000111なので
00001011 00000111
以上で初期化は完了
実際にLEDを点灯させるには
指定行のレジスタに点灯させるLEDの情報を書き込むだけ
一行目のLEDを交互に付けたいならば Dgit0レジスタに01010101をセットすればいいので
送信データは 00000001 01010101
さて、実際にどうやってMAX7219にデータを送信するかというと
こんな感じになります
順番に書くと
・Load端子をLowにセット
・CLK端子をLowにセット
・15ビット目の値をDINにセット ①
・CLK端子をHighにセット ここでシフトレジスタの0ビット目に①の値がセットされます
つまり 00000000 0000000① がMAX7219のシフトレジスタに入ってます
さらに
・CLK端子をLowにセット
・14ビット目の値をDINにセット ②
・CLK端子をHighにセット ここでシフトレジスタがシフトし②が0ビット目に入ります
つまり 00000000 000000①② が入ってます
これを繰り返して 16ビットすべて送信したら
LoadをHighにセットします
この瞬間シフトレジスタの値が 指定されてたレジスタに反映されます
とりあえずAVR ATmega88PでMAX7219を動かしてみました
max7219.txt
わーい、無事につきました!
実を言うと 初期化しなくてはならないことに気が付かなくて
最初は信号はあってるのになぜつかないのかかなり悩みましたw