- 必要なコンポーネント
- 4桁7セグメントディスプレイ
- 74HC595シフトレジスタIC
- DS3231RTCモジュール
- 回路図
- 7セグメントディスプレイを多重化するためのArduinoUNOのプログラミング
デジタルウォールクロックは最近人気が高まっており、時間、分、秒の正確な時刻を提供し、値を読みやすいため、アナログクロックよりも優れています。一部のデジタル時計には、温度、湿度の表示、複数のアラームの設定などの多くの機能もあります。ほとんどのデジタル時計は、7セグメントディスプレイを使用しています。
以前は、7セグメントディスプレイまたは16x2LCDを使用して多くのデジタル時計回路を構築していました。ここでは、AVRベースのデジタル時計の完全なPCB設計を行うことができます。このチュートリアルでは、Arduino UNOを使用して4〜7セグメントディスプレイを多重化し、時間をHH:MM形式で表示してデジタル時計を作成します。
必要なコンポーネント
- 4桁7セグメントディスプレイ
- 74HC595 IC
- DS3231RTCモジュール
- Arduino UNO
- ブレッドボード
- 接続線
4桁7セグメントディスプレイ
4桁の7セグメントディスプレイには、4つの7セグメントディスプレイが結合されているか、多重化されていると言えます。これらは、数値と、小数およびコロンを含む一部のアルファベットを表示するために使用されます。ディスプレイは両方向に使用できます。4桁は、デジタル時計の作成など、0から9999までの数値をカウントするのに役立ちます。以下は、4桁の7セグメントディスプレイの内部図です。
各セグメントには、個別のLED制御を備えた1つのLEDがあります。CommonAnodeとCommonCathodeなどの7セグメントディスプレイには2つのタイプがあります。上の画像は、一般的なアノードタイプ7セグメントディスプレイを示しています。
共通アノード
共通アノードでは、8つのLEDすべてのすべての正端子(アノード)が相互に接続され、COMと呼ばれます。また、すべてのマイナス端子はそのままにするか、マイクロコントローラのピンに接続します。マイクロコントローラを使用して、特定のLEDセグメントを点灯するようにロジックLOWを設定し、LEDをオフにするためにロジックHighを設定します。
一般的なカソード
Common Cathodeでは、8つのLEDすべてのすべての負端子(カソード)が相互に接続され、COMという名前が付けられています。また、すべてのプラス端子はそのままにするか、マイクロコントローラのピンに接続します。マイクロコントローラを使用して、ロジックをHIGHに設定してLEDを点灯し、LOWに設定してLEDをオフにします。
ここで7セグメントディスプレイの詳細を確認し、他のマイクロコントローラーとのインターフェース方法を確認してください。
- Arduinoとインターフェースする7セグメントディスプレイ
- RaspberryPiとインターフェイスする7セグメントディスプレイ
- 7セグメントディスプレイとARM7-LPC2148のインターフェース
- PICマイクロコントローラーとインターフェースする7セグメントディスプレイ
- 8051マイクロコントローラーとインターフェースする7セグメントディスプレイ
74HC595シフトレジスタIC
IC 74HC595はパラレルOUTシフトレジスタ-も8ビットシリアルのように知られています。このICは、データ入力をシリアルで受信し、8つの出力ピンを並列に制御できます。これは、マイクロコントローラーから使用されるピンを減らすのに役立ちます。74HC595シフトレジスタに関連するすべてのプロジェクトはここにあります。
74HC595 ICの動作:
このICは、マイクロコントローラでクロック、データ、ラッチなどの3つのピンを使用して、ICの8つの出力ピンを制御します。クロックはマイクロコントローラから連続的にパルスを供給するために使用され、データピンはそれぞれのクロック時間にどの出力をオンまたはオフにする必要があるかなどのデータを送信するために使用されます。
ピン配置:
ピン番号 |
ピン名 |
説明 |
1,2,3,4,5,6,7 |
出力ピン(Q1からQ7) |
74HC595には8つの出力ピンがあり、そのうち7つがこれらのピンです。それらはシリアルに制御できます |
8 |
接地 |
マイクロコントローラのアースに接続 |
9 |
(Q7)シリアル出力 |
このピンは、カスケードとして複数の74HC595を接続するために使用されます |
10 |
(MR)マスターリセット |
すべての出力をローにリセットします。通常の操作では、高く保持する必要があります |
11 |
(SH_CP)時計 |
これは、MCU / MPUからクロック信号を提供する必要があるクロックピンです。 |
12 |
(ST_CP)ラッチ |
ラッチピンは、データを出力ピンに更新するために使用されます。アクティブハイです |
13 |
(OE)出力イネーブル |
出力イネーブルは、出力をオフにするために使用されます。通常の操作では低く保持する必要があります |
14 |
(DS)シリアルデータ |
これはデータが送信されるピンであり、これに基づいて8つの出力が制御されます。 |
15 |
(Q0)出力 |
最初の出力ピン。 |
16 |
Vcc |
このピンはICに電力を供給し、通常+ 5Vが使用されます。 |
DS3231RTCモジュール
DS3231はRTCモジュールです。RTCはリアルタイムクロックの略です。このモジュールは、回路に電力が供給されていない場合でも、時刻と日付を記憶するために使用されます。外部電源がない状態でモジュールを実行するためのバッテリーバックアップCR2032があります。このモジュールには、温度センサーも含まれています。このモジュールは、温度インジケーター付きのデジタル時計の作成などの組み込みプロジェクトで使用できます。このモジュールを使用するいくつかの便利なプロジェクトを次に示します。
- Arduinoを使用した自動ペットフィーダー
- RTCモジュール(DS3231)とPICマイクロコントローラーのインターフェース:デジタル時計
- RTCモジュール(DS3231)とMSP430のインターフェース:デジタル時計
- DS3231モジュールを使用したESP32リアルタイムクロック
- AVRマイクロコントローラーAtmega16およびDS3231RTCを使用したPCB上のデジタルウォールクロック
DS3231のピン配置:
ピン名 |
使用する |
VCC |
電源のプラスに接続 |
GND |
アースに接続 |
SDA |
シリアルデータピン(I2C) |
SCL |
シリアルクロックピン(I2C) |
SQW |
方形波出力ピン |
32K |
32Kオシレーター出力 |
機能と仕様について:
- RTCは秒、分、時間、年をカウントします
- ±3ºCの精度のデジタル温度センサー
- エイジングトリムに登録する
- 400KhzI2Cインターフェース
- 低消費電力
- 2〜3年の寿命を持つCR2032バッテリーバックアップ
- 動作電圧:2.3〜5.5V
回路図
DS3231RTCとArduinoUNO間の回路接続:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
74HC595ICとArduinoUno間の回路接続:
74HC595 IC |
Arduino UNO |
11-SH_CP(SRCLK) |
6 |
12-ST_CP(RCLK) |
5 |
14-DS(データ) |
4 |
13-OE(ラッチ) |
GND |
8-GND |
GND |
10-MR(SRCLR) |
+ 5V |
16-VCC |
+ 5V |
IC74HC595と4桁の7セグメントとArduinoUNO間の回路接続:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
A |
Q0 |
- |
B |
Q1 |
- |
C |
Q2 |
- |
D |
Q3 |
- |
E |
Q4 |
- |
F |
Q5 |
- |
G |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
7セグメントディスプレイを多重化するためのArduinoUNOのプログラミング
完全なコードと作業ビデオは、このチュートリアルの最後に添付されています。プログラミングのセクションでは、RTCモジュールから24時間形式で時間(時と分)を取得し、それぞれの形式に変換して4桁の7セグメントディスプレイに表示する方法について説明します。
DS3231RTCモジュールをArduinoUNOとインターフェースするために、ArduinoUNOのI2Cバスが使用されます。と呼ばれるライブラリ
この概念では、時間と分は最初にRTCから取得され、0930(09:30 pm)のように結合され、次に個々の数字が千、百、十、単位のように分離され、個々の数字が0のようなバイナリ形式に変換されます。 63(0111111)に。このバイナリコードはシフトレジスタに送信され、次にシフトレジスタから7セグメントに送信され、7セグメントディスプレイに数字0が正常に表示されます。このようにして、4桁が多重化され、時と分が表示されます。
最初は、DS3231ライブラリやWireライブラリ(I2Cライブラリ)などの必要なライブラリが含まれています。
#include
ピンは7セグメント制御用に定義されています。これらのコントロールは、ディスプレイの多重化において重要な役割を果たします。
#defineラッチピン5 #define clockPin 6 #define dataPin 4 #define dot 2
変数は、RTCから取得した変換結果または生の結果を格納するように宣言されています。
int h; //時間 intm に対して宣言された変数; //変数は分int千で 宣言されています; int数百; int tens; intユニット; bool h24; ブールPM;
次に、クラスDS3231のオブジェクトがRTCとして宣言され、以降の行での使用が簡素化されます。
DS3231 RTC;
RTCモジュールはI2C通信を使用してArduinoとインターフェースします。そのため、他のI2Cモジュールがないため、wire.begin()を使用してRTCのデフォルトアドレスでI2C通信を開始します。
Wire.begin();
ピンモードが定義されているGPIO出力または入力として動作するかどうか、。
pinMode(9、OUTPUT); pinMode(10、OUTPUT); pinMode(11、OUTPUT); pinMode(12、OUTPUT); pinMode(latchPin、OUTPUT); pinMode(clockPin、OUTPUT); pinMode(dataPin、OUTPUT); pinMode(dot、OUTPUT);
ループは無限に実行され、RTCDS3231モジュールから時間と分で時間がかかります。「h24」は24時間フォーマット変数を示します。
int h = RTC.getHour(h24、PM); int m = RTC.getMinute();
次に、時と分が1つの数値として結合されます(たとえば、時が10で、分が60の場合、数値は10 * 100 = 1000 + 60 = 1060です)。
int番号= h * 100 + m;
番号からの個々の数字が得られる(例えば1060- 1千で、0 1第10であり、0が最後の桁であり、hunderedされます)。桁を区切るには、剰余演算子が使用されます。たとえば、1060で1を取得すると、1060/1000 = 1.06%10 = 1)になります。したがって、別々の数字は別々の変数に格納されます。
整数千=数/ 1000%10; 整数百=数/ 100%10; int tens = number / 10%10; int unit = number%10;
その後、個々の桁のswitch caseステートメントを定義して、それらをそれぞれの形式(バイナリ形式)に変換し、シフトレジスタを介して送信して7セグメントで表示します。たとえば(1桁の場合は06(0000 0110)に変更されます)。シフトで送信され、1桁が7セグメント(LOWの場合は0、HIGHの場合は1)で表示されます。
スイッチ(t) { ケース0: 単位= 63; ブレーク; ケース1: 単位= 06; ブレーク; ケース2: ユニット= 91; ブレーク; ケース3: ユニット= 79; ブレーク; ケース4: ユニット= 102; ブレーク; ケース5: ユニット= 109; ブレーク; ケース6: ユニット= 125; ケース7: 単位= 07; ブレーク; ケース8: 単位= 127; ブレーク; ケース9: ユニット= 103; ブレーク; }
次に、バイナリ形式の個々の桁が最初にMSBを使用して「シフトアウト」機能を介して送信され、それぞれの桁ピンがHIGHになり、ラッチピンがHIGHになります。
digitalWrite(9、LOW); digitalWrite(latchPin、LOW); shiftOut(dataPin、clockPin、MSBFIRST、千); digitalWrite(latchPin、HIGH); digitalWrite(9、HIGH); delay(5);
これで完全なコードが完成しました。関数の説明のほとんどは、コード行のすぐ横にあるコードコメントセクションに記載されています。クロックの周波数は、多重化の時間と品質のビューを決定します。つまり、低いクロックが使用されている場合はちらつきが見られますが、クロック速度が速い場合はそのようなちらつきはなく、安定した時間が見られます。 。
RTCモジュールにアクセスするには、I2Cバス電圧を維持する必要があることに注意してください。提案をするために、または疑問がある場合は、以下にコメントしてください。