ゆるく楽しむプログラミング

LEDドライバ TM1640

16個の7セグメントLEDを駆動できるLEDドライバです。
SMD部品しか見つからなかったので、DIP変換基板を合わせて使用します。
はんだフラックスを使えば意外と簡単にはんだ付けできます。


TM1640

DIP変換基板

接続


Arduinoとカソードコモンの7セグメントLEDに接続する場合
VCC +5V 
GND GND 
DIN ArduinoのD10 (他のピンでも可) 
SCLK ArduinoのD9  (他のピンでも可) 
SEG1 7セグメントLEDの a この部分の接続は、ソフトウエア側の解釈でどうにでもなるので厳格ではない。
むしろ、1~8を逆にした方がソフトウエア側での扱いは楽になるかも。 
SEG2 7セグメントLEDの b
SEG3 7セグメントLEDの c
SEG4 7セグメントLEDの d
SEG5 7セグメントLEDの e
SEG6 7セグメントLEDの f
SEG7 7セグメントLEDの g
SEG8 7セグメントLEDの DP
DRID1~16 7セグメントLEDのコモンピン(カソードコモンの場合、GNDピン) 

TM1640のコマンド

TM1640の制御は DINとSCLKの2本の信号を使用したシリアル通信で行います。



Start/End の手順に注意が必要です。
DIN - LOW / SCLK - LOW で開始。 SCLK - HIGH / DIN - HIGH で終了。
ArdunoUNOでは問題なく動きますが、Start後、End前に1μ秒のWaitを入れた方がよいかも。

コマンドは以下、実質3種しかない。
  BIT7 BIT6 BIT5 BIT4 BIT3 BIT2 BIT1 BIT0 動作 
データ設定コマンド  0 1 - - 0 0 - - アドレスAuto+1 
0 1 - - 0 1 - - アドレスFixed
アドレス設定コマンド  1 1 - - 0 0 0 0 00H (GRID1)
1 1 - - 0 0 0 1 01H (GRID2)
1 1 - - 0 0 1 0 02H (GRID3)
1 1 - - 0 0 1 1 03F (GRID4)
1 1 - - 0 1 0 0 04H (GRID5)
1 1 - - 0 1 0 1 05H (GRID6)
1 1 - - 0 1 1 0 06H (GRID7)
1 1 - - 0 1 1 1 07H (GRID8)
1 1 - - 1 0 0 0 08H (GRID9)
1 1 - - 1 0 0 1 09H (GRID10)
1 1 - - 1 0 1 0 0AH (GRID11)
1 1 - - 1 0 1 1 0BH (GRID12)
1 1 - - 1 1 0 0 0CH (GRID13)
1 1 - - 1 1 0 1 0DH (GRID14)
1 1 - - 1 1 1 0 0EH (GRID15)
1 1 - - 1 1 1 1 0FH (GRID16)
表示制御  1 0 - - 1 0 0 0 デューティー比 1/16
1 0 - - 1 0 0 1 デューティー比 2/16
1 0 - - 1 0 1 0 デューティー比 4/16
1 0 - - 1 0 1 1 デューティー比 10/16
1 0 - - 1 1 0 0 デューティー比 11/16
1 0 - - 1 1 0 1 デューティー比 12/16
1 0 - - 1 1 1 0 デューティー比 13/16
1 0 - - 1 1 1 1 デューティー比 14/16
1 0 - - 0 X X X 表示OFF
1 0 - - 1 X X X 表示ON

コマンド送信手順

コマンドは以下の手順で送信します。
データ設定で Fixedモードを設定した場合には、指定アドレスに対して1Byteのデータを送信。




データ設定で Auto+1モードを設定した場合には、指定アドレス以降 1Byteのデータを送信する毎に自動的にアドレスアが+1されます。



16セグメントLEDを使ってみる

16セグメントLEDを使ってみます。
TM1640は8x16のLEDを操作出来るので、16セグメントLEDな8個を操作できる計算になります。
16セグメントLED A-2306SRは秋月電子で1個600円(2024年7月現在)ですが、4個セットで基板付きのキットが1980円で売っています。
※キットの配線には問題があるので、16セグメントLEDとして使用する場合には基板の改造が必要になるかも。


A-2306SR

超大型4桁LED表示キット



A-2306SRの配線はこうなっており、コモンピン(アノード)が1本しか出ていないので、一度に8セグメントしかドライブできないTM1640では普通に考えると操作できません。
TM1640は16グリッドを操作できるので、グリッドとセグメントを入れ替えて考えます。
TM1640のアドレスイメージとしてはこんな感じになります。


アノードをTM1640のSEGxピンに、カソード(LED A1~P)をTM1640のGRIDxピンに接続します。

普通(?)は GRID1をA1(17番ピン)、GRID2をA2(14番ピン)とグリッドとセグメントを対尾させた方が良いのですが、ブレッドボードで組む場合には物理的な並びに合わせた方が楽で綺麗に配線できるので
▼のように配線します。※DPはArduinoのGPIOピン(サンプルスケッチでは8番ピン)に接続します。1KΩ程度の電流制限抵抗を付けないと抵抗値の不均衡でDP以外が点灯しなくなります。


A1 GRID14
A2 GRID11
B GRID10
C GRID8
D1 GRID3
D2 GRID6
E GRID2
F GRID16
G1 GRID1
G2 GRID9
J GRID15
K GRID13
L GRID12
M GRID7
N GRID5
P GRID4
DP 10番ピン
  グリッド(アドレス)と16セグメントLEDのセグメントとの対応がぐちゃぐちゃなので、対応表を作成して使用します。
例えば '2' を表示するパターン' b1110111011000000 を表示する際にはMSB側から対応する変換テーブルのGRID番号のアドレスを操作すればよい事になります。
この例では アドレスC0Hから順位に 01h 01h 01h 00h 00h 01h 00h 00h 01h 01h 01h 00h 00h 01h 0h 00h を書き込めば良いことになります。
※ SEG2に接続したLEDに対する設定は 02h 、SEG3は 04h 、 SEG4は 08h ・・・・ SEG8は 80h を書き込みます、複数同時の場合はORを取ります。 SEG2とSRG4なら 0Ah という具合です。

サンプルスケッチ


フォルダ名 : 説明
以上の スケッチを公開しています。

YuruPuro/TM1640

解説動画