NOBのArduino日記!

NOBのArduino日記!

趣味は車・バイク・自転車・ラジコン・電子工作です。

7セグメントLEDデコーダの使い方!(TC4511BP)

 f:id:nobita_RX7:20200912024540j:plain
BCD-to-Seven Segment Latch/Decoder/Driver(TC4511BP)
 
 ArduinoUNOを使って7セグLEDに数字を表示したいです。 Arduinoに直繋ぎでも表示は出来るのですが、電流量的にマイコンに優しくない・GPIOピンを1文字で7pinも使う・プログラムが煩雑になる・PWMpinが足りず1文字の調光すら出来ない・・・。と安易な手段は後々大変な事になります(;'∀')
 
 「7セグLEDドライバ」で検索すると、シリアルで3,4文字制御出来るモノとか、ダイナミック点灯(輝度半減以下)する物が殆どでした。
 
欲しい条件として、
 ①MAX輝度は落とさず
 ②調光出来て
 ③文字数が1文字単位で自由に決められ
 ④GPIOpin数を節約出来
 ⑤プログラムが簡単で
 ⑥入手性の良い
 ⑦ブレッドボードで使えるDIP形状IC
 
・・・で探した所「TC4511BP」(TOSHIBA製)が見つかりました!(^^)/
「74HC4511」(NXP製)や「CD74HC4511」(TEXAS INSTRUMENTS製)等、各社出しているようですが、入手性の良い「TOSHIBA製」ですね、
 と言う事で実際に「TC4511BP」を使って7セグLEDを点灯してみました!
 

1.「7セグメント LED デコーダ」とは

 「7セグメントLEDドライバ」・「7セグメントLEDデコーダ」・「7セグメントディスプレイ・・・」等など色々呼ばれています。
 
 機能としては、2進数から10進数にエンコード※2(7セグメントLEDデコーダ※3,4では?作る人10進→エンコードマイコン2進→デコード→見る人10進の意味?)する回路と、その結果を7セグメントLED※1に出力しドライブする回路からなるものです。
 
※1:7セグメントLEDとは、7つのセグメント「a~g」で構成され、個々の部分が点灯したり消灯したりすることで、「0~9」を表示するもの。また小数点「.」を表す8番目のセグメントとして「DP」がある。
f:id:nobita_RX7:20200912024557p:plain
図1:実験で使う7セグメントLED「OSL10561-IW(LW) 」
 
※2:エンコードとは、データを他の形式へ変換すること。
※3:デコードとは、エンコードされたデータを元の形式へ戻すこと。
※4:デコーダとは、エンコードされたデータを元の形式へ戻す装置のこと。
 
1.1 「TC4511BP」の概要
 今回使用する「TC4511BP」の特徴として、以下4項目が挙げられます。
 ①BCD※5 コードの入力を 7 セグメント表示素子駆動信号に変換し
 ②カソードコモン型LEDを直接駆動
 ③LT 入力、 BI はそれぞれ BCD 入力に無関係に全出力を、“H” (点灯)、 “L” (消灯) 可能
 ④“10” 以上の誤った BCD 入力が印加されると、全出力共 “L” (消灯) 
 
※5:BCDとは、「Binary Coded Decimal」の略、具体的には4ビットで表される2進数を一桁の10進数にエンコードする方式です。
 
1.2 「TC4511BP」の仕様
 「TC4511BP」の仕様を表1に、真理値表を表2に示します。
 
表1:TC4511BPの仕様
項目 絶対最大定格
電源電圧(VDD) 単位:V Vss-0.5 ~ Vss+20
入力電圧(VIN) 単位:V Vss-0.5 ~ VDD+0.5
出力電圧(VOUT) 単位:V Vss-0.5 ~ VDD+0.5
入力電流(IIN) 単位:mA ±10
出力電流(IOH) 単位:mA -50
許容損失(PD) 単位:mW 300(DIP)/180(SOP)
動作温度(Topr) 単位:℃ -40~85
保存温度(Tstg) 単位:℃ -65~150
 
表2:真理値表
f:id:nobita_RX7:20200912024553p:plain
 ※詳細はプログラム中のコメント参照
 

2.実験!

 実際にArduinoUNOに「TC4511BP」を接続して「7セグメントLED」を点灯してみました!
 
2.1 接続
 回路図を図2に、ブレッドボード図を図3に、実際に繋げた状態を図4に示します。 

f:id:nobita_RX7:20200912024602p:plain

図2:「TC4511BP」と「OSL10561-IW(LW) 」接続 回路図

 

f:id:nobita_RX7:20200912024607p:plainf:id:nobita_RX7:20200912024612j:plain

図3:ブレッドボード図       図4:実際に作ったもの
 
2.2 プログラム
 図4の回路で使っているArduinoUNOに書き込むプログラムを図5に示します。
 内容としては、表2「Inputs」に示した「LE~A」の7ピン全てArduinoに繋ぎ、真理値表の内容をArduinoから出力しています。
 また参考に、 BI 端子はBCDコード 入力とは無関係に全出力を“L” (消灯) する事が可能なので、そこに繋がった5pinからPWM出力して調光するプログラムを図6に示します。

 

#define TC4511_LE 6
#define TC4511_BI 5
#define TC4511_LT 4
#define TC4511_D 7
#define TC4511_C 3
#define TC4511_B 2
#define TC4511_A 8

void setup() {
  Serial.begin(9600);
  pinMode(TC4511_LE, OUTPUT);
  pinMode(TC4511_BI, OUTPUT);
  pinMode(TC4511_LT, OUTPUT);
  pinMode(TC4511_D, OUTPUT);
  pinMode(TC4511_C, OUTPUT);
  pinMode(TC4511_B, OUTPUT);
  pinMode(TC4511_A, OUTPUT);
}

#define Array 19
bool Val[Array][7] ={
 /*LE,BI,LT, D, C, B, A*/
  { 0, 0, 0, 0, 0, 0, 0},  //8         ※優先順位1位(条件:                  LT=0)
  { 0, 0, 1, 0, 0, 1, 1},  //Blank     ※優先順位2位(条件:         BI=0 and LT=1)
  { 1, 1, 1, 0, 0, 0, 0},  //前回値保持 ※優先順位3位(条件:LE=1 and BI=1 and LT=1)
  { 0, 1, 1, 0, 0, 0, 0},  //0     ※以下優先順位4位(条件:LE=0 and BI=1 and LT=1)
  { 0, 1, 1, 0, 0, 0, 1},  //1
  { 0, 1, 1, 0, 0, 1, 0},  //2
  { 0, 1, 1, 0, 0, 1, 1},  //3
  { 0, 1, 1, 0, 1, 0, 0},  //4
  { 0, 1, 1, 0, 1, 0, 1},  //5
  { 0, 1, 1, 0, 1, 1, 0},  //6
  { 0, 1, 1, 0, 1, 1, 1},  //7
  { 0, 1, 1, 1, 0, 0, 0},  //8
  { 0, 1, 1, 1, 0, 0, 1},  //9
  { 0, 1, 1, 1, 0, 1, 0},  //Blank
  { 0, 1, 1, 1, 0, 1, 1},  //Blank
  { 0, 1, 1, 1, 1, 0, 0},  //Blank
  { 0, 1, 1, 1, 1, 0, 1},  //Blank
  { 0, 1, 1, 1, 1, 1, 0},  //Blank
  { 0, 1, 1, 1, 1, 1, 1},  //Blank
} ;

void loop() {
  for (int i = 0; i < Array; i++) {
    Serial.println(i);
    digitalWrite(TC4511_LE, Val[i][0]);
    digitalWrite(TC4511_BI, Val[i][1]);
    digitalWrite(TC4511_LT, Val[i][2]);
    digitalWrite(TC4511_D, Val[i][3]);
    digitalWrite(TC4511_C, Val[i][4]);
    digitalWrite(TC4511_B, Val[i][5]);
    digitalWrite(TC4511_A, Val[i][6]);
    delay(1000);
  }
}
イメージ 1
図5:Simpleプログラム例
 
#define TC4511_LE 6
#define TC4511_BI 5
#define TC4511_LT 4
#define TC4511_D 7
#define TC4511_C 3
#define TC4511_B 2
#define TC4511_A 8

void setup() {
  Serial.begin(9600);
  pinMode(TC4511_LE, OUTPUT);
  pinMode(TC4511_BI, OUTPUT);
  pinMode(TC4511_LT, OUTPUT);
  pinMode(TC4511_D, OUTPUT);
  pinMode(TC4511_C, OUTPUT);
  pinMode(TC4511_B, OUTPUT);
  pinMode(TC4511_A, OUTPUT);
}

#define Array 19
bool Val[Array][7] ={
 /*LE,BI,LT, D, C, B, A*/
  { 0, 0, 0, 0, 0, 0, 0},  //8         ※優先順位1位(条件:                  LT=0)
  { 0, 0, 1, 0, 0, 1, 1},  //Blank     ※優先順位2位(条件:         BI=0 and LT=1)
  { 1, 1, 1, 0, 0, 0, 0},  //前回値保持 ※優先順位3位(条件:LE=1 and BI=1 and LT=1)
  { 0, 1, 1, 0, 0, 0, 0},  //0     ※以下優先順位4位(条件:LE=0 and BI=1 and LT=1)
  { 0, 1, 1, 0, 0, 0, 1},  //1
  { 0, 1, 1, 0, 0, 1, 0},  //2
  { 0, 1, 1, 0, 0, 1, 1},  //3
  { 0, 1, 1, 0, 1, 0, 0},  //4
  { 0, 1, 1, 0, 1, 0, 1},  //5
  { 0, 1, 1, 0, 1, 1, 0},  //6
  { 0, 1, 1, 0, 1, 1, 1},  //7
  { 0, 1, 1, 1, 0, 0, 0},  //8
  { 0, 1, 1, 1, 0, 0, 1},  //9
  { 0, 1, 1, 1, 0, 1, 0},  //Blank
  { 0, 1, 1, 1, 0, 1, 1},  //Blank
  { 0, 1, 1, 1, 1, 0, 0},  //Blank
  { 0, 1, 1, 1, 1, 0, 1},  //Blank
  { 0, 1, 1, 1, 1, 1, 0},  //Blank
  { 0, 1, 1, 1, 1, 1, 1},  //Blank
} ;

void loop() {
  for (int i = 3; i < 13; i++) {
    Serial.println(i);
    digitalWrite(TC4511_LE, Val[i][0]);
    if(i>2 && i<13){
      analogWrite(TC4511_BI, (i-2)*25.5);
    }
    digitalWrite(TC4511_LT, Val[i][2]);
    digitalWrite(TC4511_D, Val[i][3]);
    digitalWrite(TC4511_C, Val[i][4]);
    digitalWrite(TC4511_B, Val[i][5]);
    digitalWrite(TC4511_A, Val[i][6]);
    delay(200);
  }
}
イメージ 1
図6:PWM調光プログラム例
 
2.3 実験!
 図4の回路で図5のプログラムを実行した結果を図7,8に示します。

f:id:nobita_RX7:20200912024617g:plain

図7:8,blank(3),3,0,1,2,3,4,5,6,7,8,9,blank…と、18データ表示成功!
 

f:id:nobita_RX7:20200912024625p:plain

図8: Arduino IDE シリアルモニター

 
〇図5 simpleプログラム
 当然ですが、表2真理値表の通り正しく「Outputs」が得られました!(*^^)v
 
〇図6 PWM調光プログラム
 実行すると「0」の輝度10%から10%ずつ増加し「9」で最大輝度「100%」に調光された数値が表示されました!(^^)!
 

3.まとめ!

 このIC「TC4511BP」シンプルで使い勝手も良く、しかも一個80円とお安くて良いですね!
 次回は!二桁表示やってみます!それと点灯データを配列で持たせずにbit演算で何とかなりそうな気がしますね( ;∀;)

f:id:nobita_RX7:20200912024629j:plain

 

イメージ 1 イメージ 3
励みになりますのでよければクリック下さい(^o^)/

↩【NOBのArduino日記!】目次に戻る