SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

.NET nanoFrameworkとESP32でIoTプログラミング

C#によるIoTプログラミング!──7セグメントLEDで0.1秒カウントのプログラムを作ろう

.NET nanoFrameworkとESP32でIoTプログラミング 第4回

MAX7219を使って、7セグメントLEDを複数桁表示してみよう

 次は、7セグメントLEDを複数桁表示してみましょう。ここでは、ダイナミック点灯に対応した3桁の7セグメントLED(CL5631AH)を使用します。

スタティック点灯とダイナミック点灯

 複数の7セグメントLEDを点灯させるには、さきほどの回路をまるごと複数用意すれば、実現できそうです。このようにすべての桁を一度に制御する方法をスタティック点灯方式と呼びます。ただ、この方式では、GPIOが多数必要で配線が複雑になるなど、あまり実用的ではありません。

 そこで、ダイナミック点灯という方式を用います。ダイナミック点灯とは、すべての7セグメントLEDを同時に点灯させるのではなく、7セグメントLEDをひとつずつ順番に点灯させる方法です。ある一瞬では、1桁しか点灯していなくても、点灯する7セグメントLEDを高速に切り換えれば、すべての桁が常時点灯しているように見えます。この方式であれば、各LED素子は共通して接続することができ、配線が少なく済みます。

 今回は、3桁の7セグメントLED(CL5631AH)を利用します。データシートでは、次のような回路となっています。このモジュールは、カソード・コモンです。

CL5631AHのピン配置
ピン番号 配置
1 アノード e
2 アノード d
3 dp
4 アノード c
5 アノード g
6 -
7 アノード b
8 共通カソード(3桁目)
9 共通カソード(2桁目)
10 アノード f
11 アノード a
12 共通カソード(1桁目)
7セグメントLED(CL5631AH)
7セグメントLED(CL5631AH)

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通信は、次のような流れで通信を行います。

  1. 最初に、マスターデバイスが、クロック速度、データの送信モード(ビットの順序)、通信の開始を設定します。
  2. 次に、マスターデバイスが、スレーブデバイスを選択して(スレーブデバイスのCS信号をLOWにする)、通信を開始します。
  3. マスターデバイスが、クロック信号(SCK)を生成し、MOSIラインを通じてデータを送信します。スレーブデバイス側がデータを送信したい場合は、MISOラインを使用します。
  4. データの送受信が完了したら、マスターデバイスが、スレーブデバイスのCS信号をHIGHにして通信を終了します。

次のページ
0.1秒カウントのプログラムを作ってみよう

この記事は参考になりましたか?

.NET nanoFrameworkとESP32でIoTプログラミング連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 高江 賢(タカエ ケン)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/19635 2024/06/21 11:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー