DS1307 останавливаются при отключении от питания

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем yden, 15 май 2016.

  1. yden

    yden Гик

    Здравствуйте.

    Подскажите пожалуйста. Приобрел на али часы реального времени: http://ru.aliexpress.com/item/RTC-Real-Time-Clock-DS1307-module-with-battery/32530897478.html

    DS1307

    Установил на них время - норм. Но при отключении питания они останавливаются. Проверял стандартным кодом SetTime и ReadTime. Покупал несколько часов - ве останавливаются.

    Как можно вылечить их?



    Спасибо
     
  2. XCB

    XCB Гик

    чтобы шли должна быть батарейка например как тут [​IMG]
     
  3. Onkel

    Onkel Гуру

    лечится. отпаиваем диод D1, R6 и R4, вместо R6 впаиваем 0 Ом. Но примерно 10% не запускается от обычной батарейки сr2032, не разобрался еще почему. А 90% работает.
     
  4. yden

    yden Гик

    Что здесь выпаивать:

    ef58084880.png
     
  5. Onkel

    Onkel Гуру

    у вас другие. я про tiny rtc.
    а где у вас батарейка, не вижу?
     
  6. yden

    yden Гик

    1464258461205.png
     
  7. yden

    yden Гик

    После отключения внешнего питания стандартный скетч чтения времени:
    The DS1307 is stopped. Please run the SetTime
    example to initialize the time and begin running
     
  8. Onkel

    Onkel Гуру

    проверьте батарейку, попробуйте со внешней батарейкой. Скорее всего дело в батарейке или в контактах.
     
  9. yden

    yden Гик

    Я правильно понял, в моем модуле цепи заряда батареи нет.
     
  10. ostrov

    ostrov Гуру

    Батареи не заряжаются. Но их в часах хватает на год или на три
     
  11. yden

    yden Гик

    Я про цепь заряда аккумулятора.
     
  12. Onkel

    Onkel Гуру

    на картинке [​IMG]
    заряжаемая (Rechargable) батарейка. Но их хрен найдешь.
     
  13. yden

    yden Гик

    Я не про эти батарейки. Я про то что в моем модуле напрочь отсутствует возможность их заряда, в отличие от Tiny RTC. Верно?
     
  14. ostrov

    ostrov Гуру

    Нет, я не спорю, что наверное есть аккумуляторы в корпусе плоской часовой батарейки, но зачем? Срок службы вряд ли будет намного дольше в итоге.
     
  15. yden

    yden Гик

    Я не могу найти аккумулятор требуемого формата.
     
  16. Slaiterx

    Slaiterx Гик

    Как вы устанавливали время где скетч
     
  17. Slaiterx

    Slaiterx Гик

    Может вы не закоментировали установку времени
     
    OldKryptos нравится это.
  18. yden

    yden Гик

    Стандартная, из библиотеки DS1307RTC
    Установка:

    Код (C++):
    #include <Wire.h>
    #include <Time.h>
    #include <DS1307RTC.h>

    const char *monthName[12] = {
      "Jan", "Feb", "Mar", "Apr", "May", "Jun",
      "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
    };

    tmElements_t tm;

    void setup() {
      bool parse=false;
      bool config=false;

      // get the date and time the compiler was run
      if (getDate(__DATE__) && getTime(__TIME__)) {
        parse = true;
        // and configure the RTC with this info
        if (RTC.write(tm)) {
          config = true;
        }
      }

      Serial.begin(9600);
      while (!Serial) ; // wait for Arduino Serial Monitor
      delay(200);
      if (parse && config) {
        Serial.print("DS1307 configured Time=");
        Serial.print(__TIME__);
        Serial.print(", Date=");
        Serial.println(__DATE__);
      } else if (parse) {
        Serial.println("DS1307 Communication Error :-{");
        Serial.println("Please check your circuitry");
      } else {
        Serial.print("Could not parse info from the compiler, Time=\"");
        Serial.print(__TIME__);
        Serial.print("\", Date=\"");
        Serial.print(__DATE__);
        Serial.println("\"");
      }
    }

    void loop() {
    }

    bool getTime(const char *str)
    {
      int Hour, Min, Sec;

      if (sscanf(str, "%d:%d:%d", &Hour, &Min, &Sec) != 3) return false;
      tm.Hour = Hour;
      tm.Minute = Min;
      tm.Second = Sec;
      return true;
    }

    bool getDate(const char *str)
    {
      char Month[12];
      int Day, Year;
      uint8_t monthIndex;

      if (sscanf(str, "%s %d %d", Month, &Day, &Year) != 3) return false;
      for (monthIndex = 0; monthIndex < 12; monthIndex++) {
        if (strcmp(Month, monthName[monthIndex]) == 0) break;
      }
      if (monthIndex >= 12) return false;
      tm.Day = Day;
      tm.Month = monthIndex + 1;
      tm.Year = CalendarYrToTm(Year);
      return true;
    }
     
    Чтение:
    Код (C++):
    #include <Wire.h>
    #include <Time.h>
    #include <DS1307RTC.h>

    void setup() {
      Serial.begin(9600);
      while (!Serial) ; // wait for serial
      delay(200);
      Serial.println("DS1307RTC Read Test");
      Serial.println("-------------------");
    }

    void loop() {
      tmElements_t tm;

      if (RTC.read(tm)) {
        Serial.print("Ok, Time = ");
        print2digits(tm.Hour);
        Serial.write(':');
        print2digits(tm.Minute);
        Serial.write(':');
        print2digits(tm.Second);
        Serial.print(", Date (D/M/Y) = ");
        Serial.print(tm.Day);
        Serial.write('/');
        Serial.print(tm.Month);
        Serial.write('/');
        Serial.print(tmYearToCalendar(tm.Year));
        Serial.println();
      } else {
        if (RTC.chipPresent()) {
          Serial.println("The DS1307 is stopped.  Please run the SetTime");
          Serial.println("example to initialize the time and begin running.");
          Serial.println();
        } else {
          Serial.println("DS1307 read error!  Please check the circuitry.");
          Serial.println();
        }
        delay(9000);
      }
      delay(1000);
    }

    void print2digits(int number) {
      if (number >= 0 && number < 10) {
        Serial.write('0');
      }
      Serial.print(number);
    }
     
  19. Slaiterx

    Slaiterx Гик

    Код (C++):
    //Подключаем библиотеки #include
    #include <Wire.h>
    #include <DS1307.h>
    void setup()
    {Serial. begin(9600);
    RTC.stop(); //Останавливаем часы
    RTC.set(DS1307_SEC,0); //Выставляем секунды (00)
    RTC.set(DS1307_MIN,25); //Выставляем минуты (25)
    RTC.set(DS1307_HR,15); //Выставляем часы (15)
    RTC.set(DS1307_DOW,5); //Выбираем день недели (5)
    RTC.set(DS1307_DATE,l); //День месяца (1)
    RTC.set(DS1307_MTH,3); //Месяц (3)
    RTC.set(DS1307_ YR,13); //Год (13)
    RTC.start(); //Запускаем часы
    }
    void 1оор() //в основном цикле ничего нет
    {
    }
     
  20. Slaiterx

    Slaiterx Гик

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