Ошибка модуля часов реального Времени-DS3231

Это не кодовая ошибка, я использую модуль DS3231 RTC с батареей. Когда я купил этот модуль, он отлично работал, а теперь, когда я его использую, время идет отлично. когда я устанавливаю текущее время моего местоположения, оно работает вместе с этим временем, но проблема в том, что когда я отключаю питание моего Arduino Nano и снова, когда я даю питание, я вижу, что время работает с самого начала, я не могу видеть никакого текущего значения времени моего местоположения, но я подключил батарею CR2032 вместе с модулем DS3231? в чем тут проблема? Я тоже сменил другую батарею, но она показывает ту же проблему, что и мой DS32321, не сохранил время, когда я отключаю и снова подключаю питание

Это код, который я использую для установки времени

#include <DS3231.h>

// Init the DS3231 using the hardware interface
DS3231  rtc(SDA, SCL);

void setup()
{
  // Setup Serial connection
  Serial.begin(115200);
  // Раскомментируйте следующую строку, если вы используете Arduino Leonardo
  //while (!Serial) {}
  
  // Инициализировать объект rtc
  rtc.begin();
  
  // Следующие строки можно раскомментировать, чтобы установить дату и время
  rtc.setDOW(WEDNESDAY);     // Установить День недели на ВОСКРЕСЕНЬЕ
  rtc.setTime(12, 0, 0); // Установите время на 12:00:00 (формат 24 часа)
  rtc.setDate(1, 1, 2014); // Установите дату на 1 января 2014 года
}

void loop()
{
  // Отправить День недели
  Serial.print(rtc.getDOWStr());
  Serial.print(" ");
  
  // Дата отправки
  Serial.print(rtc.getDateStr());
  Serial.print(" -- ");

  // Время отправки
  Serial.println(rtc.getTimeStr());
  
  // Подождите одну секунду, прежде чем повторить :)
  delay (1000);
}

Это код, который я использую, чтобы сделать прерывание

 #include <DS3231.h>

int Relay = 4;

DS3231  rtc(SDA, SCL);
Time t;

const int OnHour = 21;
const int OnMin = 46;
const int OffHour = 21;
const int OffMin = 48;

const int On2Hour = 14;
const int On2Min = 54;
const int Off2Hour = 21;
const int Off2Min = 48;

void setup() {
  Serial.begin(115200);
  rtc.begin();
  pinMode(Relay, OUTPUT);
  digitalWrite(Relay, LOW);
}

void loop() {
  Serial.println("Time:  ");
  Serial.print(rtc.getTimeStr());
  Serial.print('\n');

  Serial.println("Date: ");
  Serial.print(rtc.getDateStr());
  Serial.print('\n');

  t = rtc.getTime();
  Serial.print(t.hour);
  Serial.print(" hour(s), ");
  Serial.print(t.min);
  Serial.print(" minute(s)");
  Serial.println(" ");
  delay (1000);
  //can be set lcd display alspo
  if(t.hour == OnHour && t.min == OnMin){
    digitalWrite(Relay,HIGH);
    Serial.println("LIGHT ON");
    }
    
    else if(t.hour == OffHour && t.min == OffMin){
      digitalWrite(Relay,LOW);
      Serial.println("LIGHT OFF");
    }
  if(t.hour == On2Hour && t.min == On2Min){
    digitalWrite(Relay,HIGH);
    Serial.println("LIGHT ON");
    }
    
    else if(t.hour == Off2Hour && t.min == Off2Min){
      digitalWrite(Relay,LOW);
      Serial.println("LIGHT OFF");
    }
} 

, 👍1

Обсуждение

Пожалуйста, поделитесь своим кодом и какой библиотекой вы используете, @Maaz Sk

Я использую библиотеку Ds3231, @Sharifdeen Ashshak

да теперь я загрузил код, @Sharifdeen Ashshak


2 ответа


1

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

    #include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"};

void setup () {
  Serial.begin(57600);

#ifndef ESP8266
  while (!Serial); // wait for serial port to connect. Needed for native USB
#endif

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    Serial.flush();
    abort();
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, let's set the time!");
    // When time needs to be set on a new device, or after a power loss, the
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
     rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
  }

  // When time needs to be re-set on a previously configured device, the
  // following line sets the RTC to the date & time this sketch was compiled
  // rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
  // This line sets the RTC with an explicit date & time, for example to set
  // January 21, 2014 at 3am you would call:
  // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
}

void loop () {
    DateTime now = rtc.now();

    Serial.print(now.year(), DEC);
    Serial.print('/');
    Serial.print(now.month(), DEC);
    Serial.print('/');
    Serial.print(now.day(), DEC);
    Serial.print(" (");
    Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
    Serial.print(") ");
    Serial.print(now.hour(), DEC);
    Serial.print(':');
    Serial.print(now.minute(), DEC);
    Serial.print(':');
    Serial.print(now.second(), DEC);
    Serial.println();

    Serial.print(" since midnight 1/1/1970 = ");
    Serial.print(now.unixtime());
    Serial.print("s = ");
    Serial.print(now.unixtime() / 86400L);
    Serial.println("d");

    // calculate a date which is 7 days and 30 seconds into the future
    DateTime future (now + TimeSpan(7,12,30,6));

    Serial.print(" now + 7d + 30s: ");
    Serial.print(future.year(), DEC);
    Serial.print('/');
    Serial.print(future.month(), DEC);
    Serial.print('/');
    Serial.print(future.day(), DEC);
    Serial.print(' ');
    Serial.print(future.hour(), DEC);
    Serial.print(':');
    Serial.print(future.minute(), DEC);
    Serial.print(':');
    Serial.print(future.second(), DEC);
    Serial.println();

    Serial.print("Temperature: ");
    Serial.print(rtc.getTemperature());
    Serial.println(" C");

    Serial.println();
    delay(3000);
}

Загрузите приведенный выше код, а затем загрузите тот же код, просто прокомментируйте следующую часть

if (rtc.lostPower()) {
        Serial.println("RTC lost power, let's set the time!");
        // огда необходимо установить время на новом устройстве или после отключения питания,
        // следующая строка устанавливает RTC на дату и время составления этого скетча.
        rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
        // Эта строка устанавливает RTC с явной датой и временем, например, для установки
        // 21 января 2014 года в 3 часа ночи вы бы позвонили:
         rtc.adjust(DateTime(2020, 10, 19, 10, 13, 0));
      }

Это сработает, и даже если вы подключите и отключите его от сети, время RTC не сбросится

,

все ли в порядке с Arduino, @Sharifdeen Ashshak

Нет, это не работает, это показывает ту же проблему, с которой я сталкивался. Я имею в виду, что мой RTC-модуль ds3231 не успевает за временем, когда теряет мощность. но вместе с этим я прикрепил аккумулятор для хронометража, @Sharifdeen Ashshak

Тот же самый приведенный выше код работал для меня, вы проверили напряжение батареи, а также откомментировали часть кода и загрузили его снова?, @Maaz Sk

да , ваш код работает нормально , я тоже поменял новую батарею, но проблема в том, что когда она теряет заряд, она начинается с 2000/0/1, а время начинается с 00.00.01, @Sharifdeen Ashshak

Хорошо, 2000/0/1-это время запуска ds3231, вы проверили напряжение с помощью мультиметра, также проверьте полярность батареи, прежде чем вставлять ее в модуль, и не могли бы вы поделиться фотографией вашего модуля, а также тем, как вы вставили батарею, @Maaz Sk

да, я должен проверить напряжение с помощью мультиметра, но батарея новая, и я правильно подключил батарею. Я не смог отправить изображение через эту платформу, потому что это большой файл, @Sharifdeen Ashshak

Если вы отправите свое электронное письмо, я могу отправить его через это, @Sharifdeen Ashshak

Прикрепите его в своем посте выше, каждый может ответить, даже если я не смогу ответить на него, @Maaz Sk

да, я пробовал, но он содержит большой размер файла, @Sharifdeen Ashshak

Загрузите его [здесь](https://gofile.io/uploadFiles), @Maaz Sk

Используйте любое программное обеспечение для уменьшения размера (разрешение / разрядность / сжатие)., @the busybee

хорошо, вот мое изображение ds3231 https://gofile.io/d/9IkuBr, @Sharifdeen Ashshak

Теперь я проверил свой модуль rtc, он показывает 3,3 В через модуль ds3231, но он не показывает время, @Sharifdeen Ashshak

У меня сейчас нет доступа к моему оборудованию, я вернусь, как только у меня будет доступ к моему оборудованию, вы прокомментировали часть кода, которую я упомянул в приведенном выше коде, и попробовали еще раз, просто хотите знать все возможности, @Maaz Sk

2020/10/19 (понедельник) 10:14:5 с полуночи 1/1/1970 = 1603102445с = 18554д сейчас + 7д + 30с: 2020/10/26 22:44:11 Температура: 33,75 C Это был результат, когда я загрузил ваш код в соответствии с вашей инструкцией, @Sharifdeen Ashshak

⸮⸮:b⸮ ⸮ ⸮\{⸮8k ⸮ ⸮ ⸮ ⸮ ⸮ ⸮ 2000/1/1 (суббота) 0: 0: 5 с полуночи 1/1/1970 = 946684805s = 10957d сейчас + 7d + 30 с: 2000/1/8 12: 30: 11 Температура: 33,75 C это выходное сообщение, когда я отключаю и снова подключаю питание своего Arduino, @Sharifdeen Ashshak

Публикация схемы не является беспорядочным изображением, так как то, как вы ее подключили, показывая все соединения, может устранить многие проблемы. Идеальное программное обеспечение с неправильной конфигурацией оборудования не будет работать идеально., @Gil


1

Я возьму ДОБЫЧУ, так как я не знаю, с каким модулем у вас возникли проблемы. Извлеките аккумулятор, включите его и измерьте напряжение на клеммах аккумулятора. Если у вас напряжение около 3,2 В, модуль предназначен для зарядки аккумулятора (подумал, что вам, возможно, будет интересно узнать). Выключите питание модуля вставьте аккумулятор, не включайте его и измерьте напряжение батареи на микросхеме. Обязательно проверьте также заземляющую сторону. Я полагаю, вы обнаружите то же самое, что и я: паяное соединение с держателем батареи было открытым, просто добавили немного припоя, и это решило проблему. Я также обнаружил, что линия SCL была разорвана на плате, так что, если я подключу другую сторону, это не сработает. Я добавил перемычку, чтобы исправить это. Я купил несколько штук у азона, но только первый был плохим.

,