RTC DS1307. Как настроить дату и время раз и навсегда?

DiMan
Offline
Зарегистрирован: 20.04.2016

Доброго времени суток

Появился небольшой вопрос. Как настроить дату/время по включению, будь то программно заданное значение или же вручную (из монитора порта), я понимаю. Но как единожды настроить часики и заставить их шагать даже при выключенном МК? Хочу лишь раз прошить ардуинку, настроить время и забыть о дальнейшем её подключении к ПК и каких-либо настройках, +при этом возможны отключения платы от сети

Пользуюсь библиотекой   "DS1307RTC" (http://www.pjrc.com/teensy/td_libs_DS1307RTC.html)

Помогите юному горе-изобретателю

Заранее, спасибо

arDubino
Offline
Зарегистрирован: 12.01.2017

батарейку вставить надо прежде :)))

DiMan
Offline
Зарегистрирован: 20.04.2016

имеется. и для подключения немного подпаял плату (выпаял D1, R4 и R6, а R6 замкнул)

bwn
Offline
Зарегистрирован: 25.08.2014

Ну так часы они вроде сами без ардуинки и компа время считают. В чем вопрос то?
Установите из монитора. Провод выдерните и разрежьте, от соблазна.))))

nik182
Offline
Зарегистрирован: 04.05.2015

Запусть один раз скетч, а потом закоментировать строки

  // 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;
    } 

 

DiMan
Offline
Зарегистрирован: 20.04.2016

спасибо. что-то заглупил.. 

DiMan
Offline
Зарегистрирован: 20.04.2016

запустил из библиотеки DS1307RTC пример SetTime, настроил время, всё прекрасно. Вгрузил свой скетч, всё работает. Сбрасывал через кнопку на самой ардуинки - время всё равно не сбивалось, отлично. Отключил питание и подключил снова - время сбилось. 

#include <Wire.h>
#include <Time.h>
#include <TimeLib.h>
#include <DS1307RTC.h>
#include <LiquidCrystal_I2C.h>

LiquidCrystal_I2C lcd(0x27, 20, 4);

void setup() 
{
  lcd.begin();
  lcd.backlight();
  lcd.clear(); 
}
void loop() 
{
    tmElements_t tm;
    //
    if (RTC.read(tm))
      {
        lcd.setCursor(0, 0);
        print2digits(tm.Hour);
        lcd.print(":");
        print2digits(tm.Minute);
        lcd.print(":");
        print2digits(tm.Second);
        //
        lcd.setCursor(0, 1);
        lcd.print(tm.Day);
        lcd.print(".");
        lcd.print(tm.Month);
        lcd.print(".");
        lcd.print(tmYearToCalendar(tm.Year));
      }
    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);
      }
}

void print2digits(int number) 
  {
    if (number >= 0 && number < 10) 
      {
        lcd.print("0");
      }
    lcd.print(number);
  }

 

nik182
Offline
Зарегистрирован: 04.05.2015

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

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Посмотрите даташит DS1307. Например, в DS3231 есть специальный бит конфигурации, отвечающий за работу осциллятора от батареи. Если он установлен неправильно, то при выключенном питании (и подключённой батарее) часы не идут, а только помнится время выключения питания.

DiMan
Offline
Зарегистрирован: 20.04.2016

да, действительно ножки батарейки были плохо припаяны. Спасибо!

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

DiMan пишет:

да, действительно ножки батарейки были плохо припаяны. Спасибо!

с ножками всегда так