- 필요한 구성 요소
- 4 자리 7 세그먼트 디스플레이
- 74HC595 시프트 레지스터 IC
- DS3231 RTC 모듈
- 회로도
- 7 세그먼트 디스플레이 멀티플렉싱을위한 Arduino UNO 프로그래밍
디지털 벽시계는 요즘 점점 더 인기를 얻고 있으며 시간, 분, 초 단위로 정확한 시간을 제공하고 값을 쉽게 읽을 수 있기 때문에 아날로그 시계보다 낫습니다. 일부 디지털 시계에는 온도, 습도 표시, 다중 알람 설정 등과 같은 많은 기능이 있습니다. 대부분의 디지털 시계는 7 세그먼트 디스플레이를 사용합니다.
우리는 이전에 7 세그먼트 디스플레이 또는 16x2 LCD를 사용하여 많은 디지털 시계 회로를 구축했습니다. 여기에서 AVR 기반 디지털 시계의 전체 PCB 설계를 확인할 수 있습니다. 이 튜토리얼은 Arduino UNO를 사용하여 4-7 세그먼트 디스플레이를 다중화 하고 시간을 HH: MM 형식으로 표시하여 디지털 시계를 만드는 방법에 대해 설명 합니다.
필요한 구성 요소
- 4 자리 7 세그먼트 디스플레이
- 74HC595 IC
- DS3231 RTC 모듈
- Arduino UNO
- 브레드 보드
- 전선 연결
4 자리 7 세그먼트 디스플레이
4 자리 7 세그먼트 디스플레이에는 4 개의 7 세그먼트 디스플레이가 결합되어 있거나 함께 다중화되었다고 말할 수 있습니다. 숫자 값과 소수와 콜론이있는 일부 알파벳을 표시하는 데 사용됩니다. 디스플레이는 양방향으로 사용할 수 있습니다. 4 자리 숫자는 디지털 시계를 만들거나 0에서 9999까지 숫자를 세는 데 유용합니다. 아래는 4 자리 7 세그먼트 디스플레이의 내부 다이어그램입니다.
각 세그먼트에는 개별 LED 제어 기능이있는 하나의 LED가 있습니다. Common Anode 및 Common Cathode와 같은 두 가지 유형의 7 개 세그먼트 디스플레이가 있습니다. 위의 이미지는 일반적인 양극 유형 7 세그먼트 디스플레이를 보여줍니다.
공통 양극
공통 양극에서는 8 개 LED의 모든 양극 단자 (양극)가 COM으로 명명 된 함께 연결됩니다. 그리고 모든 음극 단자는 그대로 두거나 마이크로 컨트롤러 핀에 연결됩니다. 마이크로 컨트롤러를 사용하여 로직 LOW가 특정 LED 세그먼트를 비추도록 설정되고 로직 High를 설정하여 LED를 끄는 경우.
공통 음극
Common Cathode에서는 8 개 LED의 모든 음극 단자 (음극)가 COM이라는 이름으로 함께 연결됩니다. 그리고 모든 양극 단자는 그대로 두거나 마이크로 컨트롤러 핀에 연결됩니다. 마이크로 컨트롤러를 사용하여 로직을 HIGH로 설정하면 LED가 켜지고 LOW를 설정하면 LED가 꺼집니다.
여기에서 7 세그먼트 디스플레이에 대해 자세히 알아보고 다른 마이크로 컨트롤러와 어떻게 인터페이스 할 수 있는지 확인하십시오.
- Arduino와 인터페이스하는 7 세그먼트 디스플레이
- Raspberry Pi와 인터페이스하는 7 세그먼트 디스플레이
- ARM7-LPC2148과 7 세그먼트 디스플레이 인터페이스
- PIC 마이크로 컨트롤러와 인터페이싱하는 7 세그먼트 디스플레이
- 8051 마이크로 컨트롤러와 인터페이싱하는 7 세그먼트 디스플레이
74HC595 시프트 레지스터 IC
IC 74HC595은 또한 8 비트 직렬로 알려진 - 병렬 OUT 시프트 레지스터. 이 IC는 직렬로 데이터 입력을 수신하고 8 개의 출력 핀을 병렬로 제어 할 수 있습니다. 이것은 마이크로 컨트롤러에서 사용되는 핀을 줄이는 데 유용합니다. 74HC595 시프트 레지스터 관련 프로젝트는 모두 여기에서 찾을 수 있습니다.
74HC595 IC의 작동:
이 IC는 클럭, 데이터 및 래치와 같은 세 개의 핀을 마이크로 컨트롤러와 함께 사용하여 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) 출력 활성화 |
Output Enable은 출력을 끄는 데 사용됩니다. 정상 작동을 위해 낮게 유지해야합니다. |
14 |
(DS) 시리얼 데이터 |
8 개의 출력이 제어되는 데이터가 전송되는 핀입니다. |
15 |
(Q0) 출력 |
첫 번째 출력 핀. |
16 |
Vcc |
이 핀은 IC에 전원을 공급하며 일반적으로 + 5V가 사용됩니다. |
DS3231 RTC 모듈
DS3231은 RTC 모듈 입니다. RTC는 Real Time Clock을 의미합니다. 이 모듈은 회로에 전원이 공급되지 않는 경우에도 시간과 날짜를 기억하는 데 사용됩니다. 외부 전원없이 모듈을 실행하기위한 배터리 백업 CR2032가 있습니다. 이 모듈에는 온도 센서도 포함되어 있습니다. 이 모듈은 온도 표시기가있는 디지털 시계를 만드는 것과 같은 임베디드 프로젝트에서 사용할 수 있습니다. 다음은이를 사용하는 몇 가지 유용한 프로젝트입니다.
- Arduino를 이용한 자동 애완 동물 공급기
- PIC 마이크로 컨트롤러와 RTC 모듈 (DS3231) 인터페이스: 디지털 시계
- MSP430과 RTC 모듈 (DS3231) 인터페이스: 디지털 시계
- DS3231 모듈을 사용하는 ESP32 실시간 클록
- AVR 마이크로 컨트롤러 Atmega16 및 DS3231 RTC를 사용하는 PCB의 디지털 벽시계
DS3231의 핀아웃:
핀 이름 |
사용하다 |
VCC |
전원의 양극에 연결 |
GND |
지상에 연결 |
SDA |
직렬 데이터 핀 (I2C) |
SCL |
직렬 클록 핀 (I2C) |
SQW |
구형파 출력 핀 |
32K |
32K 발진기 출력 |
기능 및 사양:
- RTC는 초, 분, 시간 및 년을 계산합니다.
- ± 3ºC 정확도의 디지털 온도 센서
- 에이징 트림 등록
- 400Khz I2C 인터페이스
- 저전력 소비
- 2 ~ 3 년 수명의 CR2032 배터리 백업
- 작동 전압: 2.3 ~ 5.5V
회로도
DS3231 RTC 및 Arduino UNO 간의 회로 연결:
DS3231 |
Arduino UNO |
VCC |
5V |
GND |
GND |
SDA |
A4 |
SCL |
A4 |
74HC595 IC와 Arduino Uno 간의 회로 연결:
74HC595 IC |
Arduino UNO |
11-SH_CP (SRCLK) |
6 |
12-ST_CP (RCLK) |
5 |
14-DS (데이터) |
4 |
13-OE (래치) |
GND |
8GND |
GND |
10-MR (SRCLR) |
+ 5V |
16-VCC |
+ 5V |
IC 74HC595 및 4-Digit Seven Segment 및 Arduino UNO 간의 회로 연결:
4-DigitSevenSegment |
IC 74HC595 |
Arduino UNO |
ㅏ |
Q0 |
- |
비 |
Q1 |
- |
씨 |
Q2 |
- |
디 |
Q3 |
- |
이자형 |
4 분기 |
- |
에프 |
Q5 |
- |
지 |
Q6 |
- |
D1 |
- |
10 |
D2 |
- |
11 |
D3 |
- |
12 |
D4 |
- |
9 |
7 세그먼트 디스플레이 멀티플렉싱을위한 Arduino UNO 프로그래밍
이 튜토리얼의 끝에 완전한 코드와 작동하는 비디오 가 첨부되어 있습니다. 프로그래밍 섹션에서는 24 시간 형식으로 RTC 모듈에서 시간 (시 및 분)을 가져 와서 4 자리 7 세그먼트 디스플레이에 표시하기 위해 각 형식으로 변환하는 방법에 대해 설명합니다.
DS3231 RTC 모듈을 Arduino UNO와 인터페이스하기 위해 Arduino UNO의 I2C 버스가 사용됩니다. 라는 도서관
이 개념에서 시간과 분은 RTC에서 먼저 취해 져서 0930 (오후 9시 30 분)처럼 합쳐진 다음 개별 자릿수는 천, 백, 십, 단위와 같이 분리되고 개별 자릿수는 0과 같은 이진 형식으로 변환됩니다. 63 (0111111)으로. 이 바이너리 코드는 시프트 레지스터 로 전송 된 다음 시프트 레지스터에서 7 세그먼트로 전송되어 7 세그먼트 디스플레이에 Digit 0을 성공적으로 표시합니다. 이렇게하면 4 자리 숫자가 다중화되고시와 분이 표시됩니다.
처음에는 DS3231 라이브러리, 와이어 라이브러리 (I2C 라이브러리) 등 필요한 라이브러리 가 포함되어 있습니다.
#포함
핀은 7 개의 세그먼트 제어에 대해 정의됩니다. 이러한 컨트롤은 디스플레이 를 다중화하는 데 중요한 역할을 합니다.
#define latchPin 5 #define clockPin 6 #define dataPin 4 #define 도트 2
변수는 RTC에서 가져온 변환 된 결과 또는 원시 결과를 저장하도록 선언됩니다.
int h; // 시간에 대해 선언 된 변수 int m; // 분 단위로 선언 된 변수 int 수천; int 수백; 정수 십; int 단위; bool h24; bool PM;
다음으로 DS3231 클래스에 대한 개체는 추가 라인에서 사용을 단순화하기 위해 RTC로 선언됩니다.
DS3231 RTC;
RTC 모듈은 I2C 통신을 사용하여 Arduino와 인터페이스됩니다. 따라서 wire.begin ()은 다른 I2C 모듈이 없기 때문에 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 (점, 출력);
루프는 무한히 실행되며 RTC DS3231 모듈에서 시간과 분이 걸립니다. 'h24'는 24 시간 형식 변수를 나타냅니다.
int h = RTC.getHour (h24, PM); int m = RTC.getMinute ();
그런 다음 시간과 분이 하나의 숫자로 결합됩니다 (예: 시간이 10이고 분이 60이면 숫자는 10 * 100 = 1000 + 60 = 1060).
정수 = h * 100 + m;
번호 개별 숫자를 얻을 수있다 (도 1 열째이고, 0은 마지막 숫자이며, 0 hundered되어 1060- 1 천명 예를에게). 숫자를 구분하기 위해 모듈러스 연산자가 사용됩니다. 예를 들어 1060에서 1을 얻으려면 1060 / 1000 = 1.06 % 10 = 1). 따라서 별도의 숫자가 별도의 변수에 저장됩니다.
int 수천 = 숫자 / 1000 % 10; int 수백 = 숫자 / 100 % 10; 정수 십 = 숫자 / 10 % 10; int 단위 = 숫자 % 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와 함께 'shiftout'기능을 통해 먼저 전송되고 해당 숫자 핀이 HIGH가되고 래치 핀이 HIGH가됩니다.
digitalWrite (9, LOW); digitalWrite (latchPin, LOW); shiftOut (dataPin, clockPin, MSBFIRST, 수천); digitalWrite (latchPin, HIGH); digitalWrite (9, HIGH); 지연 (5);
이것으로 완전한 코드가 완성됩니다. 대부분의 기능 설명은 코드 라인 바로 옆의 코드 주석 섹션에 제공됩니다. 클럭의 주파수에 따라 멀티플렉싱의 시간과 품질이 결정됩니다. 즉, 로우 클럭을 사용하면 클럭 속도가 빠르면 깜박임이없고 일정한 시간을 볼 수있는 곳에서 깜박임을 알 수 있습니다..
RTC 모듈에 액세스하려면 I2C 버스 전압을 유지해야합니다. 제안 사항을 제공하거나 의심스러운 점이 있으면 아래에 의견을 말하십시오.