Проблема с DS1302

Тема в разделе "Arduino & Shields", создана пользователем Morgan_Enot, 1 июн 2018.

  1. Morgan_Enot

    Morgan_Enot Нуб

    Добрый день! Имеется модуль часов на DS1302 и arduino nano. Собираю все по схеме данного проекта с теми же прошивками, модуль там такой же https://voltiq.ru/ds1302-rtc-and-arduino/
    Время устанавливается корректно. Во время считывания монитор порта выводит данные с часов каждую секунду, но фактически изменение секунды на часах происходит раз в 20 секунд.
    Использование других библиотек, подключение к другим пинам ситуацию не меняет. Получается, что модуль отсчитывает время в примерно 20 раз медленее, чем нужно, в том числе и при питании от батареи. Кварц перепаивал на другой, ничего не меняется. В чем может быть проблема?
     

    Вложения:

    • port.jpg
      port.jpg
      Размер файла:
      62,4 КБ
      Просмотров:
      446
  2. b707

    b707 Гуру

    а если считывать время пореже, например раз в 10 секунд - ситуация меняется?
     
  3. Morgan_Enot

    Morgan_Enot Нуб

    Не меняется. Доработал стандартный библиотечный скетч для наглядности. Подозреваю, что дело в кривости самой микросхемы, но другой нет в наличии, чтобы воткнуть проверить.
    Код (C++):
    #include <iarduino_RTC.h>                                   // Подключаем библиотеку iarduino_RTC для работы с модулями реального времени.
      iarduino_RTC time(RTC_DS1302, 3, 4, 5);                 // Объявляем объект time для работы с RTC модулем на базе чипа DS1302, указывая выводы Arduino подключённые к выводам модуля RST, CLK, DAT
    //  iarduino_RTC time(RTC_DS1307);                          // Объявляем объект time для работы с RTC модулем на базе чипа DS1307, используется аппаратная шина I2C
    //    iarduino_RTC time(RTC_DS3231);                          // Объявляем объект time для работы с RTC модулем на базе чипа DS3231, используется аппаратная шина I2C
    unsigned long facttime;                                                           //
    void setup(){                                               //
        delay(300);                                             // Ждем готовности модуля отвечать на запросы
        Serial.begin(9600);                                     // Инициируем передачу данных в монитор последовательного порта на скорости 9600 бод.
        time.begin();                                           // Инициируем работу с модулем.
        time.settime(0,51,21,27,10,15,2);                       // Записываем время в модуль: 0 сек, 51 мин, 21 час, 27, октября, 2015 года, вторник.
       
    }                                                           //
    void loop(){                                                //
     
        if(millis()%10000==0){                                   // Если прошло 10 секунд.
          Serial.print(time.gettime("d-m-Y, H:i:s, D"));      // Выводим время.
          Serial.print(" FactTime: ");
          facttime = millis()/1000;                                 //фактическое время после запуска
          Serial.println(facttime);
          delay(1);                                             // Приостанавливаем скетч на 1 мс, чтоб не выводить время несколько раз за 1мс.
        }                                                       //
    }                  
     

    Вложения:

    • port2.jpg
      port2.jpg
      Размер файла:
      83,4 КБ
      Просмотров:
      365