3d_killer

ds1307 arduino, принудительный запуск часов

4 сообщения в этой теме

3d_killer    4

Не могу разобраться, какие только библиотеки не пробовал, часы иногда при включении МК не стартуют, стоят и все, иногда стартуют (работа без батарейки), попробовал выставлять время перед запуском, тогда стартует постоянно, как принудительно их запустить. Документацию я читал но не пойму как эти биты переставлять....

Вот программа при которой часы стартуют всегда, но как мне их запускать всегда без выставления времени?

#include <Wire.h>
#include "RTClib.h"
#include <avr/wdt.h>            //Библиотека сторожевого таймера
RTC_DS1307 RTC;

void setup(void) 
  {
    wdt_enable(WDTO_2S);
    Serial.begin(19200);
    Wire.begin();
    RTC.begin();
    if (! RTC.isrunning()) {Serial.println("RTC is NOT running!");}
    // строка ниже используется для настройки даты и времени часов
     RTC.adjust(DateTime(__DATE__, __TIME__));
  }

void loop(){
  delay(1000);
  wdt_reset();
  //Главная
  Serial.print("page top");
  Serial.write(0xff);
  Serial.write(0xff);
  Serial.write(0xff);
  //Получаем время
  DateTime now = RTC.now();
   
   Serial.print("top.t0.txt=");
   Serial.print("\"");
   Serial.print(now.hour());
   Serial.print("\"");
   Serial.write(0xff);
   Serial.write(0xff);
   Serial.write(0xff);

   Serial.print("top.t1.txt=");
   Serial.print("\"");
   Serial.print(now.minute());
   Serial.print("\"");
   Serial.write(0xff);
   Serial.write(0xff);
   Serial.write(0xff);

   Serial.print("top.t2.txt=");
   Serial.print("\"");
   Serial.print(now.second());
   Serial.print("\"");
   Serial.write(0xff);
   Serial.write(0xff);
   Serial.write(0xff);

}

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Чтобы часы запускались нужно в секунды установить 1, что-то типа такого в сетап, бибилиотека дурная, почему нельзя отдельно 1 в секунды записать, возможно это прописано в RTC begin, нужно смотреть библиотеку

rtc.adjust(DateTime(F(__DATE__), F(__TIME__))1);

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
mazzi    32

В микросхеме часов DS1307 старший бит по адресу 0x00 отвечает за работу тактового генератора. Для запуска генератора его нужно сбросить в 0.

Нужно написать что-то вроде:

char c = DS1307.read(0);    // прочитать из часов байт по адресу 0
c&=0x7f;                    // сбросить старший бит для запуска часов
DS1307.write(0,c);          // вернуть на место исправленное значение

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
UTSource

Найдите миллионы труднодоступных

электронных компонентов

Ваша публикация должна быть проверена модератором

Гость
Вы не авторизованы. Если у вас есть аккаунт, пожалуйста, войдите.
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Восстановить форматирование

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.

Загрузка...