MAX7219を使って、7セグメントLEDを複数桁表示してみよう
次は、7セグメントLEDを複数桁表示してみましょう。ここでは、ダイナミック点灯に対応した3桁の7セグメントLED(CL5631AH)を使用します。
スタティック点灯とダイナミック点灯
複数の7セグメントLEDを点灯させるには、さきほどの回路をまるごと複数用意すれば、実現できそうです。このようにすべての桁を一度に制御する方法をスタティック点灯方式と呼びます。ただ、この方式では、GPIOが多数必要で配線が複雑になるなど、あまり実用的ではありません。
そこで、ダイナミック点灯という方式を用います。ダイナミック点灯とは、すべての7セグメントLEDを同時に点灯させるのではなく、7セグメントLEDをひとつずつ順番に点灯させる方法です。ある一瞬では、1桁しか点灯していなくても、点灯する7セグメントLEDを高速に切り換えれば、すべての桁が常時点灯しているように見えます。この方式であれば、各LED素子は共通して接続することができ、配線が少なく済みます。
今回は、3桁の7セグメントLED(CL5631AH)を利用します。データシートでは、次のような回路となっています。このモジュールは、カソード・コモンです。
| ピン番号 | 配置 |
|---|---|
| 1 | アノード e |
| 2 | アノード d |
| 3 | dp |
| 4 | アノード c |
| 5 | アノード g |
| 6 | - |
| 7 | アノード b |
| 8 | 共通カソード(3桁目) |
| 9 | 共通カソード(2桁目) |
| 10 | アノード f |
| 11 | アノード a |
| 12 | 共通カソード(1桁目) |
MAX7219
7セグメントLEDが複数桁になっても、シフトレジスタ74HC595を使って制御可能です。ですが、専用のICを使ったほうが、より配線が少なく済み、プログラムもかんたんになります。
ここでは、MAX7219というLEDディスプレイドライバICを使ってみます。
MAX7219は、Maxim Integrated社製のICで、8桁までの7セグメントLEDや8x8ドットマトリクスLEDを、SPIというシリアル通信方式で制御することができます。また、MAX7219を複数接続(カスケード接続)することで、より多くのLEDの制御が可能です。
なお、Maxim Integrated社は、Analog Devices社に買収されており、MAX7219の詳細については、Analog Devicesのサイトを参照してください。
SPI通信とは
SPI通信(Serial Peripheral Interface)は、データを高速に送受信するための同期式のシリアル通信プロトコルです。SPIは、ESP32などのマイコンと、センサーやLCDディスプレイなどのデバイスとの通信で広く使われています。
SPIには、3線式のものと4線式のものがありますが、MAX7219では、より一般的な4線式のSPIとなります。4線式のSPIデバイスには、次の4つの信号線を用います。
- クロック(SCLK)
- チップ・セレクト(CS)
- マスター出力/スレーブ入力(MOSI:Master Out Slave In)
- マスター入力/スレーブ出力(MISO:Master In Slave Out)
SPIには、次のような特徴があります。
- 1つのマスターデバイスに複数のスレーブデバイスが接続可能です。マスターとなるデバイスが、通信の開始、制御、クロック信号を提供します。
- クロック信号(SCK)を使用して、データの送受信を同期します。クロックの立ち上がり(または立ち下がり)時に同期します。
- MOSI(Master Out Slave In)ラインとMISO(Master In Slave Out)ラインを通じて、データを同時に送受信できます。
SPI通信の流れ
SPI通信は、次のような流れで通信を行います。
- 最初に、マスターデバイスが、クロック速度、データの送信モード(ビットの順序)、通信の開始を設定します。
- 次に、マスターデバイスが、スレーブデバイスを選択して(スレーブデバイスのCS信号をLOWにする)、通信を開始します。
- マスターデバイスが、クロック信号(SCK)を生成し、MOSIラインを通じてデータを送信します。スレーブデバイス側がデータを送信したい場合は、MISOラインを使用します。
- データの送受信が完了したら、マスターデバイスが、スレーブデバイスのCS信号をHIGHにして通信を終了します。
