Mục lục:
- Bước 1: Kết nối Mô-đun của bạn với Arduino
- Bước 2: Đọc và ghi thời gian từ mô-đun RTC của bạn
- Bước 3:
Video: Sử dụng mô-đun đồng hồ thời gian thực DS1307 và DS3231 với Arduino: 3 bước
2024 Tác giả: John Day | [email protected]. Sửa đổi lần cuối: 2024-01-30 13:32
Chúng tôi liên tục nhận được yêu cầu về cách sử dụng mô-đun đồng hồ thời gian thực DS1307 và DS3231 với Arduino từ nhiều nguồn khác nhau - vì vậy đây là phần đầu tiên trong số hai phần hướng dẫn về cách sử dụng chúng. Đối với hướng dẫn Arduino này, chúng tôi có hai mô-đun đồng hồ thời gian thực để sử dụng, một dựa trên Maxim DS1307 (mô-đun hình vuông) và DS3231 (mô-đun hình chữ nhật).
Có hai điểm khác biệt chính giữa các IC trên mô-đun đồng hồ thời gian thực, đó là độ chính xác của việc lưu giữ thời gian. DS1307 được sử dụng trong mô-đun đầu tiên hoạt động rất tốt, tuy nhiên nhiệt độ bên ngoài có thể ảnh hưởng đến tần số của mạch dao động điều khiển bộ đếm bên trong của DS1307.
Điều này nghe có vẻ như là một vấn đề, tuy nhiên, thường sẽ dẫn đến việc đồng hồ bị tắt khoảng năm phút mỗi tháng. DS3231 chính xác hơn nhiều, vì nó có bộ dao động bên trong không bị ảnh hưởng bởi các yếu tố bên ngoài - và do đó, chính xác tối đa là vài phút mỗi năm. Nếu bạn có mô-đun DS1307- đừng cảm thấy tồi tệ, đó vẫn là một bảng giá trị tuyệt vời và sẽ phục vụ bạn tốt. Với cả hai mô-đun này, cần có pin dự phòng.
Bạn nên mua pin CR2032 mới và lắp nó vào mô-đun. Cùng với việc theo dõi thời gian và ngày tháng, các mô-đun này còn có một EEPROM nhỏ, chức năng báo thức (chỉ dành cho DS3231) và khả năng tạo ra sóng vuông với các tần số khác nhau - tất cả sẽ là chủ đề của hướng dẫn thứ hai.
Bước 1: Kết nối Mô-đun của bạn với Arduino
Cả hai mô-đun đều sử dụng bus I2C, giúp kết nối rất dễ dàng.
Trước tiên, bạn sẽ cần xác định các chân nào trên Arduino hoặc bảng tương thích được sử dụng cho bus I2C - chúng sẽ được biết là SDA (hoặc dữ liệu) và SCL (hoặc đồng hồ). Trên Arduino Uno hoặc các bảng tương thích, các chân này là A4 và A5 cho dữ liệu và đồng hồ; Trên Arduino Mega, các chân là D20 và D21 cho dữ liệu và đồng hồ; Và nếu bạn đang sử dụng Pro Mini tương thích thì các chân là A4 và A5 cho dữ liệu và đồng hồ, chúng song song với các chân chính.
Mô-đun DS1307
Nếu bạn có mô-đun DS1307, bạn sẽ cần hàn dây vào bo mạch hoặc hàn trên một số chân tiêu đề nội tuyến để bạn có thể sử dụng dây nhảy. Sau đó, kết nối các chân SCL và SDA với Arduino của bạn, và chân Vcc với chân 5V và GND với GND.
Mô-đun DS3231
Kết nối mô-đun này rất dễ dàng vì các chân tiêu đề được lắp đặt trên bo mạch tại nhà máy. Bạn có thể chỉ cần chạy lại dây jumper từ SCL và SDA đến Arduino và một lần nữa từ các chân Vcc và GND của mô-đun sang chân 5V hoặc 3.3. V và GND của bo mạch. Tuy nhiên, chúng được nhân đôi ở phía bên kia để hàn dây của riêng bạn. Cả hai mô-đun này đều có điện trở kéo lên cần thiết, vì vậy bạn không cần thêm điện trở riêng. Giống như tất cả các thiết bị được kết nối với bus I2C, hãy thử và giữ độ dài của dây SDA và SCL ở mức tối thiểu.
Bước 2: Đọc và ghi thời gian từ mô-đun RTC của bạn
Khi bạn đã kết nối mô-đun RTC của mình. nhập và tải lên bản phác thảo sau. Mặc dù các ghi chú và chức năng trong bản phác thảo chỉ đề cập đến DS3231, mã này cũng hoạt động với DS1307.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Chuyển đổi số thập phân bình thường thành byte thập phân được mã hóa nhị phân decToBcd (byte val) {return ((val / 10 * 16) + (val% 10)); } // Chuyển đổi số thập phân được mã hóa nhị phân thành số thập phân bình thường byte bcdToDec (byte val) {return ((val / 16 * 10) + (val% 16)); } void setup () {Wire.begin (); Serial.begin (9600); // đặt thời gian ban đầu tại đây: // DS3231 giây, phút, giờ, ngày, tháng, năm // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (byte giây, byte phút, byte giờ, byte dayOfWeek, byte dayOfMonth, byte tháng, byte năm) {// đặt dữ liệu ngày và giờ thành DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // thiết lập đầu vào tiếp theo bắt đầu tại thanh ghi giây Wire.write (decToBcd (second)); // đặt giây Wire.write (decToBcd (phút)); // đặt phút Wire.write (decToBcd (giờ)); // đặt giờ Wire.write (decToBcd (dayOfWeek)); // thiết lập ngày trong tuần (1 = Chủ nhật, 7 = Thứ bảy) Wire.write (decToBcd (dayOfMonth)); // đặt ngày (1 đến 31) Wire.write (decToBcd (tháng)); // đặt tháng Wire.write (decToBcd (year)); // đặt năm (0 đến 99) Wire.endTransmission (); } void readDS3231time (byte * giây, byte * phút, byte * giờ, byte * dayOfWeek, byte * dayOfMonth, byte * tháng, byte * năm) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // đặt con trỏ thanh ghi DS3231 thành 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // yêu cầu bảy byte dữ liệu từ DS3231 bắt đầu từ thanh ghi 00h * second = bcdToDec (Wire.read () & 0x7f); * phút = bcdToDec (Wire.read ()); * giờ = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * tháng = bcdToDec (Wire.read ()); * năm = bcdToDec (Wire.read ()); } void displayTime () {byte giây, phút, giờ, dayOfWeek, dayOfMonth, tháng, năm; // lấy dữ liệu từ DS3231 readDS3231time (& second, & minutes, & hours, & dayOfWeek, & dayOfMonth, & month, & year); // gửi nó đến màn hình nối tiếp Serial.print (giờ, DEC); // chuyển biến byte thành số thập phân khi hiển thị Serial.print (":"); if (phút <10) {Serial.print ("0"); } Serial.print (phút, DEC); Serial.print (":"); if (giây <10) {Serial.print ("0"); } Serial.print (thứ hai, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (tháng, DEC); Serial.print ("/"); Serial.print (năm, DEC); Serial.print ("Ngày trong tuần:"); switch (dayOfWeek) {case 1: Serial.println ("Chủ nhật"); nghỉ; case 2: Serial.println ("Thứ Hai"); nghỉ; case 3: Serial.println ("Thứ Ba"); nghỉ; case 4: Serial.println ("Thứ 4"); nghỉ; case 5: Serial.println ("Thứ Năm"); nghỉ; case 6: Serial.println ("Thứ sáu"); nghỉ; case 7: Serial.println ("Thứ bảy"); nghỉ; }} void loop () {displayTime (); // hiển thị dữ liệu đồng hồ thời gian thực trên Serial Monitor, delay (1000); // mỗi giây}
Có thể có rất nhiều mã, tuy nhiên nó được chia thành các phần dễ quản lý.
Đầu tiên nó bao gồm thư viện Wire, được sử dụng cho giao tiếp bus I2C, tiếp theo là xác định địa chỉ bus cho RTC là 0x68. Tiếp theo là hai hàm chuyển đổi số thập phân sang BCD (số thập phân được mã hóa nhị phân) và ngược lại. Đây là những điều cần thiết vì các IC RTC hoạt động trong BCD không phải ở dạng thập phân.
Hàm setDS3231time () được sử dụng để đặt đồng hồ. Sử dụng nó rất dễ dàng, chỉ cần chèn các giá trị từ năm xuống thứ hai và RTC sẽ bắt đầu từ thời điểm đó. Ví dụ: nếu bạn muốn đặt ngày và giờ sau - Thứ Tư ngày 26 tháng 11 năm 2014 và 9:42 tối 30 giây - bạn sẽ sử dụng:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
Bước 3:
Lưu ý rằng thời gian được đặt bằng thời gian 24 giờ và thông số thứ tư là "ngày trong tuần". Điều này rơi vào khoảng từ 1 đến 7, tương ứng là từ Chủ nhật đến Thứ bảy. Các tham số này là giá trị byte nếu bạn đang thay thế các biến của riêng mình.
Khi bạn đã chạy chức năng, bạn nên thêm tiền tố // và tải lên mã của bạn một lần nữa, vì vậy, nó sẽ không đặt lại thời gian sau khi nguồn điện đã được xoay vòng hoặc đặt lại bộ điều khiển micr. Đọc biểu mẫu thời gian RTC của bạn Đơn giản như vậy, trên thực tế, quá trình này có thể được theo dõi gọn gàng bên trong hàm displayTime (). Bạn sẽ cần xác định bảy biến byte để lưu trữ dữ liệu từ RTC và sau đó chúng được chèn vào hàm readDS3231time (). Ví dụ: nếu các biến của bạn là:
byte giây, phút, giờ, ngàyOfWeek, ngàyOfMonth, tháng, năm;
… Bạn sẽ làm mới chúng với dữ liệu hiện tại từ RTC bằng cách sử dụng:
readDS3232time (& giây, & phút, & giờ, & dayOfWeek, & dayOfMonth, & tháng, & năm);
Sau đó, bạn có thể sử dụng các biến khi bạn thấy phù hợp, từ việc gửi ngày và giờ đến màn hình nối tiếp như bản phác thảo ví dụ - đến chuyển đổi dữ liệu thành một dạng phù hợp cho tất cả các loại thiết bị đầu ra.
Chỉ để kiểm tra mọi thứ đang hoạt động, hãy nhập ngày và giờ thích hợp vào bản phác thảo trình diễn, tải nó lên, nhận xét về hàm setDS3231time () và tải lên lại. Sau đó, mở màn hình nối tiếp và bạn sẽ được cung cấp một màn hình hiển thị ngày và giờ hiện tại đang chạy.
Từ thời điểm này, bạn đã có các công cụ phần mềm để thiết lập và truy xuất dữ liệu từ mô-đun đồng hồ thời gian thực của mình và chúng tôi hy vọng bạn đã hiểu về cách sử dụng các mô-đun rẻ tiền này.
Bạn có thể tìm hiểu thêm về các IC đồng hồ thời gian thực cụ thể từ trang web của nhà sản xuất - DS1307 và DS3231.
Bài đăng này do pmdway.com mang đến cho bạn - mọi thứ dành cho các nhà sản xuất và những người đam mê điện tử, với giao hàng miễn phí trên toàn thế giới.
Đề xuất:
Nhắc nhở sử dụng thời gian sử dụng thiết bị (chỉ hoạt động trên Windows, Ios sẽ không hoạt động): 5 bước
Nhắc nhở sử dụng thời gian sử dụng thiết bị (chỉ hoạt động trên Windows, Ios sẽ không hoạt động): Giới thiệu Đây là một cỗ máy hữu ích được tạo ra từ Arduino, nó nhắc bạn nghỉ ngơi bằng cách " biiii! &Quot; âm thanh và khiến máy tính của bạn quay lại màn hình khóa sau 30 phút sử dụng màn hình. Sau khi nghỉ 10 phút, nó sẽ " b
Đặt DS3231 RTC (Đồng hồ thời gian thực) chính xác, nhanh chóng và tự động bằng Java (+ -1s): 3 bước
Đặt DS3231 RTC (Đồng hồ thời gian thực) chính xác, nhanh chóng và tự động bằng Java (+ -1s): Có thể hướng dẫn này sẽ chỉ cho bạn cách đặt thời gian trên Đồng hồ thời gian thực DS3231 bằng Arduino và một ứng dụng Java nhỏ sử dụng kết nối nối tiếp của Arduino. Logic cơ bản của chương trình này: 1. Arduino gửi một yêu cầu nối tiếp
Đồng hồ thời gian thực DS1307 RTC với Arduino: 4 bước
DS1307 Real Time Clock RTC Với Arduino: Trong Hướng dẫn này, chúng ta sẽ tìm hiểu về Real Time Clock (RTC) và cách Arduino & IC Đồng hồ thời gian thực DS1307 được kết hợp với nhau như một thiết bị định thời. Đồng hồ thời gian thực (RTC) được sử dụng để theo dõi thời gian và duy trì lịch. Để sử dụng RTC, w
Tạo đồng hồ với M5stick C bằng Arduino IDE - Đồng hồ thời gian thực RTC với M5stack M5stick-C: 4 bước
Tạo đồng hồ với M5stick C bằng Arduino IDE | Đồng hồ thời gian thực RTC với M5stack M5stick-C: Xin chào các bạn trong phần hướng dẫn này, chúng ta sẽ học cách tạo đồng hồ với bảng phát triển m5stick-C của m5stack bằng Arduino IDE Vì vậy m5stick sẽ hiển thị ngày, giờ & tuần trong tháng trên màn hình
Một cách thực sự đơn giản / dễ dàng / không phức tạp để làm cho con người / con người / động vật / rô bốt trông giống như họ có tầm nhìn nhiệt thực sự tuyệt vời / sáng sủa (Màu sắc do bạn lựa chọn) Sử dụng GIMP: 4 bước
Một cách thực sự đơn giản / dễ dàng / không phức tạp để làm cho con người / con người / động vật / rô bốt trông giống như họ có tầm nhìn nhiệt thực sự tuyệt vời / sáng sủa (Màu sắc do bạn lựa chọn) Sử dụng GIMP: Đọc … tiêu đề