(2017.8.16 作成)
(2017.10.4 修正)
(2019.10.7 修正)
このページでは右写真の4桁LEDディスプレイに使用されている深圳市天微电子股份有限公司製LEDドライバTM1637について紹介したいと思います。ドライバ自体は裏なので写真に写っていないです。
この画像では時刻表示用のLED接続されているため、それに適したものになっていますが特に7セグLEDであれば問題なく、例えば数値表示用のLEDに使用することもできます。
このドライバ(TM1637)には以下のような機能があります。
7セグLEDを自力で点灯させるのは結構面倒なのですがこのドライバを使用することで簡単に駆動させることができます。
SeedStudio社のGrove-4-Digit Displayというオープンハードウェアがこの形(時刻表示型)のため大量に互換品が安く販売されていますが、Aliexpressで検索してみると他のLEDがとりついたものやDIPのチップ単体でも販売されているのでほかの用途にも使用できます。
また、このサイトで紹介しているTM1637の使用法ですが、キー入力には対応していません。
仕様書には右のような配線が記載されています。
一見とてもごちゃごちゃしていますが、接続は単純でアノードコモンになっている7セグLEDのアノードをGRID端子に接続し、各セグメントのカソードをSEG端子に接続しています。
電源電圧はTyp.で5Vですが3.3V入力でも問題なくLEDが点灯できました。
各セグメントあたり30mAまで流せ、ソフトでPWM調光を行います。調光は0~14/16(88%)までの9段階に設定可能です。
I2C類似のプロトコルで制御を行います。ただしI2Cの規格には以下の点で準拠していません。
2の問題はビットの並び順を反転させるだけでよいのですが、1の問題のためSTM32マイコンを使用する場合はI2Cペリフェラルを用いることはできません。
STM32の場合通常のI2Cではスタートコンディション作成後Slaveアドレスに引き続きR/Wビットを送信します。この際Readビットが立っているとI2Cはレシーバーモードとなり受信待ちになります。
しかしこのペリフェラルをTM1637に使おうとすると一連のコマンドの中にReadビットが立つ場合があります。その結果I2Cはレシーバーモードとなり、コマンド送信途中なのに送信できない不具合が発生してしまいます。もっと具体的に言うとアービトレーションエラーが発生します。
よってSTM32でTM1637を使用するにはソフトウェアでGPIOを動かすSoftware I2Cが必要になります。ちなみにPICなど他のマイコンではI2Cペリフェラルで動くともあるそうです。
コマンドには以下の2種類があります。
コマンドの最後にLEDのOn/Offと調光量の設定を送信して一連のコマンドが終了します。
ソフトやサンプルコードに関するリンクはこちらにまとめていますので、参考にしてください。