Подключение модуля часов реального времени ds3231 mini Arduino

Часы подключаются по двухпроводной шине IIC (Inter-IntegratedCircuit) через выводы SDA и SCL к SDA и SCL Arduino соответственно. Также необходимо подключить питание +5В и GND. Остальные выводы специфичны для DS3231 и не поддерживаются библиотеками для DS1307, да и не часто используются. Модуль работает как от 5 так и от 3.3 вольт.

Обратите внимание – выводы шины IICна разных контроллерах расположены на разных пинах:

Контакт SDAКонтакт SCL
На Arduino UNO, Nano, Pro Mini etc.A4A5
На Arduino Mega, Due2021
На Arduino Leonardo, Pro Micro23

Если у вас такой модуль, распиновка будет следующей

НазваниеНазначение
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 года. Поменяйте это значение для установки своего времени. Учтите – если вы перезагрузите плату, время будет сброшено, как с временем компиляции, так что повторите действия с отключением платы и заливкой другого скетча.

Добавить комментарий