Đồng hồ thời gian thực ds1307 arduino hiển thị thời gian thực (rtc) lên lcd 16×2

-

Trong nội dung bài viết này, họ sẽ tò mò về đồng hồ thời trang thời gian thực (RTC – Real Time Clock) và cách giao tiếp Arduino cùng với module thời hạn thực DS1307.

Bạn đang xem: Đồng hồ thời gian thực ds1307 arduino

Đồng hồ thời gian thực giỏi RTC (Real Time Clock) là một trong những thiết bị định thời gian, thường xuyên được sản xuất dưới dạng IC. IC RTC chạy bởi pin và theo dõi thời gian hiện tại trong cả khi không tồn tại điện.

IC đồng hồ thời gian thực xuất hiện trong thứ tính, sever (server), các khối hệ thống nhúng và trên thực tế, chúng được sử dụng ở bất cứ đâu, hồ hết nơi buộc phải thông tin thời gian chính xác.


Nội dung bài bác viết

Giới thiệu IC thời gian thực DS1307Giao tiếp Arduino cùng với DS1307

Tại sao chúng ta cần đồng hồ thời trang thời gian thực (RTC)?

Mặc dù Arduino và hầu như tất cả các bộ vi điều khiển đều phải có bộ định thời (timer) và cỗ định thời gian (hàm millis () trong trường hòa hợp Arduino) dẫu vậy chúng phụ thuộc vào nguồn điện, tức là chúng chỉ hoạt động khi có nguồn cung cấp cấp. Sau khoản thời gian tắt mối cung cấp (theo cách thủ công hoặc bởi mất điện), toàn bộ bộ định giờ đồng hồ được reset về 0.

Mặc dù bài toán định thời hạn bằng cỗ định thời tích hòa hợp sẵn được gật đầu cho các ứng dụng solo giản, nhưng một vài trường thích hợp khác chúng ta cần một chiến thuật thay thế trong số ứng dụng như bộ ghi dữ liệu, đồng hồ, báo thức, v.v.. Trong số đó bộ đếm thời hạn chạy hòa bình bất kể nguồn điện bên ngoài hoặc nếu bộ vi tinh chỉnh và điều khiển (hoặc Arduino) được xây dựng lại.

Khi nói tới việc thực hiện IC thời hạn thực. Hầu hết tất cả những IC RTC những là những thiết bị chiếc điện tốt chạy trong nhiều năm bên trên một pin sạc lithium độc nhất (thường là CR2032). Trong những IC RTC thông dụng và được sử dụng phổ biến nhất là DS1307.

Giới thiệu IC thời gian thực DS1307

IC thời hạn thực (RTC) DS1307 gồm chức năng cung cấp thông tin thời gian hiện tại (thời gian thực): giờ, phút, giây, thứ, ngày tháng, năm một cách chính xác ngay cả khi thiết bị đã trở nên tắt (ngắt năng lượng điện ngoài). Giao tiếp với vi điều khiển thông qua chuẩn I2C, và đóng mục đích là slave khi liên kết đến bus I2C này. Hoàn toàn có thể đếm thời gian theo định hình 24 tiếng hoặc 12 giờ với thông tư AM/PM. Trong khi bên vào chíp bao gồm bộ dò phát hiện tại mất mối cung cấp và auto chuyển sang thực hiện nguồn sạc dự phòng. Một số trong những tính năng trông rất nổi bật của IC RTC DS1307 được nhắc dưới đây.

Lưu trữ và hỗ trợ các thông tin thời gian thực:ngày, tháng, năm, giờ, phút, giây,…Khả năng thiết lập ngày mang đến năm 2100.Tiêu thụ năng lượng điện năng thấp: dòng tiêu thụ dưới 500n
A khi chuyển động bằng pin.Tự động chuyển sang mối cung cấp pin vào trường thích hợp mất điện.Đồng hồ 24 tiếng hoặc 12 giờ với chỉ báo AM/PM.Sử dụng chuẩn chỉnh giao tiếp I2C.

Download datasheet DS1307 tại đây.

RTC DS1307 gồm sẵn bên dưới dạng module, bao hàm tất cả các thành phần cần thiết như pin, đầu nối, năng lượng điện trở kéo lên và tinh thể thạch anh. Một module bởi vậy được thực hiện trong bài xích hướng dẫn này với được hiển thị bên dưới.

*

ChânTênChức năng
1X1Đây là các chân kết nối với thạch anh tần số 32.768 KHz nhằm kích hoạt bộ xê dịch nội.
2X2
3VBATChân này được kết với cực dương sạc Lithium 3V để cung cấp nguồn nuôi dự phòng
4GNDChân nối đất
5SDAChân dữ liệu thông suốt (Serial Data). Đây là chân dữ liệu vào/ra của giao thức I2C. Chân này phải đưa lên nguồn 5V trải qua điện trở 10kΩ
6SCLChân đầu vào xung đồng hồ thời trang nối tiếp (Serial Clock). Đây là chân ngõ vào xung nhịp của giao thức I2C. Chân này cũng bắt buộc được kéo cho 5V thông sang một điện trở 10kΩ.
7SQW/OUTNgõ xuất ra xung vuông, tần số hoàn toàn có thể lập trình để thay đổi từ 1Hz, 4Khz, 8Khz, 32Khz. Nếu như không được sử dụng, chân này có thể được thả nổi.
8VCCChân cấp cho nguồn chính, khoảng tầm 5VDC. Nếu VCC không tồn tại mà VBAT có thì DS1307 vẫn hoạt động bình thường nhưng không ghi với đọc được dữ liệu.

Giao tiếp Arduino với DS1307

Linh kiện cần thiết
STTTên linh kiệnSố lượng
1Arduino Uno1
2Module RTC DS13071
3LCD 16×21
4Breadboard1
5Dây cắm breadboard
6Nguồn cấp cho điện

Chúng ta đã tò mò một chút về IC thời hạn thực DS1307. Bây giờ, bọn họ sẽ triển khai với tiếp xúc Arduino với IC thời hạn thực. Như sẽ đề cập trước đó, module DS1307 RTC sử dụng tiếp xúc I2C.

Trong mạch giao tiếp này, vi tinh chỉnh và điều khiển Arduino luôn chuyển động như Master cùng DS1307 hoạt động như Slave. Master trong tiếp xúc I2C, có nghĩa là Arduino trong trường thích hợp này, phụ trách về biểu đạt đồng hồ, truy cập bus, các tín hiệu start với stop.

Sơ đồ dùng nguyên lý

Hình ảnh sau đây cho thấy thêm sơ thứ mạch tiếp xúc giữa IC thời gian thực DS1307 với Arduino. Mạch này cho thấy các kết nối cơ bạn dạng liên quan đến module DS1307 (một board mạch chứa IC DS1307 cùng rất thạch anh, pin, năng lượng điện trở kéo lên, ..).

*

Hoạt động của mạch

Một ứng dụng đơn giản và dễ dàng trong đó Arduino UNO được giao tiếp với module thời hạn thực DS1307 nhằm hiển thị thời giờ lên màn hình LCD. Trong vận dụng này, họ sẽ lập trình mang đến DS1307 RTC với ngày giờ bây giờ và xem liệu nó có thực sự giữ tài liệu đó hay không ngay cả lúc nguồn cung cấp cho Arduino bị loại bỏ bỏ.

Một thư viện quan trọng được hotline là “RTClib” được áp dụng trong chương trình. Các bạn có thể tải xuống từ link này. Đảm nói rằng thư viện được tải xuống trước cùng được cung cấp cơ sở dữ liệu thư viện Arduino.

Xem thêm: Exciter 155 vva 2021 độ - đồ chơi xe exciter 155 vva

Để nạp dữ liệu và thời hạn vào IC DS1307 RTC, họ sẽ áp dụng một tài năng có sẵn trong tủ sách RTClib, vị trí Arduino sẽ tải ngày cùng giờ từ laptop lên ngay trong lúc chương trình được nạp vào.

Chương trình

// công tác hiển thị thời gian thực bên trên LCD dùng module RTC DS1307

#include

#include

#include “RTClib.h”

RTC_DS1307 rtc;

Liquid
Crystal lcd(7, 6, 5, 4, 3, 2); // (rs, e, d4, d5, d6, d7)

char days
Of
The
Week<7><12> = “Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”;

void cài đặt ()

Serial.begin(9600);

lcd.begin(16, 2);

if (! rtc.begin())

lcd.print(“Khong the tim nắm RTC”);

while (1);

if (! rtc.isrunning())

lcd.print(“RTC khong hoat dong!”);

rtc.adjust(Date
Time(F(__DATE__), F(__TIME__)));

//rtc.adjust(Date
Time(2014, 1, 21, 3, 0, 0));

void loop ()

Date
Time now = rtc.now();

lcd.set
Cursor(0, 1);

lcd.print(now.hour());

lcd.print(‘:’);

lcd.print(now.minute());

lcd.print(‘:’);

lcd.print(now.second());

lcd.print(” “);

lcd.set
Cursor(0, 0);

lcd.print(days
Of
The
WeekOf
The
Week()>);

lcd.print(” ,”);

lcd.print(now.day());

lcd.print(‘/’);

lcd.print(now.month());

lcd.print(‘/’);

lcd.print(now.year());

Ứng dụng

Với sự giúp đỡ của giao tiếp đồng hồ thời trang thời gian thực với Arduino, chúng ta có thể thực hiện một trong những ứng dụng tương quan đến ghi dữ liệu, báo thức, đồng hồ, v.v.Vì module RTC DS1307 được cung cấp cấp nguồn bởi pin nên nó sẽ tiếp tục bảo trì thời gian trong cả trong trường hợp mất điện.

Kết nối phần cứng hiển thị thời hạn thực lên LCD16x2 sử dụng module RTC DS1307

RTC là viết tắt của trường đoản cú “Real Time Clock” – đồng hồ thời gian thực. Tính năng của nó là gì? Nó giúp họ theo dõi thời hạn hiện trên (thời gian thực) với độ chính xác cao ngay cả khi thiết bị đã trở nên tắt (ngắt năng lượng điện ngoài). RTC được áp dụng nhiều trong các thiết bị điện tử, bao hàm máy tính, điện thoại cảm ứng thông minh thông minh, v.v. RTC theo dõi thời gian bằng bộ xấp xỉ tinh thể – thạch anh, thường sẽ có tần số 32.768 k
Hz.Ưu điểm của RTC bao gồm:

Dễ dàng mua đặt
Tiêu thụ năng lượng điện năng tốt (sử dụng sạc CR2032 lên đến mức 1 năm)Thời gian bao gồm xácReal Time Clock DS1307(RTC)

Module DS1307 là một trong những module RTC giá thành phải chăng cùng được sử dụng phổ biến nhất. Nó hoàn toàn có thể theo dõi đúng mực giây, phút, giờ, ngày, tháng cùng năm.

Một số tính năng quan trọng củaDS1307là:

Khả năng tạo sóng vuông rất có thể lập trình.Dòng năng lượng điện thấp, bên dưới 500m
A trong chế độ sao lưu giữ pin.Khả năng cấu hình thiết lập ngày mang đến năm 2100.Sử dụng chuẩn giao tiếp
I2C.

Module DS1307 áp dụng pin CR2023 3 volt. Bộ ghi nhớ EEPROM 24c32 nhúng bên trên mô-đun này có thể tiết kiệm 32Kb dữ liệu. 

Màn hình LCD 16×2 thực hiện module I2CArduino UNO R3
GNDGND
VCC5V
SDAA4/SDA
SCLA5/SCL
Module RTC DS1307
GNDGND
VCC5V
SDAA4/SDA
SCLA5/SCL
*

Code chương trình

Thư viện bắt buộc dùng:+ Thư viện cung cấp sử dụng module RTC DS1307+ Thư viện cung cấp sử dụng màn hình hiển thị LCD I2C

Code mẫu:

#include #include #include "RTClib.h"RTC_DS1307 rtc;Liquid
Crystal_I2C lcd(0x3F,16,2);char days
Of
The
Week<7><12> = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat";void setup () Serial.begin(9600); lcd.init(); lcd.backlight(); if (! rtc.begin()) lcd.print("Couldn"t find RTC"); while (1); if (! rtc.isrunning()) lcd.print("RTC is NOT running!"); rtc.adjust(Date
Time(F(__DATE__), F(__TIME__)));//auto update from computer time //rtc.adjust(Date
Time(2014, 1, 21, 3, 0, 0));// to lớn set the time manualy void loop () { Date
Time now = rtc.now(); lcd.set
Cursor(4, 1); if(now.hour()Giải thíchRTC_DS1307 rtc;char days
Of
The
Week<7><12> = "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat";Ban đầu họ tạo một đối tượng người dùng của tủ sách RTClib làrtcvà khẳng định mảng ký tựdays
Of
The
Week
để lưu lại trữ thông tin ngày trong tuần.

Hàm rtc.begin() vàrtc.isrunning()

Hàm rtc.begin() là hàm khởi chế tạo để bảo vệ module RTC được kết nối.

Hàm rtc.isrunning() là hàm đọc những thanh ghibên trong I2C của DS1307để chất vấn xem chip gồm trả về thời hạn hay không.

Nếu hàm trả về giá trị False thìđặt lại thời gian.

Hàm rtc.adjust()

Hàmrtc.adjust() là hàm đặt ngày cùng giờ.

Chúng ta gồm 2 bí quyết đặt ngày giờ:

Date
Time(F(__DATE__), F(__TIME__)) bí quyết này bọn họ cập nhật thời gian tự động từ vật dụng tính.Date
Time(YYY, M, D, H, M, s) bí quyết này chúng ta thiết lập giờ đồng hồ thủ công.Date
Time(2019, 5, 12, 14, 07, 00).

Một số hàm khác:
Hàmrtc.now()Trả về ngày & giờ hiện nay tại.Giá trị trả về của nó thường được tàng trữ trong biến của kiểu dữ liệu Date
Time.
Hàmyear()Trả về năm hiện tại.
Hàmmonth()Trả về tháng hiện tại.
Hàmday()Trả về ngày hiện tại tại.
Hàmdays
Of
The
Week()
Trả về ngày hiện tại trong tuần.
Hàmhour()Trả về giờ hiện nay tại.
Hàmminute()Trả về phút hiện tại tại.
Hàmsecond()Trả về giây hiện tại tại.

Tham khảo: https://arduinokit.vn/