つれづれなる備忘録

日々の発見をあるがままに綴る

TinkercadによるArduinoシミュレーション33 ~ カウントを7セグディスプレイで表示

1. 4ビットバイナリカウンタの利用

 前回は10進ジョンソンカウンタを利用してLED順次点灯する方法を紹介した。今回は4ビットバイナリカウンタの紹介と、それを利用して7セグディスプレイデコーダーと組み合わせることで、カウントを7セグメントディスプレイに表示する方法を紹介する。

atatat.hatenablog.com

2. 4ビットバイナリカウンタ

 4ビットバイナリカウンタは前回の10進ジョンソンカウンタと同様に入力されるクロック信号をカウントした数値を出力する。10進ジョンソンカウンタは10本の出力のうち、1つがHIGHになることで数値を表現していたが、4ビットバイナリカウンタは4本の出力のLOW-HIGHにより4bitで数値を表現する。カウントとしては0-15までとなり、15を越えたら0に戻る。Tinkercadの4ビットバイナリカウンタは74HC93となっており、各ピンの割り当ては下のようになっている。

74HC93のピン割り当て
74HC93のピン割り当て

ピン番号、機能を下表にまとめた。

ピン番号 名前 機能
1 CP1 クロック入力1
2-3 MR1,2 リセット1,2
4,6,7,13 NC 使用しない
5 Vcc 電源
8,9,11,12 Q2,Q1,Q3,Q0 カウンタ出力
10 GND グラウンド
14 CP0 クロック入力0

正式なデータシートは https://www.tij.co.jp/jp/lit/ds/symlink/cd74hc93.pdf?ts=1593860807105&ref_url=https%253A%252F%252Fwww.tij.co.jp%252Fproduct%252Fjp%252FCD74HC93 を参照。

使用方法としてはクロック入力CP0に外部からクロック信号を入力し、クロック入力CP1はカウンタ出力Q0と接続する。リセット端子MR1,MR1は同時にHIGHが入力された場合はカウントリセットがかかり、それ以外はカウントを継続する。今回は4ビットバイナリカウンタの出力を7セグメントデコーダー(CD4511)の入力端子A,B,C,Dに接続することで、カウンタの出力を7セグメントデコーダーと介して7セグメントディスプレイに表示する。主要な部分の接続のみを下の図に示した。CP0はArduinoの3ピンと接続することにする。リセット端子は今回はグランドに接続することで、リセットなしの連続で動作するようにする。

バイナリカウンタと7セグメントデコーダーの接続
バイナリカウンタと7セグメントデコーダーの接続

7セグメントデコーダーの使用方法については下の過去記事も参照

atatat.hatenablog.com

3. 全体の接続およびスケッチ

 Arduino、4ビットバイナリカウンタ、7セグメントデコーダー、7セグメントディスプレイの全体を接続したTinkercad上の図を下に示す。

カウンタ、デコーダー、ディスプレイの全体接続
カウンタ、デコーダー、ディスプレイの全体接続

クロック信号を生成するスケッチは以下の通り。

int dt=250; // HIGH,LOW継続時間
void setup()
{
  pinMode(3, OUTPUT); //クロック入力
  digitalWrite(3,LOW);

}

void loop()
{
 digitalWrite(3,HIGH);//クロック入力:HIGH
 delay(dt);
 digitalWrite(3,LOW);//クロック入力:LOW
 delay(dt);
  
}

これをTinkercadでシミュレーションを実行すると、7セグメントディスプレイ上に0-9までカウントに応じて順に表示されるが、9から後はしばらく表示されず再び0-9まで表示される。これは4ビットバイナリカウンタのカウント範囲が0-15で、7セグメントデコーダーは0-9までしかデコードできず、10-15はデコーダーから出力されないためである。

4. カウンタのリセット機能の利用

 0-9まで連続的に7セグメントディスプレイに表示するためには、カウントが10になるたびにカウンタをリセットして0から開始するようにすればよい。4ビットバイナリカウンタのMR1,MR2のGND接続をなしにして、Arduinoの2ピンに接続し、Arduino側からカウント時はLOW,リセット時はHIGHを出力して制御できるようにする。MR1/MR2Arduinoの2ピンに接続するように変更した図を下に示す。

カウンタのリセット制御
カウンタのリセット制御

スケッチについては、クロック信号を生成する処理に加えて、カウントが10になると2ピンからHIGHが出力する処理を追加した。スケッチは以下に示す。

int dt=250;
int cnt=0;
void setup()
{
  pinMode(3, OUTPUT);//クロック入力
  pinMode(2, OUTPUT);//リセット制御
  digitalWrite(3,LOW);
  digitalWrite(2,LOW);

}

void loop()
{
  if(cnt>9){ // カウントが9を越えたらリセット処理
    digitalWrite(2,HIGH);//カウンタリセット
    digitalWrite(2,LOW);//カウント
    cnt=0;
  }
 digitalWrite(3,HIGH);//クロック入力:HIGH
 delay(dt);
 digitalWrite(3,LOW);//クロック入力:LOW
 delay(dt);
 cnt++;
  
}

これを実行すると7セグメントディスプレイ上の表示が0-9まで表示され、次に表示が0に戻ってカウントアップで数字が表示されていく。4ビットバイナリカウンタの出力を7セグメントデコーダーの入力として利用することでArduinoのデジタルピンの使用ピン数を2つに抑えることができる。

5. まとめ

 今回は4ビットバイナリカウンタの出力を7セグメントデコーダーの入力として利用することで7セグメントディスプレイにカウンタのカウントを表示する方法を紹介した。