проблема Arduino Uno + RTC DS1307

Тема в разделе "Arduino & Shields", создана пользователем Crusader, 17 май 2014.

  1. Unixon

    Unixon Оракул Модератор

    Он большой и без R6 ни на что не влияет.

    Меня смущает, правда, что мелкосхема DS1307 не должна потреблять в режиме постоянной мощности, для которого оценка потребления неплохо сходится с измеренным уровнем напряжения на Vbat.
     
  2. flytortoise

    flytortoise Нерд

    Закоротил я R6 !
    Напряжение на 3 ноге естественно стало равно напряжении на батарее 3,5V
    Проверил работоспособность.
    Все работает без замечаний даже если отключить внешнее питание то часы продолжают идти и не сбрасываются!!!
    Все равно не понятно почему после КИТАЙСКОГО делителя так падает напруга при отсутствии питающего аж до 0,68V.

    СПС за участие!
     
    Angbor нравится это.
  3. Unixon

    Unixon Оракул Модератор

    Потому, что делитель состоит не только из R4 и R6, а еще из Rrtc !
    У вас получается Vrtc = Vbat * [R4*Rrtc/(R4+Rrtc)] / {R6 + [R4*Rrtc/(R4+Rrtc)]} = 0.68V
    Откуда эквивалентное сопротивление часов Rrtc ~= 134k .
     
  4. flytortoise

    flytortoise Нерд

    Так почему китайцы устроили такой делитель?
    С ним же ОНО не работает как надо!
     
  5. andrey_shatov

    andrey_shatov Нуб

    Добрый вечер уважаемые присутствующие, возник вопрос, будет ли работать данный код с такой схемой? Новичок в ардуино, проверить сам пока не могу жду RTC с Китая. Задача простая, необходимо запускать реле для управления высокой нагрузкой в течении 3 секунд в понедельник с 12:00 (дня), раз в неделю. Заинтересовал полив комнатных растений, но наслышан о качестве почвенных датчиков влажности, окисляются через определенное время начинают обманывать, поэтому хочу осуществить данный проект просто через часы реального времени (RTC) и реле.
    Код (Text):
    #include <Wire.h>
    #include <DS1307.h>
    RTC_DS1307 RTC;

    int Relay1 = 12;
    int On_Time =0;
    int Off_Time =0;
    int Curent_Time = 0;

    void setup()
    {
      Serial.begin(9600);
      pinMode(Relay1, OUTPUT);

    RTC.stop();
      RTC.set(DS1307_SEC,1);
      RTC.set(DS1307_MIN,21);
      RTC.set(DS1307_HR,4);
      RTC.set(DS1307_DOW,1);
      RTC.set(DS1307_DATE,6);
      RTC.set(DS1307_MTH,4);
      RTC.set(DS1307_YR,15);
      RTC.start();
    }

    void loop()
    {
      RTC.get(rtc,true);
      for(int i=0; i<7; i++)
      {
        if(Day == Monday && Hour == 12 && Minute == 0 && Second >= 0){digitalWrite(Relay1, HIGH);}
        else {digitalWrite(Relay1, LOW);}
    if(Day == Monday && Hour == 12 && Minute == 0 && Second >= 3){digitalWrite(Relay1, LOW);}
        else {digitalWrite(Relay1, LOW);}
    // задаём день понельник время включения с 12.00.00 - 12.00.03; на 3 секунды

    }
    [​IMG]
     
  6. MESS

    MESS Гик

    flytortoise
    Откуда Вы взяли схему модуля часов? Даже по вашей ссылке (фото модуля) видно, что отуствует R7 . Я посмотрел такие модули (они точно такие) там номинал R4 3,5 -5 кОм. И счет времени не теряют
     
    Последнее редактирование: 6 апр 2015
  7. flytortoise

    flytortoise Нерд

    В Инете навалом схем да хоть тут: http://arduino.shopium.ua/products/arduino-ds1307-rtc-module/
    При чем тут R7?
    Что касается R4 то его номинал 510к
     
    MESS нравится это.
  8. ALS58

    ALS58 Нуб

    На Ютуб забей это : Лечим модуль часов реального времини I2C RTC DS1307 (и получишь ответ)
     
  9. Pushken

    Pushken Нуб

    Выпаял всё как в ролике, но результат каким был таким и остался. Время сбрасывается после отключения питания. Батарейку менял. Модуль точно такой же как в ролике. Подскажите в чем проблема может быть или хотя бы как найти причину
     
  10. FlameWind

    FlameWind Нерд

    Не пойму в каком виде выдаются данные с модуля. В Serial выводится все правильно. А на TFT фигня какая-то.
     
  11. viktor-gon

    viktor-gon Нуб

    Народ, может кто сможет прояснить ситуацию... Есть уже 2 десятка этих модулей, не рабочих. Иногда попадаются бракованные, вот и накопилось. Решил все это хозяйство "починить". Заказал я новые микросхемы DS1307 начал впаивать в "бракованные" модули, но они все равно не заработали. Потом, распаял полностью нерабочий модуль, прозвонил все дорожки - все соответствует схеме... (схема глючная, как у большинства, где идет неправильная зарядка батарейки) спаял все обратно, кроме батарейки - и о чудо модуль заработал. Впаял гнездо с батарейкой, вставил на место батарейку - и все модуль не определяется ни в какую.

    Потом, я из всех остальных (в которых я даже и не успел еще перепаять DS1307) вытащил батарейки, все модули определились. Ставлю назад батарейку - модули как буд-то "дохлые". Потом думал, может батарейки плохие, но вставлял их в заведомо рабочий модуль, и он прекрасно работает. Короче, чертовщина... Хелп!

    Проверял и переделанные модули (R6 - перемычка, диод и R4 убрал) - никакой разницы, результат один: с батарейкой модуль даже не определяется, без батарейки все ОК. Где копать?

    VCC = 4.82В Vbat = 3.1 - 3.2 (в зависимости от батарейки)
     
    Последнее редактирование: 14 июл 2016
  12. s1984i

    s1984i Нерд

    подскажите почему через мин 15 например, часы начинают показывать единицы. часы подключены к ардуино мини через узб
    01-01-2001, 01:01:01, Sun
     
    Последнее редактирование: 8 дек 2016
  13. Angbor

    Angbor Нерд

    Отпишусь на память.
    Та же самая история, литиевый аккум, на ногах Vbat GND 0.68V
    При отключении питания время не держит.
    Замкнул R6 - работает.
     
  14. repon

    repon Нуб

    Тоже проблема с Uno + DS1307.
    Конденсатор и резистор R4 выпаял, R6 замкнул.

    Код (C++):
    #include <Wire.h>
    #include <TimeLib.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;
    }
     
    на com порту ничего не выводится.
    батарейка CR2032 свежая