2024年4月4日木曜日

7 segment pedia(CATHODE+TC4511,ANODE)


https://nobita-rx7.hatenablog.com/entry/2020/09/13/011558 

TC4511BPでBCD入力でカソードコモン7セグの操作 配線が詳しい


#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},  //0:8         ※優先順位1位(条件:                  LT=0)

  { 0, 0, 1, 0, 0, 0, 0},  //1:Blank     ※優先順位2位(条件:         BI=0 and LT=1)

  { 1, 1, 1, 0, 0, 0, 0},  //2:前回値保持 ※優先順位3位(条件:LE=1 and BI=1 and LT=1)

  { 0, 1, 1, 0, 0, 0, 0},  //3:0     ※以下優先順位4位(条件:LE=0 and BI=1 and LT=1)

  { 0, 1, 1, 0, 0, 0, 1},  //4:1

  { 0, 1, 1, 0, 0, 1, 0},  //5:2

  { 0, 1, 1, 0, 0, 1, 1},  //6:3

  { 0, 1, 1, 0, 1, 0, 0},  //7:4

  { 0, 1, 1, 0, 1, 0, 1},  //8:5

  { 0, 1, 1, 0, 1, 1, 0},  //9:6

  { 0, 1, 1, 0, 1, 1, 1},  //10:7

  { 0, 1, 1, 1, 0, 0, 0},  //11:8

  { 0, 1, 1, 1, 0, 0, 1},  //12: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++) { // 3=>0,13=>ARRAY ORIGINAL 

    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);

  }

}

// https://nobita-rx7.hatenablog.com/entry/2020/09/13/011558

おはようございます。遅くまでやっていますね。

> AVマイコンプログラミング入門 258pで2sc1815を使う場合 スイッチする端子から
> 10kΩ経由で(15kΩの抵抗を分岐してGNDにつなぎつつ)ベースにつないでいます
> この理由がわかりません 電流がながれんときに確実にGNDにおちるように?
> (ちなみにモシニャガ先生本では55pで10kΩの抵抗のみベースにつないでいました)

Webより抜粋です。
『抵抗R3,4について
以下の理由で抵抗R3,4を入れた方が良いらしいです、抵抗値はR1,2と同じ値でOKですね。
・コレクタしゃ断電流(ICBO=0.6uA)の為にベースに漏れ電流が流れる、これにより(ICBO x hFE:0.6uA x 200)0.12mAの電流がコレクタに流れるのでその電流を逃がす必要が有る。
・ベースの入力に、トライステート出力やオープンコレクタ出力やスイッチなどを繋いだ場合にその信号がオープンになる可能性があり、オープンになるとICBOの漏れ電流の影響によりコレクタ電流が不安定になります、よって確実にトランジスタをON/OFFさせる必要が有ります。
・また、抵抗R1,2が断線した時や、R1,2の値が非常に大きい時において、外来ノイズによりトランジスタがON してしまう可能性が有るのでこれを防ぐ役目も有ります。』
それと2SC1815のベース・エミッタ間の最大電圧は5Vなので、抵抗R3,4を入れたほうが良いかもしれません。
よろしくお願いします。

-------ANODE COMMON---------------static点灯----------------------------

まずはUnoで試運転 led 抵抗は1kΩとした 

// https://burariweb.info/electronic-work/arduino-learning/arduino-7segment-led.html

// Arduino入門編㉔ 7セグメントLEDを制御する①

// https://burariweb.info

// 7セグメントLED配列

//         A(D2)

//        -------

//  F(D7)|       |B(D3)

//       | G(D8) |

//         -----

//       |       |

//  E(D6)|       |C(D4)

//        -------      .DP

//         D(D5) 

const int ASeg = 2;

const int BSeg = 3;

const int CSeg = 4;

const int DSeg = 5;

const int ESeg = 6;

const int FSeg = 7;

const int GSeg = 8;

 void setup() {

  pinMode(ASeg, OUTPUT);

  pinMode(BSeg, OUTPUT);

  pinMode(CSeg, OUTPUT);

  pinMode(DSeg, OUTPUT);

  pinMode(ESeg, OUTPUT);

  pinMode(FSeg, OUTPUT);

  pinMode(GSeg, OUTPUT);

}

void loop() {

  zero();

  delay(500);

  one();

  delay(500);

  two();

  delay(500);

  three(); 

  delay(500);

  four();

  delay(500);

  five(); 

  delay(500);

  six(); 

  delay(500);

  seven();

  delay(500);

  eight();

  delay(500);

  nine();

  delay(500);

}

// LED表示関数の定義

// 0を表示

void zero() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, LOW);

  digitalWrite(FSeg, LOW);

  digitalWrite(GSeg, HIGH);

}

// 1を表示

void one() { 

  digitalWrite(ASeg, HIGH);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, HIGH);

  digitalWrite(ESeg, HIGH);

  digitalWrite(FSeg, HIGH);

  digitalWrite(GSeg, HIGH);

}

// 2を表示

void two() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, HIGH);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, LOW);

  digitalWrite(FSeg, HIGH);

  digitalWrite(GSeg, LOW);

}

// 3を表示

void three() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, HIGH);

  digitalWrite(FSeg, HIGH);

  digitalWrite(GSeg, LOW);

}

// 4を表示

void four() {

  digitalWrite(ASeg, HIGH);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, HIGH);

  digitalWrite(ESeg, HIGH);

  digitalWrite(FSeg, LOW);

  digitalWrite(GSeg, LOW);

}

// 5を表示

void five() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, HIGH);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, HIGH);

  digitalWrite(FSeg, LOW);

  digitalWrite(GSeg, LOW);

}

// 6を表示

void six() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, HIGH);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, LOW);

  digitalWrite(FSeg, LOW);

  digitalWrite(GSeg, LOW);

}

// 7を表示

void seven() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, HIGH);

  digitalWrite(ESeg, HIGH);

  digitalWrite(FSeg, HIGH);

  digitalWrite(GSeg, HIGH);

// 8を表示

void eight() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, LOW);

  digitalWrite(FSeg, LOW);

  digitalWrite(GSeg, LOW);

}

// 9を表示

void nine() {

  digitalWrite(ASeg, LOW);

  digitalWrite(BSeg, LOW);

  digitalWrite(CSeg, LOW);

  digitalWrite(DSeg, LOW);

  digitalWrite(ESeg, HIGH);

  digitalWrite(FSeg, LOW);

  digitalWrite(GSeg, LOW);

}


0 件のコメント:

コメントを投稿