Giao Tiếp Module Thời Gian Thực DS1307 Với Arduino - Điện Tử Việt
Có thể bạn quan tâm
- Đăng nhập/Đăng ký
- Ứng dụng
- Arduino
Trong bài viết này, chúng ta sẽ tìm hiểu về đồng hồ thời gian thực (RTC – Real Time Clock) và cách giao tiếp Arduino với module thời gian thực DS1307.
Đồng hồ thời gian thực hay RTC (Real Time Clock) là một thiết bị định thời gian, thường được chế tạo dưới dạng IC. IC RTC chạy bằng pin và theo dõi thời gian hiện tại ngay cả khi không có điện.
IC đồng hồ thời gian thực có mặt trong máy tính, máy chủ (server), các hệ thống nhúng và trên thực tế, chúng được sử dụng ở bất cứ đâu, những nơi cần thông tin thời gian chính xác.
Tại sao chúng ta cần đồng hồ thời gian thực (RTC)?
Mặc dù Arduino và hầu hết tất cả các bộ vi điều khiển đều có bộ định thời (timer) và bộ định thời gian (hàm millis () trong trường hợp Arduino) nhưng 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. Sau khi tắt nguồn (theo cách thủ công hoặc do mất điện), tất cả bộ định giờ được reset về 0.
Mặc dù việc định thời gian bằng bộ định thời tích hợp sẵn được chấp nhận cho các ứng dụng đơn giản, nhưng một số trường hợp khác chúng ta cần một giải pháp thay thế trong các ứng dụng như bộ ghi dữ liệu, đồng hồ, báo thức, v.v.. trong đó bộ đếm thời gian chạy độc lập bất kể nguồn điện bên ngoài hoặc nếu bộ vi điều khiển (hoặc Arduino) được lập trình lại.
Khi nói đến việc sử dụng IC thời gian thực. Hầu hết tất cả các IC RTC đều là các thiết bị dòng điện thấp chạy trong nhiều năm trên một pin lithium duy nhất (thường là CR2032). Một trong những IC RTC phổ biến 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 gian thực (RTC) DS1307 có 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ị đã bị tắt (ngắt điện ngoài). Giao tiếp với vi điều khiển thông qua chuẩn I2C, và đóng vai trò là slave khi kết nối đến bus I2C này. Có thể đếm thời gian theo định dạng 24 giờ hoặc 12 giờ với chỉ thị AM/PM. Ngoài ra bên trong chíp có bộ dò phát hiện mất nguồn và tự động chuyển sang sử dụng nguồn pin dự phòng. Một số tính năng nổi bật của IC RTC DS1307 được đề cập dưới đây.
- Lưu trữ và cung cấp 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 đến năm 2100.
- Tiêu thụ điện năng thấp: dòng tiêu thụ dưới 500nA khi hoạt động bằng pin.
- Tự động chuyển sang nguồn pin trong trường hợp mất điện.
- Đồng hồ 24 giờ hoặc 12 giờ với chỉ báo AM/PM.
- Sử dụng chuẩn giao tiếp I2C.
Download datasheet DS1307 tại đây.
RTC DS1307 có sẵn dưới dạng module, bao gồm tất cả các thành phần cần thiết như pin, đầu nối, điện trở kéo lên và tinh thể thạch anh. Một module như vậy được sử dụng trong bài hướng dẫn này và được hiển thị bên dưới.
Sơ đồ chân DS1307
Hình ảnh sau đây cho thấy hình dạng và sơ đồ chân của IC RTC DS1307. Để giảm công suất tiêu thụ, số lượng chân trên IC phải giảm. Do đó, DS1307 RTC sử dụng Giao tiếp I2C.
Xem thêm bài viết: Giới thiệu chuẩn giao tiếp I2C
Chân | Tên | Chức năng |
1 | X1 | Đây là các chân kết nối với thạch anh tần số 32.768 KHz để kích hoạt bộ dao động nội. |
2 | X2 | |
3 | VBAT | Chân này được kết với cực dương pin Lithium 3V để cấp nguồn nuôi dự phòng |
4 | GND | Chân nối đất |
5 | SDA | Chân dữ liệu nối tiếp (Serial Data). Đây là chân dữ liệu vào/ra của giao thức I2C. Chân này cần đưa lên nguồn 5V thông qua điện trở 10kΩ |
6 | SCL | Chân đầu vào xung đồng hồ 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 phải được kéo đến 5V thông qua một điện trở 10kΩ. |
7 | SQW/OUT | Ngõ xuất ra xung vuông, tần số có thể lập trình để thay đổi từ 1Hz, 4Khz, 8Khz, 32Khz. Nếu không được sử dụng, chân này có thể được thả nổi. |
8 | VCC | Chân cấp nguồn chính, khoảng 5VDC. Nếu VCC không có mà VBAT có thì DS1307 vẫn hoạt động bình thường nhưng không ghi và đọc được dữ liệu. |
Giao tiếp Arduino với DS1307
Linh kiện cần thiết
STT | Tên linh kiện | Số lượng |
1 | Arduino Uno | 1 |
2 | Module RTC DS1307 | 1 |
3 | LCD 16×2 | 1 |
4 | Breadboard | 1 |
5 | Dây cắm breadboard | |
6 | Nguồn cấp điện |
Chúng ta đã tìm hiểu một chút về IC thời gian thực DS1307. Bây giờ, chúng ta sẽ tiến hành với giao tiếp Arduino với IC thời gian thực. Như đã đề cập trước đó, module DS1307 RTC sử dụng giao tiếp I2C.
Trong mạch giao tiếp này, vi điều khiển Arduino luôn hoạt động như Master và DS1307 hoạt động như Slave. Master trong giao tiếp I2C, tức là Arduino trong trường hợp này, chịu trách nhiệm về tín hiệu đồng hồ, truy cập bus, các tín hiệu start và stop.
Sơ đồ nguyên lý
Hình ảnh sau đây cho thấy sơ đồ mạch giao tiếp giữa IC thời gian thực DS1307 và Arduino. Mạch này cho thấy các kết nối cơ bản liên quan đến module DS1307 (một board mạch chứa IC DS1307 cùng với thạch anh, pin, điện trở kéo lên, ..).
Để hiểu rõ hơn về module DS1307 RTC, hình ảnh sau đây sẽ giúp bạn vì nó chứa mạch của module thời gian thực DS1307 điển hình.
Hoạt động của mạch
Một ứng dụng đơn giản trong đó Arduino UNO được giao tiếp với module thời gian thực DS1307 để hiển thị ngày giờ lên màn hình LCD. Trong ứng dụng này, chúng ta sẽ lập trình cho DS1307 RTC với ngày giờ hiện tại và xem liệu nó có thực sự giữ dữ liệu đó hay không ngay cả khi nguồn cung cấp cho Arduino bị loại bỏ.
Một thư viện đặc biệt được gọi là “RTClib” được sử dụng trong chương trình. Các bạn có thể tải xuống từ liên kết này. Đảm bảo rằng thư viện được tải xuống trước và được thêm vào cơ sở dữ liệu thư viện Arduino.
Để nạp dữ liệu và thời gian vào IC DS1307 RTC, chúng ta sẽ sử dụng một tính năng có sẵn trong thư viện RTClib, nơi Arduino sẽ tải ngày và giờ từ máy tính lên ngay khi chương trình được nạp vào.
Chương trình
// Chương trình hiển thị thời gian thực trên LCD dùng module RTC DS1307
#include <Wire.h>
#include <LiquidCrystal.h>
#include “RTClib.h”
RTC_DS1307 rtc;
LiquidCrystal lcd(7, 6, 5, 4, 3, 2); // (rs, e, d4, d5, d6, d7)
char daysOfTheWeek[7][12] = {“Sun”, “Mon”, “Tue”, “Wed”, “Thu”, “Fri”, “Sat”};
void setup ()
{
Serial.begin(9600);
lcd.begin(16, 2);
if (! rtc.begin())
{
lcd.print(“Khong the tim thay RTC”);
while (1);
}
if (! rtc.isrunning())
{
lcd.print(“RTC khong hoat dong!”);
}
rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
//rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}
void loop ()
{
DateTime now = rtc.now();
lcd.setCursor(0, 1);
lcd.print(now.hour());
lcd.print(‘:’);
lcd.print(now.minute());
lcd.print(‘:’);
lcd.print(now.second());
lcd.print(” “);
lcd.setCursor(0, 0);
lcd.print(daysOfTheWeek[now.dayOfTheWeek()]);
lcd.print(” ,”);
lcd.print(now.day());
lcd.print(‘/’);
lcd.print(now.month());
lcd.print(‘/’);
lcd.print(now.year());
}
Ứng dụng
Với sự trợ giúp của giao tiếp đồng hồ thời gian thực và Arduino, chúng ta có thể thực hiện một số ứng dụng liên quan đến ghi dữ liệu, báo thức, đồng hồ, v.v.Vì module RTC DS1307 được hỗ trợ cấp nguồn bằng pin nên nó sẽ tiếp tục duy trì thời gian ngay cả trong trường hợp mất điện.
BÀI VIẾT LIÊN QUANXEM THÊM
Cân điện tử dùng Arduino và module HX711
Mạch khóa số điện tử dùng Arduino
Giao tiếp module điều khiển động cơ L298 với Arduino Uno
BÌNH LUẬN Hủy trả lời
Vui lòng nhập bình luận của bạn Vui lòng nhập tên của bạn ở đây Bạn đã nhập một địa chỉ email không chính xác! Vui lòng nhập địa chỉ email của bạn ở đâyLưu tên, email và trang web của tôi trong trình duyệt này cho lần tiếp theo tôi nhận xét.
VPS TỐT NHẤT
Chào các bạn! Website này được tạo ra nhằm mục đích chia sẽ miễn phí những kiến thức liên quan đến lĩnh vực điện tử và IoT. Tôi rất mong nhận được những ý kiến đóng góp của bạn đọc để website ngày càng phát triển và được nhiều người biết đến. Cảm ơn sự quan tâm của các bạn.Liên hệ chúng tôi: [email protected]BÀI VIẾT GẦN ĐÂY
- Giao tiếp module điều khiển động cơ bước TMC2208 với Arduino
- Giới thiệu IC 74LS192 – Hoạt động và ứng dụng
- Giới thiệu IC 74LS76 – Ứng dụng và hoạt động
- Top 5 xu hướng công nghệ hàng đầu năm 2023
- Download phần mềm Fritzing
KÊNH ĐIỆN TỬ VIỆT
© Bản quyền thuộc về Điện Tử ViệtTừ khóa » Tìm Hiểu Về Ds1307
-
Đồng Hồ Thời Gian Thực DS1307
-
Chức Năng Và Hoạt động Của RTC DS1307
-
TIỂU LUẬN "TÌM HIỂU RTC DS1307" Docx - Tài Liệu Text - 123doc
-
Đồng Hồ Thời Gian Thực (Read Time Clock - DS1307) Sử Dụng Arduino
-
[PDF] ỨNG DỤNG DS1307 XÂY DỰNG HỆ THỐNG THỜI GIAN THỰC
-
[HỌC AVR] BÀI 7: GIAO TIẾP IC THỜI GIAN THỰC DS1307
-
Ds1307 Là Gì - Hiển Thị Thời Gian Thực (Rtc) Lên Lcd
-
Ds1307 Là Gì - Chức Năng Và Hoạt Động Của Rtc Ds1307
-
DS1307 – Real Time Clock I2C (RTC) - Blog Mecsu
-
RTC DS1307 - Mô Tả Pin, Tính Năng & Hoạt động Của DS1307
-
Mạch Thời Gian Thực RTC DS1307
-
DS1307 | #9_STM32 Và Ngoại Vi - Kỹ Sư Nghèo
-
[PDF] IC Thời Gian Thực (RTC) DS1307 Có Thể đếm Giờ, Phú
-
Ic Thời Gian Thực Ds1307