SSブログ

MAX7219が超便利!7セグメントLEDが楽々 [ハード]

img_0.jpg
昔からある「7セグメントLED」。
家庭じゃあまり見ないけれども、
電子工作なんかでは、いまだに現役。
表示できるのは、ほぼ数字だけだけど、
安いし扱いが簡単なのと離れてても見えるのが、
いまだに使われている理由だろうか。

1ケタは、8つのLEDで構成されてて、それぞれをON/OFFして、文字を表示する。
つまり1ケタで8つのIOが必要なわけだけど、
普通何かを表示するには、4桁くらいはほしいわけで、
こうなると、8×4=32本のIOピンが必要。
で、そんなことはできないわけで、ダイナミックドライブといわれるテクニックで、
1ケタずつ切り替えて表示するので、8+4=12本のIOピンで済ませている。
テレビで工場とかの機械を映してるときに、表示がチラチラしてるのはこのせい。

これをたった3本のIOピンで、8桁も表示してしまうのが、MAX7219というIC。

http://datasheets.maximintegrated.com/en/ds/MAX7219-MAX7221.pdf
↑データシート。
しかもこのICは、文字パターンも持っているので、パターンを入れる必要もない。

IOピンは、LOAD,DIN、CLKの3つだが、
使い方は簡単で、LOADピンをLOWにして、アドレス+データをDINとCLKでシリアルで書き込み、
LOADピンをHIGHに戻すだけ。

#define P_LOAD 10
#define P_DIN 11
#define P_CLK 13

void setup() {
pinMode(P_LOAD,OUTPUT);
pinMode(P_DIN, OUTPUT);
pinMode(P_CLK, OUTPUT);
digitalWrite(P_LOAD,HIGH);
digitalWrite(P_DIN, LOW );
digitalWrite(P_CLK, LOW );

delay(1);

max_out( 0x0F, 0x00 );
max_out( 0x09, 0xFF );
max_out( 0x0A, 0x08 );
max_out( 0x0B, 0x07 );
max_out( 0x0C, 0x01 );
}

void loop()
{
char i;
for (i=1; i <= 8; i++){
max_out(i, 9-i);
}
delay(2000);
}
void max_out( byte high_byte, byte low_byte )
{
digitalWrite( P_LOAD, LOW );
shiftOut( P_DIN, P_CLK, MSBFIRST, high_byte );
shiftOut( P_DIN, P_CLK, MSBFIRST, low_byte );
digitalWrite( P_LOAD, HIGH );
delayMicroseconds(1);
}

こんな感じで書くと↓こうなる。
img_1.jpg
max_out(アドレス,データ)で書き込める。
アドレスは、右端が1で順に増えてって左端が8になる。
9からは設定になっていて、
9は、FFにするとデコードになり、データに1を書くだけで1が表示される。
   0を設定するとデコードされず、ビットで表示される。
10は、輝度で0が暗くて、15が明るい。
11は、何ケタ表示するかで、0-7の値で1-8桁になる。
12は、表示のON/OFFができ、0でOFF、1でON。
13,14はなく、15がテストモードで、0がノーマル、1でテスト。

データの表示だが、アドレス9でデコードにしてると
0から9までは、0から9が表示され、10からは、-,E,H,L,Pになる。

アドレス9で非デコードにしてると、ビット表示になる。
img_2.png
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:趣味・カルチャー

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

いろいろ覚えることも多く、知りえた知識を貯めておこうと思います。先はまるで見えないですけどね。

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。