7セグLEDドライバTM1630で省配線制御を紹介します(自作ライブラリ付)

Arduino

はじめに

今年もあと僅かですね、みなさんはいかがお過ごしでしょうか?

今回紹介したいのは7セグメントLED制御用ドライバ【TM1630】です。

よくある論理回路タイプのデコーダとは違ってデータとクロック、チップセレクタで制御する通信タイプのドライバです。

難点がこのICの製造元がタイタンマイクロエレクトロニクス社という中国メーカなところですね。もちろんデータシートも中国語です。

雑ではありますが、データシートを翻訳した記事載せときますね。

TM1630データシート(日本語訳)
個人利用のためのTM1630データシートの日本語訳です。保証は無しです。

(注)個人利用で翻訳したものなので翻訳ミス、動作等の保証は致しませんのであしからず。

回路図

今回はArduinoでの制御を想定します。制御ピンは以下に示す通り3PINだけ!

  • DIO(D9):データ入出力
  • CLK(D10):クロック入力
  • STB(D11):データの送受信の定義

*今回はK2は使用しません。

 

 

 

 

コード

今回使用している表示モードは【固定アドレスモード】です。表示アドレス毎にデータを送信して次のアドレスに移ってデータを送信しての繰り返しです。一方の【動的アドレスモード】はデータを送信するたびにアドレスがインクリメントされます。データのクリアなど連続してデータを送る場合はそちらの方がいいかもしれませんね。

そして、通信の方式はデータシートに記載されている以下のフローに沿って行っています。

  • Command 1. 表示モードの設定(5桁7セグメント設定:0b00000001)
  • Command 2. データ送信の設定(固定アドレス:0b0b01000100)
  • Command 3. 表示アドレス設定(一桁目:0b11000000)
  • Command 4. LED表示データ設定(SEG2~8の出力定義。例えば0なら0b01111110)
  • あと3回Command 3と4を繰り返す。
  • Command 5. 表示出力(PWM)設定(パルス幅2/16設定:0b10000001)

そしてデータの送り方は【shiftOut】関数を使用しています。この関数は1byteのデータを1bitずつ指定の変数に出力します。そして出力ごとにクロックを出力します。また、出力の方向は下位ビットから出力するので【LSBFIRST】で設定してください。

うまく書き込むことが出来たら100sec毎にカウントアップする表示機ができるかと思います。

自作ライブラリ紹介

最後に、このLEDドライバ用の自作ライブラリをGithub公開しているのでその宣伝になります。

TM1630.lib

*new-fileのブランチの選択をお願いします。

内容はDisp(uint16_t)の引数に表示したい数字を入れると7セグ表示機に出力されるシンプルなライブラリになります。気を付けて頂きたいのが5桁を入力してしまうと3桁しか表示されません。引数にuint16_tを設定していますが、実質0-9999までが対応範囲です。

<ライブラリ関数::TM1630LED led(DIOPin, CLKPin, STBPin)>

  • led.Begin() ループ開始前に一度だけ実行してください。各ピンの初期出力の設定。
  • led.Clear() 表示機のバッファクリアです。内部的にはディスプレイONになっています。
  • led.Disp(uint16_t) 引数に0-9999を入れてください。

注1)Arduino関数を使用しているので結構容量がでかいです。普通に使用すると余裕に1000byte超えます。余裕があったら容量削減のバージョンアップを行う予定です。

おわりに

今回はLEDドライバ【TM1630】を紹介しました。

私自身も通信タイプのLEDドライバを使用しましたが思った以上に便利でしたね。何より3線だけで最大7セグメントLEDを5個操作できるのは魅力的です。

あと便利だなー、と思ったのが調光機能です。普通LEDを使用するときは電流制限抵抗を使用すると思いますが、おそらくこれは内部トランジスタとPWM制御で調光しているのでLED直挿しでいけるのがいいですね(個人的な意見です)。

でも中国語のデータシートってのが厄介でしたね。私の知識不足ですが、日本メーカーでこれみたいなLEDドライバ出ていないんですかねー

では、今回はこんなところで!

ではでは~

コメント

タイトルとURLをコピーしました