Часы подключаются по двухпроводной шине IIC (Inter-IntegratedCircuit) через выводы SDA и SCL к SDA и SCL Arduino соответственно. Также необходимо подключить питание +5В и GND. Остальные выводы специфичны для DS3231 и не поддерживаются библиотеками для DS1307, да и не часто используются. Модуль работает как от 5 так и от 3.3 вольт.
Обратите внимание – выводы шины IICна разных контроллерах расположены на разных пинах:
Контакт SDA | Контакт SCL | |
---|---|---|
На Arduino UNO, Nano, Pro Mini etc. | A4 | A5 |
На Arduino Mega, Due | 20 | 21 |
На Arduino Leonardo, Pro Micro | 2 | 3 |
Если у вас такой модуль, распиновка будет следующей
Название | Назначение |
---|---|
32K | Выход генератора 32 кГц. |
SQW | Выход прямоугольного сигнала; частота задаётся с помощью регистра управления 0x0E и может составлять 1, 1024, 4096 или 8192 Гц. |
SCL | Шина тактовых импульсов интерфейса I2C. |
SDA | Шина данных интерфейса I2C. |
VCC | Питание – 3.3 или 5 вольт. |
GND | Земля. |
НАСТРОЙКА И ПОДКЛЮЧЕНИЕ В ARDUINO IDE
Как и со всей периферией Arduino, с модулем часов удобнее работать, используя библиотеку. Мы будем пользоваться низкоуровневой библиотекой Wire (входит в комплект поставки Arduino IDE) и двумя высокоуровневыми DS1307 RTCи Time (необходимо скачать).
Несмотря на то, что библиотека написана для «неточных» часов, она поддерживает работу и с DS3231.
После скачивания библиотек их необходимо установить. Для этого две папки с библиотеками копируются в поддиректорию libraries в папке установки среды Arduino IDE.
Папка Libraries находится по разным адресам в зависимости от вашей ОС:
На Mac: домашняя директория -> Documents -> Arduino -> libraries
На PC: Мои документы -> Arduino -> libraries
На Linux: домашняя директория -> sketchbook -> libraries
После установки запустите среду Arduino IDE и откройте пример TimeRTC библиотеки Time (Файл Examples Time TimeRTC), или просто скопируйте код:
#include <Time.h> #include <Wire.h> #include <DS1307RTC.h> void setup() { Serial.begin(9600); while (!Serial) ; // wait until Arduino Serial Monitor opens setSyncProvider(RTC.get); // the function to get the time from the RTC if(timeStatus()!= timeSet) Serial.println("Unable to sync with the RTC"); else Serial.println("RTC has set the system time"); } void loop() { if (timeStatus() == timeSet) { digitalClockDisplay(); } else { Serial.println("The time has not been set. Please run the Time"); Serial.println("TimeRTCSet example, or DS1307RTC SetTime example."); Serial.println(); delay(4000); } delay(1000); } void digitalClockDisplay(){ // digital clock display of the time Serial.print(hour()); printDigits(minute()); printDigits(second()); Serial.print(" "); Serial.print(day()); Serial.print(" "); Serial.print(month()); Serial.print(" "); Serial.print(year()); Serial.println(); } void printDigits(int digits){ // utility function for digital clock display: prints preceding colon and leading 0 Serial.print(":"); if(digits < 10) Serial.print('0'); Serial.print(digits); }
Загрузите скетч в плату, после чего откройте монитор последовательного порта (Ctrl+Shift+M). Скорее всего, вы увидите неправильное время или вообще его не увидите, так как часы всё ещё не настроены.
Для их настройки запустите пример SetTime (Файл Примеры DS1307RTC SetTime) и залейте его в плату. После загрузки время будет настроено по системному времени ПК на момент компиляции. Если вы в любой момент времени перезагрузите плату, то время снова будет сброшено ко времени компиляции, поэтому после заливки настроенного скетча отключите сигнальные линии часов и залейте любой другой скетч (например, наш первый, выводящий время).
Если вам не нравится настройка времени по времени компиляции, вы можете задать ее самостоятельно, для этого используйте следующий код:
#include <Time.h> #include <Wire.h> #include <DS1307RTC.h> void setup() { setSyncProvider(RTC.get); //Устанавливаем нужное время в формате: Часы, минуты, секунды, день, месяц, год setTime(13,00,0,01,4,2021); //Применяем значение: RTC.set(now()); } void loop() { //Ставим задержку в 100 миллисекунд: delay(100); }
Он установит время и дату на 13:00:00 1 апреля 2021 года. Поменяйте это значение для установки своего времени. Учтите – если вы перезагрузите плату, время будет сброшено, как с временем компиляции, так что повторите действия с отключением платы и заливкой другого скетча.