Модуль часов реального времени DS3231 и 24C32 I2C Отстает каждые 11 секунд на 1 сеунду

MasterMaa
Offline
Зарегистрирован: 11.10.2017

Добрый день

Проект делаю для себя, ардуинка к ней подключен экран 2004 по i2c, два датчика влажности и температуры dht22, содуль сетевой карты и модуль реального времени.

Проблема модуль часов реального времени DS3231 и 24C32 I2C Отстает каждые 11 секунд на 1 сеунду

модуль такой как на картинке

Код такой, батарейка новая, купил второй такойже модуль у другого продавца в другом городе, проблема осталась. Может кто знает куда копать.



#include <SPI.h>                                      //библиотека для сетевой 
#include <Ethernet2.h>                                //библиотека для сетевой 
#include <Wire.h>                                     //библиотека для инициализации I2C
#include <LiquidCrystal_I2C.h>                        //библиотека для монитора
#include "DHT.h"                                      //библиотека для термодатчика
#include <iarduino_RTC.h>                             //библиотека для датчика точного времени
#define DHTPIN1 2     // пин для сигнала поступающего с датчика
#define DHTPIN2 7     // пин для сигнала поступающего с датчика
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //Установка MAC адреса
IPAddress ip(192, 168, 1, 177);                      //IP адресс       
IPAddress gateway(192, 168, 1, 254);                 //Шлюз
IPAddress subnet(255, 255, 255, 0);                  //маска подсети
EthernetServer server(80);                           //порт веб сервера
DHT dht1(DHTPIN1, DHT22);                            //инициализация  температурного датчика 1
DHT dht2(DHTPIN2, DHT22);                            //инициализация  температурного датчика 2
iarduino_RTC time(RTC_DS3231);                       //инициализация датчика точного времени
byte degree[8] =                                     // кодируем символ градуса для вывода на экран
{
  B00111,
  B00101,
  B00111,
  B00000,
  B00000,
  B00000,
  B00000,
};     
LiquidCrystal_I2C lcd(0x3F,20,4);   // Задаем адрес и размерность дисплея
int Relay1 = 3;                     //инициализируем реле на 3 пине
int Relay2 = 4;                     //инициализируем реле на 4 пине

void setup() {
  lcd.begin();                      // Инициализация lcd             
  lcd.backlight();                  // Включаем подсветку
  lcd.createChar(1, degree);        // Создаем символ под номером 1
  time.begin();                     //включаем датчик точного времени
  dht1.begin();                     //включение температурного датчика 1
  dht2.begin();                     //включение температурного датчика 2
  pinMode(Relay1, OUTPUT);          //инициализация реле
  pinMode(Relay2, OUTPUT);          //инициализация реле
  Ethernet.begin(mac, ip, gateway, subnet);//инициализация сетевой карты
}

void loop() {
  delay(1000);
  float h1 = dht1.readHumidity();  
  float t1 = dht1.readTemperature();
  lcd.setCursor(0, 0);            // Устанавливаем курсор в начало 1 строки
  lcd.print("Hum  =     % ");     // Выводим текст
  lcd.setCursor(7, 0);            // Устанавливаем курсор на 7 символ
  lcd.print(h1, 1);                // Выводим на экран значение влажности
  lcd.setCursor(0, 1);            // Устанавливаем курсор в начало 2 строки
  lcd.print("Temp =     \1C ");   // Выводим текст, \1 - значок градуса
  lcd.setCursor(7, 1);            // Устанавливаем курсор на 7 символ 
  lcd.print(t1,1);                 // Выводим значение температуры
  lcd.setCursor(0, 2);            // Устанавливаем курсор в начало 1 строки
  lcd.print(Ethernet.localIP()); 
  lcd.setCursor(0, 3); 
  lcd.print(time.gettime("H:i:s, D " )); 
  EthernetClient client = server.available();
  if (client) {
    Serial.println("new client");
    // an http request ends with a blank line
    boolean currentLineIsBlank = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        Serial.write(c);
        // if you've gotten to the end of the line (received a newline
        // character) and the line is blank, the http request has ended,
        // so you can send a reply
        if (c == '\n' && currentLineIsBlank) {
          // send a standard http response header
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");  // the connection will be closed after completion of the response
          client.println("Refresh: 5");  // refresh the page automatically every 5 sec
          client.println();
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          // output the value of each analog input pin
         //for (int analogChannel = 0; analogChannel < 1; analogChannel++) {
          //  int sensorReading = analogRead(analogChannel);
            client.print("Temperatura:  ");
            client.print(t1);
            client.print("Hidro: ");
            client.print(h1);
            client.println("<br />");
        //  }
          client.println("</html>");
          break;
        }
        if (c == '\n') {
          // you're starting a new line
          currentLineIsBlank = true;
        }
        else if (c != '\r') {
          // you've gotten a character on the current line
          currentLineIsBlank = false;
        }
      }
    }
    // give the web browser time to receive the data
    delay(1);
    // close the connection:
    client.stop();
    Serial.println("client disconnected");
  }
}
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

MasterMaa, IMHO любое отставание/убегание -это аппартная проблема. Из общих советов:

1- т.к. этот модуль под аккум -то нужно отключить цепь зарядки  если ставите батарейку, иначе она быстро умрёт.

2- промыть спиртом плату если есть хоть малейшие следы флюса.

3- все контакты на пайку, провода минимальной длины.

3- питать желательно от 3,3 вольт.

PS: Происхождение этих плат тоже сомнительно, MAXIM продаёт эти чипы по 4$ /шт в партии 1000 шт.  Китайцы продают по 1$  в розницу уже с платой... есть ли хоть один шанс что это не подделка?  Риторический вопрос как говорится :)

 

a5021
Offline
Зарегистрирован: 07.07.2013

Такой копеешный модуль работает у меня, скоро уже два года будет. Часики ушли вперед, где-то чуть меньше минуты. Подделка? Ничего не имею против таких подделок.

MasterMaa
Offline
Зарегистрирован: 11.10.2017

Цепь зарядки, диодик отпаять. да есть следы флюса но немного, промою.провода 20 см, менял.попробую найти аккум для них, СR2032 - 3 вольта дает. Думаю не подделка, брал у разных магазинов.

dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

MasterMaa пишет:

Цепь зарядки, диодик отпаять. да есть следы флюса но немного, промою.провода 20 см, менял.попробую найти аккум для них, СR2032 - 3 вольта дает.

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

MasterMaa пишет:

Думаю не подделка, брал у разных магазинов.

Какая разница в каком магазине, если производитель поддельных чипов один и тот же? :) Неподдельный стоит в разы больше, вот например в адафруте аналогичный модуль, 14$ . Микросхему отдельно рублей за 250 можно найти.

dj-toxa
Offline
Зарегистрирован: 06.04.2016

а зачем вам #include <iarduino_RTC.h> чем вас родная DS3231RTC.h не устраивает? может в библиотеке че перемудрили, и lcd.print(time.gettime("H:i:s, D " )); смущает почему минуты не m а i

trembo
trembo аватар
Offline
Зарегистрирован: 08.04.2011

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

2. Почему вы при проверке подозрительного железа
используете непонятно откуда взявшийся код
вместо запуска примера из библиотеки?????

MasterMaa
Offline
Зарегистрирован: 11.10.2017

dj-toxa пишет:

а зачем вам #include <iarduino_RTC.h> чем вас родная DS3231RTC.h не устраивает? может в библиотеке че перемудрили, и lcd.print(time.gettime("H:i:s, D " )); смущает почему минуты не m а i

Попробую родную, не помню почему не пользовался родной. возможно из-за незнания.

насчет ("H:i:s, D " - показывает правильно, видно из библиотеку которую я взял, там так. Домой вернусь проверю

 

 

MasterMaa
Offline
Зарегистрирован: 11.10.2017

trembo пишет:
1. Предложения про отмыть флюс конечно дельное, но как и совет укоротить провода происходит от безысходности : а вдруг поможет, ну сделайте же хоть что нибудь. 2. Почему вы при проверке подозрительного железа используете непонятно откуда взявшийся код вместо запуска примера из библиотеки?????

Код писал сам, заисключением вебки, его просто взял с примера из библиотеки.

Да самое интересное, что если отключить питание, то, если я правильно понимаю, модуль должен дальше считать время.и с появлением питания отобразить.

SLKH
Offline
Зарегистрирован: 17.08.2015

MasterMaa пишет:

trembo пишет:
1. Предложения про отмыть флюс конечно дельное, но как и совет укоротить провода происходит от безысходности : а вдруг поможет, ну сделайте же хоть что нибудь. 2. Почему вы при проверке подозрительного железа используете непонятно откуда взявшийся код вместо запуска примера из библиотеки?????

Код писал сам, заисключением вебки, его просто взял с примера из библиотеки.

у вас там и ваш код, и куча обвески, и куча библиотек - как там они между собой разбмраются, нам неведомо.

 

после протирки (тонким слоем):

для диагностики 3231 отключите все ваши датчики/индикаторы, оставьте только ардуину + модуль часов. загрузите самый простой пример из библиотеки - только вывод времени в сериал.

 

 

Штирлиц
Штирлиц аватар
Offline
Зарегистрирован: 13.06.2015

Попробуйте подстроить часики как показано тута  и  подробнее ТУТКИ

MasterMaa
Offline
Зарегистрирован: 11.10.2017

Штирлиц пишет:

Попробуйте подстроить часики как показано тута  и  подробнее ТУТКИ

Мощно, ток я не дорос ддо такой технике, придеться по знакомым поспрашивать. но направление интересное.

MasterMaa
Offline
Зарегистрирован: 11.10.2017

на данный момент сменил батарейки, аккумов не нашел, убрал диод, стала такая тенденция, после запуска идет просадка в 6 секунд отставания, но потом деградация не наблюдаеться, завтра смогу сказать увеличилось отставание или нет.