Оглавление:
- Шаг 1: Подключение вашего модуля к Arduino
- Шаг 2: Считывание и запись времени из вашего модуля RTC
- Шаг 3:
Видео: Использование модулей часов реального времени DS1307 и DS3231 с Arduino: 3 шага
2024 Автор: John Day | [email protected]. Последнее изменение: 2024-01-30 11:51
Мы продолжаем получать запросы о том, как использовать модули часов реального времени DS1307 и DS3231 с Arduino из различных источников - так что это первая из двух частей руководства о том, как их использовать. Для этого руководства по Arduino у нас есть два модуля часов реального времени, один из которых основан на Maxim DS1307 (квадратный модуль) и DS3231 (прямоугольный модуль).
Между микросхемами модулей часов реального времени есть два основных отличия: точность отсчета времени. DS1307, используемый в первом модуле, работает очень хорошо, однако внешняя температура может влиять на частоту схемы генератора, который управляет внутренним счетчиком DS1307.
Это может показаться проблемой, однако обычно в результате часы отключаются примерно на пять минут в месяц. DS3231 намного более точен, поскольку у него есть внутренний генератор, на который не влияют внешние факторы - и, следовательно, точность составляет максимум несколько минут в год. Если у вас есть модуль DS1307 - не расстраивайтесь, это по-прежнему отличная плата, и она вам хорошо послужит. Для обоих модулей требуется резервная батарея.
Хорошая идея - купить новую батарею CR2032 и установить ее в модуль. Помимо отслеживания времени и даты, эти модули также имеют небольшую EEPROM, функцию сигнализации (только DS3231) и возможность генерировать прямоугольный сигнал различной частоты - все это будет предметом второго руководства.
Шаг 1: Подключение вашего модуля к Arduino
Оба модуля используют шину I2C, что упрощает подключение.
Сначала вам нужно будет определить, какие контакты на вашей Arduino или совместимых платах используются для шины I2C - они будут известны как SDA (или данные) и SCL (или часы). На Arduino Uno или совместимых платах эти контакты - это A4 и A5 для данных и часов; на Arduino Mega - контакты D20 и D21 для данных и часов; а если вы используете Pro Mini-совместимый, контакты - это A4 и A5. для данных и часов, которые параллельны основным контактам.
Модуль DS1307
Если у вас есть модуль DS1307, вам нужно будет припаять провода к плате или припаять некоторые встроенные контакты заголовка, чтобы вы могли использовать перемычки. Затем подключите выводы SCL и SDA к Arduino, а вывод Vcc - к выводу 5V, а GND - к GND.
Модуль DS3231
Подключить этот модуль очень просто, так как контакты разъема устанавливаются на плату на заводе. Вы можете просто снова подключить перемычки от SCL и SDA к Arduino и снова от контактов Vcc и GND модуля к 5V или 3.3. V и GND вашей платы. Однако они дублируются на другой стороне для пайки собственных проводов. Оба этих модуля имеют необходимые подтягивающие резисторы, поэтому вам не нужно добавлять свои собственные. Как и все устройства, подключенные к шине I2C, постарайтесь свести к минимуму длину проводов SDA и SCL.
Шаг 2: Считывание и запись времени из вашего модуля RTC
После того, как вы подключили модуль RTC. введите и загрузите следующий эскиз. Хотя примечания и функции в эскизе относятся только к DS3231, код также работает с DS1307.
#include "Wire.h" #define DS3231_I2C_ADDRESS 0x68 // Преобразование обычных десятичных чисел в двоично-десятичный байт decToBcd (byte val) {return ((val / 10 * 16) + (val% 10)); } // Преобразование двоично-десятичного числа в обычное десятичное byte bcdToDec (byte val) {return ((val / 16 * 10) + (val% 16)); } void setup () {Wire.begin (); Serial.begin (9600); // здесь устанавливается начальное время: // DS3231 секунды, минуты, часы, день, число, месяц, год // setDS3231time (30, 42, 21, 4, 26, 11, 14); } void setDS3231time (байт-секунда, байтовая минута, байтовый час, байтовый деньOfWeek, байтовый деньOfMonth, байтовый месяц, байтовый год) {// устанавливает данные времени и даты в DS3231 Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // устанавливаем следующий ввод для начала в регистре секунд Wire.write (decToBcd (second)); // устанавливаем секунды Wire.write (decToBcd (minute)); // устанавливаем минуты Wire.write (decToBcd (hour)); // устанавливаем часы Wire.write (decToBcd (dayOfWeek)); // устанавливаем день недели (1 = воскресенье, 7 = суббота) Wire.write (decToBcd (dayOfMonth)); // устанавливаем дату (от 1 до 31) Wire.write (decToBcd (month)); // установить месяц Wire.write (decToBcd (год)); // установить год (от 0 до 99) Wire.endTransmission (); } void readDS3231time (байт * секунда, байт * минута, байт * час, байт * dayOfWeek, байт * dayOfMonth, байт * месяц, байт * год) {Wire.beginTransmission (DS3231_I2C_ADDRESS); Wire.write (0); // устанавливаем указатель регистра DS3231 на 00h Wire.endTransmission (); Wire.requestFrom (DS3231_I2C_ADDRESS, 7); // запрашиваем семь байтов данных от DS3231, начиная с регистра 00h * second = bcdToDec (Wire.read () & 0x7f); * минута = bcdToDec (Wire.read ()); * час = bcdToDec (Wire.read () & 0x3f); * dayOfWeek = bcdToDec (Wire.read ()); * dayOfMonth = bcdToDec (Wire.read ()); * месяц = bcdToDec (Wire.read ()); * год = bcdToDec (Wire.read ()); } void displayTime () {байтовая секунда, минута, час, день недели, день месяца, месяц, год; // получение данных из DS3231 readDS3231time (& секунда, & минута, & час, & dayOfWeek, & dayOfMonth, & month, & year); // отправляем его на серийный монитор Serial.print (час, DEC); // преобразование байтовой переменной в десятичное число при отображении Serial.print (":"); если (минута <10) {Serial.print ("0"); } Serial.print (минута, DEC); Serial.print (":"); если (второй <10) {Serial.print ("0"); } Serial.print (второй, DEC); Serial.print (""); Serial.print (dayOfMonth, DEC); Serial.print ("/"); Serial.print (месяц, DEC); Serial.print ("/"); Serial.print (год, DEC); Serial.print ("День недели:"); переключатель (dayOfWeek) {случай 1: Serial.println ("Воскресенье"); перерыв; случай 2: Serial.println («Понедельник»); перерыв; случай 3: Serial.println («вторник»); перерыв; случай 4: Serial.println («среда»); перерыв; случай 5: Serial.println («четверг»); перерыв; случай 6: Serial.println («Пятница»); перерыв; case 7: Serial.println («суббота»); перерыв; }} недействительный цикл () {displayTime (); // отображаем данные часов реального времени на последовательном мониторе, delay (1000); // каждую секунду }
Кода может быть много, но он хорошо разбивается на управляемые части.
Сначала он включает библиотеку Wire, которая используется для связи по шине I2C, а затем определяет адрес шины для RTC как 0x68. За ними следуют две функции, которые преобразуют десятичные числа в двоично-десятичный код (двоично-десятичный код) и наоборот. Это необходимо, поскольку микросхемы RTC работают в двоично-десятичном формате, а не в десятичном.
Функция setDS3231time () используется для установки часов. Использовать его очень просто, просто вставьте значения от года до секунды, и RTC запустится с этого времени. Например, если вы хотите установить следующие дату и время - среда, 26 ноября 2014 г., 21:42 и 30 секунд - вы должны использовать:
setDS3231time (30, 42, 21, 4, 26, 11, 14);
Шаг 3:
Обратите внимание, что время установлено в 24-часовом формате, а четвертый параметр - «день недели». Это значение находится между 1 и 7, то есть с воскресенья по субботу соответственно. Эти параметры представляют собой байтовые значения, если вы подставляете свои собственные переменные.
После того, как вы запустите функцию, разумно добавить к ней префикс // и снова загрузить код, чтобы время не сбрасывалось после выключения питания или сброса микроконтроллера. Считывание времени из вашего RTC Так же просто, фактически за процессом можно аккуратно проследить внутри функции displayTime (). Вам нужно будет определить семь байтовых переменных для хранения данных из RTC, и затем они будут вставлены в функцию readDS3231time (). Например, если ваши переменные:
байт-секунда, минута, час, день недели, день месяца, месяц, год;
… Вы бы обновили их текущими данными из RTC, используя:
readDS3232time (& секунда, & минута, & час, & dayOfWeek, & dayOfMonth, & month, & year);
Затем вы можете использовать переменные по своему усмотрению, от отправки времени и даты на монитор последовательного порта, как это делается в примере эскиза, до преобразования данных в подходящую форму для всех видов устройств вывода.
Просто чтобы проверить, что все работает, введите подходящее время и дату в демонстрационный скетч, загрузите его, закомментируйте функцию setDS3231time () и загрузите ее снова. Затем откройте монитор последовательного порта, и вы должны увидеть текущее время и дату.
С этого момента у вас есть программные инструменты для установки и получения данных из модуля часов реального времени, и мы надеемся, что вы понимаете, как использовать эти недорогие модули.
Вы можете узнать больше о конкретных ИС часов реального времени на сайте производителя - DS1307 и DS3231.
Этот пост предоставлен pmdway.com - все для производителей и любителей электроники с бесплатной доставкой по всему миру.
Рекомендуемые:
Время отображения Arduino на светодиодном дисплее TM1637 с использованием часов реального времени DS1307: 8 шагов
Отображение времени Arduino на светодиодном дисплее TM1637 с использованием RTC DS1307: в этом руководстве мы узнаем, как отображать время с помощью модуля RTC DS1307 и светодиодного дисплея TM1637 и Visuino
Как использовать модуль часов реального времени (DS3231): 5 шагов
Как использовать модуль часов реального времени (DS3231): DS3231 - это недорогие, чрезвычайно точные часы реального времени (RTC) I2C со встроенным кварцевым генератором с температурной компенсацией (TCXO) и кварцевым резонатором. Устройство оснащено аккумуляторным входом и поддерживает точное хронометраж при включении основного питания
Настройка часов реального времени DS3231 RTC (часов реального времени) точно, быстро и автоматически с помощью Java (+ -1 с): 3 шага
Установка часов реального времени DS3231 RTC (часов реального времени) точно, быстро и автоматически с использованием Java (+ -1 с): это руководство покажет вам, как установить время на часах реального времени DS3231 с помощью Arduino и небольшого приложения Java, которое использует последовательное соединение Arduino. Основная логика этой программы: 1. Arduino отправляет последовательный запрос
Часы на базе Arduino с использованием модуля часов реального времени DS1307 (RTC) и 0,96: 5 шагов
Часы на основе Arduino с использованием модуля часов реального времени DS1307 (RTC) и 0.96: Привет, ребята, в этом руководстве мы увидим, как создать рабочие часы с помощью модуля часов реального времени DS1307 & Дисплей OLED, поэтому мы будем считывать время с модуля часов DS1307. И распечатать на OLED-экране
Создание часов с M5stick C с помощью Arduino IDE - Часы реального времени RTC с M5stack M5stick-C: 4 шага
Создание часов с M5stick C с помощью Arduino IDE | Часы реального времени RTC с M5stack M5stick-C: Привет, ребята, в этой инструкции мы узнаем, как сделать часы с помощью платы разработки m5stick-C m5stack, используя Arduino IDE. Таким образом, m5stick будет отображать дату, время и amp; неделя месяца на дисплее