DS1307 показывают странное время, которое стоит.

FlyTortoise
Offline
Зарегистрирован: 13.03.2015

Убрал (коротнул) R6 и естественно все заработало.

Думаю так и оставить.

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

Непонятно одно зачем ТАКОЕ решение сделали китайцы!

И есть ли кто-то у кого ОНО работает без исключения R6!

BarberXP
Offline
Зарегистрирован: 30.11.2014

У меня работает ОНО. Я сначала поставил туда обычную батарейку 2032, напряжением 3 вольта. И не мог понять, почему часы при отключении от USB останавливаются.
После замены батареи на штатный аккумулятор LIR 2032 напряжением 3,6 вольта часы стали работать. Однако, я заметил отставание примерно секунд на 20 в месяц.
Пока мне это не актуально, руки дойдут - займусь исследованиями этого феномена. А пока что заказал модуль RTC более новой модели. Точно не помню, какая. Но хай буде... :-)

FlyTortoise
Offline
Зарегистрирован: 13.03.2015

Я заказал себе такой:

http://www.ebay.com/itm/400503978923

Вроде кварц внутри с термостабилизацией. Деньги те же!

Проверю отпишусь!

P.S. на сколько я понял из прочитанного в Инете то бибилиотеки от ds1307 подходят к DS3231.

Кстати хочу вот, что спросить:

есть бибилиотеки разные, а вот как найти их описание?

Очень мало кто из авторов в архивы к библиотекам кладет развернутое описание процедур, функций, переменных и т.д.

Вообщем вопрос в том как оптимальней искать эти даташиты к библиотекам

Заранее СПС.

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

FlyTortoise пишет:

Я заказал себе такой:

http://www.ebay.com/itm/400503978923

Вроде кварц внутри с термостабилизацией. Деньги те же!

Проверю отпишусь!

P.S. на сколько я понял из прочитанного в Инете то бибилиотеки от ds1307 подходят к DS3231.

Кстати хочу вот, что спросить:

есть бибилиотеки разные, а вот как найти их описание?

Очень мало кто из авторов в архивы к библиотекам кладет развернутое описание процедур, функций, переменных и т.д.

Вообщем вопрос в том как оптимальней искать эти даташиты к библиотекам

Заранее СПС.

Библиотеки совместимы, но не 100%.

Даташит на библу вы вряд ли найдете, в ней есть файл keyword, в нем перечень допустимых команд, дальше методом тыка.

X-Dron
Offline
Зарегистрирован: 24.01.2015

для DS3231 предлагаю такой подход и модифицированную библиотеку.

http://forum.amperka.ru/threads/%D0%A7%D0%B0%D1%81%D1%8B-ds-3231.4688/#p...

Еще пример использования

http://forum.amperka.ru/threads/rtc1307-%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D...

FlyTortoise
Offline
Зарегистрирован: 13.03.2015

Вот тоже есть на что посмотреть!

http://www.rinkydinkelectronics.com/library.php

Причем с отличными МАНУАЛАМИ!!!!!

 

X-Dron
Offline
Зарегистрирован: 24.01.2015

БОльшая часть кода по моей первой ссылке разжевана здесь
http://wiki.amperka.ru/%D0%B2%D1%80%D0%B5%D0%BC%D1%8F:rtc-%D0%B8%D0%BD%D...

Я просто адаптировал его под DS3231.

Вторая ссылка - просто пример того, что можно сделать на основе ядра по первой ссылке.

 

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

Несколько дней пытаюсь запустить модуль. Дополнительная EEPROM с адресом 0x50 отлично пишется и читается. DS1307 на сканере шины присутствует 0x68. Менял кварц. Рассматривал схему. Пришёл к выводу, что батарея подключена неправильно. Она должна быть подсоединина в точку соединения R4 и R6. В этом случае логика схемы становится нормальной. Батарея вешается на ногу м.с. как в мануале. Выводится на контакт ВАТТ. При извлечении батареи на ноге м.с. остается напряжение с делителя R4 - R6. Главное в батарею не прёт ток через маленький резистор R5 и она не потечёт через  пару недель.  Переделал. Закоротил перед вставкой батарею не на долго, что бы сбросить набранные 4 вольта. Сейчас на ней 3.3 вольта. Часы при чтении любого адреса отдают 0x7D. Что то дёргают на шине, но время не отдают.    

44
44 аватар
Offline
Зарегистрирован: 12.01.2015

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

Пожалуйста подскажите как сделать так, что бы вместо отображения секунд на LCD 16x2 заменить на мигающие двоеточие... Понимаю, что это как то просто, но я ступоре :( Подскажите пожалуйста как это описать в коде. 

Сейчас это выглядет так 16:51:37 что в полне нормально, но хотесь бы 16:51 где " : " мигает в такт секунд.

Еще раз извеняюсь за такой вопрос :)

#include <Wire.h>
#include <OneWire.h>
#include <LiquidCrystal_I2C.h>
//###########################################################
#define DS1307_I2C_ADDRESS 0x68
byte decToBcd(byte val){ return ( (val/10*16) + (val%10) ); }
byte bcdToDec(byte val){ return ( (val/16*10) + (val%16) ); }
void setDateDs1307(byte second,byte minute,byte hour){
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.write(decToBcd(second));
  Wire.write(decToBcd(minute));
  Wire.write(decToBcd(hour));
  Wire.endTransmission();
}
void getDateDs1307(byte *second,byte *minute,byte *hour){
  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();
  Wire.requestFrom(DS1307_I2C_ADDRESS, 3);
  *second     = bcdToDec(Wire.read());
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read());
}
//###########################################################
LiquidCrystal_I2C lcd(0x27,16,2); 
//###########################################################
void setup()
{
  Wire.begin();
  lcd.init();
  lcd.backlight();
}
//###########################################################
void loop()
{
  byte second, minute, hour;
  getDateDs1307(&second, &minute, &hour);
  // Выводим часы на экран
  lcd.setCursor (0, 0);
  if (hour < 10)
  { lcd.print ("0"); lcd.print (hour); }
  else
  { lcd.print (hour); }

  lcd.print (":");

  if (minute < 10)
  { lcd.print ("0"); lcd.print (minute); }
  else
  { lcd.print (minute); }

  lcd.print (":");

  if (second < 10)
  { lcd.print ("0"); lcd.print (second); }
  else
  { lcd.print (second); }
}
//###########################################################

 

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

1. Считали значение секунд. 2. Сверили с переменной для хранения. 3. Если равно -  возврат п.1.
4. Если не равно - запомнили в переменную. 5 Проверили переменную "флаг".
6. Если опущен - поднять. 6.1 Печатаем в позицию ":". 6.2 Вернулись п.1. 
7. Если поднят - опустить. 7.1 Печатаем в позицию " ". 7.2 Вернулись п.1

Алгоритм такой.

maksim
Offline
Зарегистрирован: 12.02.2012
...
  lcd.print (second%2?":":" ");

  if (minute < 10)
  { lcd.print ("0"); lcd.print (minute); }
  else
  { lcd.print (minute); }

  lcd.print (second%2?":":" ");
...

 

44
44 аватар
Offline
Зарегистрирован: 12.01.2015

maksim пишет:

...
  lcd.print (second%2?":":" ");

  if (minute < 10)
  { lcd.print ("0"); lcd.print (minute); }
  else
  { lcd.print (minute); }

  lcd.print (second%2?":":" ");
...

 

Спасибо Максим! Работает.

megaice
Offline
Зарегистрирован: 19.03.2012

maksim пишет:

Удаляете свою либу из arduino-1.0.3\libraries или перемещаете ее куда нибудь, качаете вот эту либу и туда же в arduino-1.0.3\libraries распаковываетеперезапускаете IDE. Подключать исключительно к А4 и А5, не забываем про подтягивающие резисторы, если таковых нет не модуле.

Максим день добрый. Не могли бы Вы перезалить данную библиотеку. Ссылка не рабочая.

megaice
Offline
Зарегистрирован: 19.03.2012

megaice пишет:

maksim пишет:

Удаляете свою либу из arduino-1.0.3\libraries или перемещаете ее куда нибудь, качаете вот эту либу и туда же в arduino-1.0.3\libraries распаковываетеперезапускаете IDE. Подключать исключительно к А4 и А5, не забываем про подтягивающие резисторы, если таковых нет не модуле.

Максим день добрый. Не могли бы Вы перезалить данную библиотеку. Ссылка не рабочая.

Огромная просьба Максиму, также всем у кого есть данная библиотека. Не могли бы перезалить данную библиотеку, очень нужна. Буду признателен. 

Maxann
Offline
Зарегистрирован: 29.05.2015

Удалил, как продублировавшееся. (Не нашел функции удаления сообщений)

Maxann
Offline
Зарегистрирован: 29.05.2015

Andrey_Y_Ostanovsky пишет:

Используя RTClib, датированную 1 июля 2014, наткнулся на интересный эффект: если автоматически устанавливать из скетча время с помощью функции rtc.adjust(DateTime(F(__DATE__), F(__TIME__))); - то часы встают при переходе питания на батарейку. Если выставить часы по-старинке, то дальнейшее использование в скетче этой библиотеки (других функций RTClib) - не вызывает никаких глюков с часами.

Как раз именно эта проблема у меня. Часы устанавливаются по времени загрузки скетча. После отключения питания платы ардуины, или при перезагрузке - начинают отсчет времени и даты с момента загрузки скетча.  Подскажите, что значит "по-старинке"? Совсем уже достал этот модуль (

// include the library code:
#include <LiquidCrystal.h>
#include <Wire.h>
#include "RTClib.h"
// LCD пин управления яркостью
#define PWM_LED_PIN 3 

// LCD другие пины
#define PIN_LCD_RS 39
#define PIN_LCD_EN 41
#define PIN_LCD_D4 43
#define PIN_LCD_D5 45
#define PIN_LCD_D6 47
#define PIN_LCD_D7 49
// initialize the library with the numbers of the interface pins
LiquidCrystal lcd( PIN_LCD_RS, PIN_LCD_EN, PIN_LCD_D4, PIN_LCD_D5, PIN_LCD_D6, PIN_LCD_D7 );
RTC_DS1307 RTC;
void setup() {   
  analogWrite( PWM_LED_PIN, 20 ); //установка яркости экрана дисплея
   
  lcd.begin(16, 2); //настройка дисплея - 16x02
//  lcd.print("House4u sol.proj"); //выводим приветсвие
//  lcd.setCursor(0, 1); //перевод курсора на 2 строку
  
   Wire.begin();
   RTC.begin();
   
   RTC.adjust(DateTime(__DATE__, __TIME__));
}
void loop() 
{   
    lcd.setCursor(0, 0);
    DateTime now = RTC.now();
    lcd.print(now.year(), DEC);
    lcd.print('/');
    if (now.month() < 10) lcd.print('0');
    lcd.print(now.month(), DEC);
    lcd.print('/');
    if (now.day() < 10) lcd.print('0');
    lcd.print(now.day(), DEC);
    lcd.setCursor(0, 1);
    if (now.hour()<10) lcd.print('0');
    lcd.print(now.hour(), DEC);
    lcd.print(':');
    if (now.minute()<10) lcd.print('0');
    lcd.print(now.minute(), DEC);
    lcd.print(':');
    if (now.second()<10) lcd.print('0');
    lcd.print(now.second(), DEC);
//    lcd.print(" ");
    delay(990); //задержка 1 секунда
}

 

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Часы никуда не встают. Просто скеч их прописывает при старте.
по старинке это когда время не скечем выставляется а берется откуда-то, например запрашивает через сериал у компа...

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

Закомментируйте 28 строку и посмотрите, что будет.

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

bwn пишет:

Закомментируйте 28 строку и посмотрите, что будет.


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

Maxann
Offline
Зарегистрирован: 29.05.2015

Puhlyaviy пишет:
Часы никуда не встают. Просто скеч их прописывает при старте. по старинке это когда время не скечем выставляется а берется откуда-то, например запрашивает через сериал у компа...

Вы хотите сказать, что строчка

   RTC.adjust(DateTime(__DATE__, __TIME__));
 

постоянно устанавливает время в часах? Но тогда скажите ,почему после перезаливки скетча с закомментированной строкой не приводит ни к чему? Всё так-же при перезагрузке платы или откл питания  питания часы далее не считают время.

Maxann
Offline
Зарегистрирован: 29.05.2015

Puhlyaviy пишет:
bwn пишет:

Закомментируйте 28 строку и посмотрите, что будет.

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

 

Прошу меня послать.. :)
по нужному адресу (ссылке),  где этому научиться

Puhlyaviy
Puhlyaviy аватар
Offline
Зарегистрирован: 22.05.2013

Я понимаю что гугл стал очень сложным...
http://playground.arduino.cc/code/time

Maxann
Offline
Зарегистрирован: 29.05.2015

Только что Проводил очередной эксперимент с комментированием строки 28 кода. 
Результат: Часы СТОЯЛИ все время, пока было отключено питание ардуины... Аппаратная часть?

Измерил напряжение на аккумуляторе (Li-ion LIR2032 3.6v) и ужаснулся - вольтметр показывает 4,25 (!) вольт. При этом когда проверял заряд аккума сразу после получения посылки - батарея показывала около 3,8в. Ардуинка стояла подключенной к сети около суток. Еду за обычной батарейкой - посмотрим как себя поведет модуль в комплекте с ней.

...

Обычная батарейка 3,36в - результат тот-же. Часы стоят при отсутствии питания ардуино (скетч заливал из стандартной библиотеки DS1307RTC. SetTime и ReadTest )
 

Ур-р-р-а-а-а-а! Заработало!
Сделал как в посте http://arduino.ru/forum/programmirovanie/ds1307-pokazyvayut-strannoe-vremya-kotoroe-stoit?page=2#comment-109188 - Низкий поклон FlyTortoise

Maxann
Offline
Зарегистрирован: 29.05.2015

FlyTortoise пишет:

Замерил напряжения самой батареи (вынул из модуля) = 3,5 V

Вы не могли бы замерить напряжение батареи после пары суток работы ардуинки с подключенным питанием? А то у меня показало 4,25в. За аккум страшно.

uagav
Offline
Зарегистрирован: 18.08.2013

По поводу того что модуль засыпает при отключении питания Arduino (соответственно и модуля) при исправном аккумуляторе:

закорачивание резистора R6 или изменение его номиналов ни к чему хорошему не приводит. У меня при этом перестали устанавливаться дата и время (записываться в память). Все проблемы от вывода BAT модуля. Если его не подключать, то таймер прекрасно работает от батарейки. Подключать его надо скорее всего через транзисторный ключ, чтобы исключить его подключение к выводу Arduino в выключенном состоянии. Сейчас над этим работаю, хоть ит заказал себе тоже DS3231 на замену.

FlyTortoise
Offline
Зарегистрирован: 13.03.2015

Проверьте пож. устройство на наличие подмыканий после того как Вы закоротили R6.

Все должно работать с закороткой вместо R6!

Это видно по схеме ОДНОЗНАЧНО!

Возможно банальная токопроводящая соринка где то попала или сопля в момент закоротки.

Ну должно работать и все тут )))))))))

uagav
Offline
Зарегистрирован: 18.08.2013

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

Резисторы R4:R6 представляют собой банальный делитель напряжения, ну типа чтобы не спалить, поэтому нельзя его закорачивать. Но даже с закороченным не работает (я сначала пробовал уменьшать номинал R6). Только если отсоединить BAT. Пробовал через транзистор, но ситуация та же - при выключении таймер замирает. Ну не реле же туда ставить, хотя это реальный выход. Я пока пробовал на биполярниках, теперь попробую на мосфетах, может это что-то даст.

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

А я не морочился и заменил на обычную CR2032, цепь заряда ликвидировал, резистор с нижнего плеча выпаял. Работает как часы))). Ну на кой там заряд, не понимаю. Через 10 лет, что аккуму, что батарее все равно кирдык придет. И проверьте напряжения на ноге для батареи на DS-ке. Для корректной работы вроде в 1,25 раза должно быть меньше, чем напряжение питания (в коэффициенте могу ошибатся).

P/S проверьте, когда часы останавливаются, нет ли напряжения на ноге питания DS-ки. Если оно присутствует и примерно равно напряжению резервного, то там собака и порылась.
 

uagav
Offline
Зарегистрирован: 18.08.2013

bwn, на 8 ноге DS 0,0028В. Во включенном состоянии напряжение аккумулятора 4,35В, на выводе BAT(3) имеем 3,129В и в выключенном соответственно 4,376 и 3,067.

Судя по тому что при извлечении цепи заряда и делителя, и установке CR2032 все работает отлично, то причиной может являться только диод который имеет утечку в обратном направлении что приводит к небольшой подпитке VCC DS1307. Как-то так. Попробую заменить диод на какой-нибудь другой.

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

uagav пишет:

bwn, на 8 ноге DS 0,0028В. Во включенном состоянии напряжение аккумулятора 4,35В, на выводе BAT(3) имеем 3,129В и в выключенном соответственно 4,376 и 3,067.

Судя по тому что при извлечении цепи заряда и делителя, и установке CR2032 все работает отлично, то причиной может являться только диод который имеет утечку в обратном направлении что приводит к небольшой подпитке VCC DS1307. Как-то так. Попробую заменить диод на какой-нибудь другой.

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

uagav
Offline
Зарегистрирован: 18.08.2013

Зачем выкидывать? Я победил!

Теперь и заряжает и тикает при отключении. Всего-то надо поменять резистор и добавить диод в Tiny RTC и вывод BAT к ARDUINO подключать надо тоже через диод.

servassor
Offline
Зарегистрирован: 19.09.2015

тоже мучался с часами: то нормально время показывают, то 28.88.88 

перебрал все библиотеки, менял резисторы от 2.7 до 10 ком

причина оказалась очень простой: провода от часовой микросхемы DS1307

SDA и SCL шли на аурлино почти рядом- 0,5 см раздвинул на 5 см и все пошло.

Dimatkz
Offline
Зарегистрирован: 29.12.2015

Добрый день, подскажите как настроить дату, точнее год в микросхеме DS1307. Мне необходимо прописать первые две цифры. Почему по умолчанию ставятся 20 в скетче. Попробовал перевести дату на компе на 1985- ничего не получилось, при этом год получился 2081. Проблема в том что имеется сервисный прибор для проверки аккумуляторов с отчетностью и генерацией кодов неисправности. Стандартно в нём подводится только время, а дата зашита как в кассовых аппаратах, чтоб небыло махинаций. Само собой наши специалисты пытались нае..ь систему, незнаю что делали, было до моего прихода на работу, теперь прибор не включается, точнее включается, но пишет неправильно установлена дата и выключается. Попытался через стандартны скетч ардуино настроить, но всё кроме года настраивается, а вместо первых цифр 20 получаются хаотичные знаки(№;"%?) Судя по даташиту в микросхеме только две ячейки для года- последние цифры, как реализовано это в скетче? почему не переводится на 19хх

Клапауций 111
Offline
Зарегистрирован: 26.12.2015

Dimatkz пишет:

Добрый день, подскажите как настроить дату, точнее год в микросхеме DS1307. Мне необходимо прописать первые две цифры.

с помощью библиотеки Time

#include <Time.h>
 
setTime(hour(), minute(), second(), day(), month(), 1985);

 

Dimatkz
Offline
Зарегистрирован: 29.12.2015

А можно поподробней, а лучше б скетчем, что в стандартном подправить?

#include <Wire.h>
#include <Time.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;
}
 
 
Здесь настраивается дата и время которое на компе
Клапауций 111
Offline
Зарегистрирован: 26.12.2015

Dimatkz пишет:

А можно поподробней, а лучше б скетчем, что в стандартном подправить?

я не знаю, что занах "стандартный скетч".

время так настраивается


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

void setup() {setTime(hour(), minute(), second(), day(), month(), year());} 
void loop() {}

подробности в файле Readme.txt библиотеки.

Dimatkz
Offline
Зарегистрирован: 29.12.2015

спасибо попробую

Dimatkz
Offline
Зарегистрирован: 29.12.2015

ничего не получается, точнее не изменяется, компилируется, загружается, но не меняется, попробовал так 

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
void setup() {setTime(hour(), minute(), second(), day(), month(), 1985);}
void loop() {}
 и так
 
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
void setup() {setTime(hour(12), minute(31), second(01), day(19), month(11), year(1988));}
void loop() {}
 

 я чего то не понимаю?

Клапауций 111
Offline
Зарегистрирован: 26.12.2015

Dimatkz пишет:

void setup() {setTime(hour(12), minute(31), second(01), day(19), month(11), year(1988));}
void loop() {}
 

 я чего то не понимаю?

да - не понимаешь.

я же показал, как установить 1985-й год

setTime(hour(), minute(), second(), day(), month(), 1985);

добавлено: затем читаешь файл README.TXT библиотеки DS1302RTC и понимаешь, что изменил системное время - нужно сделать RTC.set(now()); для записи в микросхему часов.

*не знаю, зачем я за тебя читаю описалово к библиотекам

--------------------------------------------------------------------------------
The set(time_t t) method sets the RTC to the given time_t value.
The example below first sets the system time (maintained by the Time library) to
a hard-coded date and time, then sets the RTC from the system time. The
setTime(hr, min, sec, day, month, year) function comes from the Time library.

    setTime(23, 31, 30, 13, 2, 2009);   //set the system time to
                                        //23h31m30s on 3Feb2009
    RTC.set(now());                     //set the RTC from the system time

Function return zero if operation successful.

-------------------------------------------------------------------------------- 

 

Dimatkz
Offline
Зарегистрирован: 29.12.2015

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

Нашёл вот такой пример

//Подключаем библиотеки:
#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>
 
void setup()  {
   setSyncProvider(RTC.get);
   //Устанавливаем время в формате:
   //Часы, минуты, секунды, день, месяц, год
   setTime(12,11,59,1,1,2016);
   //Применяем:
   RTC.set(now());
}
void loop()
{
   delay(100);
}
 
всё компилируется и загружается, в мониторе последовательного порта всё идёт отлично. При подключении модуля часов к прибору, часы идут не верно- на 8 часов больше и год начальные цифры- хаотичные знаки. Время и так в приборе настраивается, а вот с годом проблема.
поигравшись с числами года 1990, 2010 или вообще три знака 015 модуль начинает выводить хаотичные даты. По описанию библиотеки модуль должен принимать даты от 1970 до 2100 каким командами это реализовано? помогите
dimax
dimax аватар
Offline
Зарегистрирован: 25.12.2013

Dimatkz, в принципе сам чип по даташиту понимает год от 0 до 99. Всё остальное -личные художества написателей библиотек. Можно записать год без левых библиотек, собссно это всего 4 команды:

Wire.beginTransmission(0x68); // адрес чипа
Wire.write(0x06); //адрес регистра с годом
Wire.write(16); // пишем в него 16 (2016)
Wire.endTransmission(); // конец записи

это нужно выполнить один раз :) И в заголовке нужно подтянуть библу #include "Wire.h" И Wire.begin(); в сетапе.

 

Dimatkz
Offline
Зарегистрирован: 29.12.2015

А каким образом программа понимает что сейчас не 1900, а 2000 год? У меня имеется прибор- тестер акб- сервисный прибор, в котором не меняется дата, только время. кто то до меня пытался сменить дату и прибор завис, при включении пишет что ненастроено время и  время и дпльше не пускает. При замыкании линий данных на микросхеме времени во время включения, прибор запускается со сбросом всех настроек, при этом можно поменять время , язык меню, но дата и год не хотят меняться- прибор перезагружается и при этом год отображается , спереди два хаотичных символа и текущий год, при изменении года- передние символы так же меняются. Пробовал менять год и после этого считывал информацию с находящейся радом EEPROM, после этого сравнивал, если не менять никакие другие настройки в меню тестера то дампы идентичные, получается первые цифры завязаны на эту микруху, в ней то же имеется внутренняя память но как с ней работать, как сравнить данные?

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

Dimatkz, библы просто считывают регистр 0x06 и прибавляют к нему 2000 :) Что у вас там случилось затрудняюсь представить..

Dimatkz
Offline
Зарегистрирован: 29.12.2015

Если не составляет труда, то можно помочь с написанием скетча дл вывода инфы с 9 по 56 адрес содержимого микросхемы в монитор данных, возможно там что то меняется и непонятные передние символы там найдутся.

FlyTortoise
Offline
Зарегистрирован: 13.03.2015

поправьте если я не прав:

в чипе

DS1307

56 байт памяти для хранения пользовательских данных

там что нельзя год хранить?

Dimatkz
Offline
Зарегистрирован: 29.12.2015

FlyTortoise пишет:

поправьте если я не прав:

в чипе

DS1307

56 байт памяти для хранения пользовательских данных

там что нельзя год хранить?

 

можно конечно, помогите считать данные с этих адресов или для начала заполнить их FF

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

Dimatkz, прочитать как-то так:

#include "Wire.h"

void setup() {
Wire.begin();
Serial.begin(9600);
Wire.beginTransmission(0x68);
Wire.write(0x08);
Wire.endTransmission();
Wire.requestFrom(0x68,56);
if(Wire.available()) {
for (byte n=0; n<56; n++){
     Serial.println( Wire.read());     
     }     
  }
}
void loop() {}

 

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

Dimatkz, а вот так стереть ОЗУ

Wire.beginTransmission(0x68);
Wire.write(0x08); // 
for (byte n=0; n<56; n++){ Wire.write(0xFF); } // 
Wire.endTransmission();

Я кстати попробовал, почему-то половина ОЗУ не читается. В даташите на этот счёт никаких пояснений, гугль тоже не в курсе :)

Dimatkz
Offline
Зарегистрирован: 29.12.2015

Спасибо за помощь, прочитать получилось, а вот стереть похоже нет, либо сразу прописывается то же самое, хотя наврятли. Я попробовал вот так

#include "Wire.h"
void setup() {
Wire.begin();
Wire.beginTransmission(0x68);
Wire.write(0x08); //
for (byte n=0; n<56; n++){ Wire.write(0xFF); } //
Wire.endTransmission();
}
void loop() {}
    
Можно подправить?
Dimatkz
Offline
Зарегистрирован: 29.12.2015

У меня прочитанное получилось вот так, -1 это наверное не получилось прочитать?

0
237
190
239
1
2
255
0
255
0
255
0
255
0
255
0
255
0
255
0
255
0
255
0
255
0
255
0
255
0
255
0
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1
-1