Часики ds3231 и ардуинка

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

Joiner пишет:

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

Я может не в курсе каких-то нюансов.. Звучит примерно как: "Я слышал, что если пришить собаке пятую ногу то это будет лучше, чем четыре. Пришил, но она теперь спотыкается, и вообще еле ходит" :-)

Joiner
Offline
Зарегистрирован: 04.09.2014

dimax пишет:

Я может не в курсе каких-то нюансов.. Звучит примерно как: "Я слышал, что если пришить собаке пятую ногу то это будет лучше, чем четыре. Пришил, но она теперь спотыкается, и вообще еле ходит" :-)

dimax, не совсем понял Вас. Вы имеете в виду, что прерывания не стоит прикручивать?

Мне показалось удобно с прерываниями. Пусть программа занимается чем угодно, но по сигналу с SQW часиков  чтобы раз в секунду показания обновились. Понравилось, что даже мелодия с использованием функции tone играет и практически не замечает прерываний. Понравилось то....ну в общем, понравилось. Хотелось бы понять почему первая библиотека прекрасно работает в скетче с прерываниями, вторая библиотека и скетч с обращением к регистрам часов зависают наглухо. Это так должно быть, или я что-то не так делаю? Пробовал еще сделать прерывания в скетче с I2C дисплеем 16х2. В нем на дисплей выводятся секунды (millis/1000 без применения RTC). Попытка запустить вывод на экран через прерывания (при чем пробовал int.0 и int.1) приводит к зависанию. Получается, что использование I2C исключает применение прерываний?

И еще подумалось...раз одна из библиотек (названная мной "первая") работает без библиотеки Wire.h , значит возможно обращение к регистрам часов и без нее? Или нет?

fogary
Offline
Зарегистрирован: 05.03.2016

Joiner пишет:
Получается, что использование I2C исключает применение прерываний?
Не правильно, сами часы сидят на шине I2C и как Вы пишите с первой библиотекой прерывания работают.

Joiner пишет:
И еще подумалось...раз одна из библиотек (названная мной "первая") работает без библиотеки Wire.h , значит возможно обращение к регистрам часов и без нее? Или нет?
Скорее всего Wire.h подключается в самой библиотеке.

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

Joiner пишет:

dimax, не совсем понял Вас. Вы имеете в виду, что прерывания не стоит прикручивать?

А какие аргументы за то, что стОит?  Если питание от батареек, и часовой чип каждую секунду будит МК что б тот обновил цифры на жк и снова пошёл спать -тогда стоит. В остальных случаях не вижу никакой необходимости.

Joiner пишет:

Получается, что использование I2C исключает применение прерываний?

Не исключает. Программа скорее всего ждёт чего-то, что в перывании не может наступить.

Joiner пишет:

И еще подумалось...раз одна из библиотек (названная мной "первая") работает без библиотеки Wire.h , значит возможно обращение к регистрам часов и без нее? Или нет?

В библиотеке может быть своя реализация протокола wire.

Joiner
Offline
Зарегистрирован: 04.09.2014

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

Joiner
Offline
Зарегистрирован: 04.09.2014

Вот видео о том, что про часы получается https://youtu.be/n7jPeFdNzbk

Joiner
Offline
Зарегистрирован: 04.09.2014

Что-то............................

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

Joiner пишет:

Что-то............................

Ты чего сегодня злобствуешь? Мне тоже так ни...я и не приходит((((. И электропочта снизу, не отвечает.((((

Joiner
Offline
Зарегистрирован: 04.09.2014

bwn пишет:

Joiner пишет:

Что-то............................

Ты чего сегодня злобствуешь? Мне тоже так ни...я и не приходит((((. И электропочта снизу, не отвечает.((((

Уже перестал :) уже добрый и веселый

хоть и куча посылок из Китая где-то зависла....не знаю с чем связано :(

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

Joiner пишет:

хоть и куча посылок из Китая где-то зависла....не знаю с чем связано :(

Думаю с посевом "Яровых", тоже стали гораздо дольше ползти.((((

maksmkv
Offline
Зарегистрирован: 07.04.2013

Всем привет, может есть  у кого-нибудь готовый кодж  для  установки  часов кнопками. 2 или  3 кнопки  что бы было. Самый простой  вариант. У самого  работают  часы, постоянно отстают,  а  подстраивать их приходится только  подключив  к  ПК.

Joiner
Offline
Зарегистрирован: 04.09.2014

maksmkv пишет:

..готовый кодж  для  установки  часов.......

Я пока не писал код установки часов. Как установил время скетчем, так и идут точно, коррекция не требуется. За пол года наблюдений ушли вперед на 3 секунды. А у Вас какие часы? В смысле название микросхемы.

maksmkv
Offline
Зарегистрирован: 07.04.2013

ds3231 - они  у  меня были с CR2032, в интернете  нашел  видео  по которому удалил  диод, 2 резистора  и  замнул  контакты. Время  показывает  правильно,  но  при отключении на долгое время -  отставать начинают. Код смогу скинуть  чуть позже

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

bwn пишет:

Joiner пишет:

хоть и куча посылок из Китая где-то зависла....не знаю с чем связано :(

Думаю с посевом "Яровых", тоже стали гораздо дольше ползти.((((

Выходит, это массовое явление?

А то у меня уже стало появляться желание посетить локальный постофис если не на танке, то хотя бы с гранатой...

Получается - бесполезно, т.к. они ни при чем...

 

PS. Создал тему в "Отвлеченных..." у кого возникли проблемы - просьба отписаться там.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

maksmkv пишет:

Всем привет, может есть  у кого-нибудь готовый кодж  для  установки  часов кнопками. 2 или  3 кнопки  что бы было. Самый простой  вариант. У самого  работают  часы, постоянно отстают,  а  подстраивать их приходится только  подключив  к  ПК.

А смысл?

Часы с кнопками можно купить в любом ларьке - зачем самому делать.

А самый простой вариант - подключить часы к И-нету и забыть вообще о кнопках.

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

maksmkv пишет:

ds3231 - они  у  меня были с CR2032, в интернете  нашел  видео  по которому удалил  диод, 2 резистора  и  замнул  контакты. Время  показывает  правильно,  но  при отключении на долгое время -  отставать начинают. Код смогу скинуть  чуть позже

ионистор и диод типа Д9 (у меня их много, других не ищу)

Joiner
Offline
Зарегистрирован: 04.09.2014

andriano пишет:

maksmkv пишет:

Всем привет, может есть  у кого-нибудь готовый кодж  для  установки  часов кнопками. 2 или  3 кнопки  что бы было. Самый простой  вариант. У самого  работают  часы, постоянно отстают,  а  подстраивать их приходится только  подключив  к  ПК.

А смысл?

Часы с кнопками можно купить в любом ларьке ............

Использую свои часы как отладочную плату, когда нужно. Там есть мониторчик, аналоговая клавиатура, буззер и RTC. Подключил к компу и тренируйся, а когда не используется, работает как часики. Вообще мечтаю сделать блок в который воткнуть все, и TFTдисплей, и радиомодуль, и микросхему EEPROM, и SD карту, и RTC, и буззер....повесить его над столом. В свободное время будет метеостанцией. А надо будет что-то попробовать, не надо ни каких соплей собирать, сиди - тренируйся.

maksmkv
Offline
Зарегистрирован: 07.04.2013

Часы больше для  опыта, так же  в  них у  меня установлен 433 передатчик и  TSOP для приема ИК  сигнала с  пульта ду - упарвление люстрой, с показом часов  на МК PT6961

maksmkv
Offline
Зарегистрирован: 07.04.2013

Это  про  что?

maksmkv
Offline
Зарегистрирован: 07.04.2013

Сможете посомтреть  код   -  может  в  нем дело -  при отключении  устройства,  часы начинают отставать. Что  может быть не так?

#include "Wire.h"   //код полностью рабочий 2015
#define DS1307_I2C_ADDRESS 0x68

#include "OasisLED.h"
#include <Arduino.h>

#include <IRremote.h>
#include <RCSwitch.h>


int RECV_PIN = 11;
int push_button=0;

long  buttons[]={836800,836656,836611};


uint8_t clockPin = 3;
uint8_t strobePin = 2;
uint8_t dataPin = 4;
OasisLED ledDisplay = OasisLED(clockPin, strobePin, dataPin);

IRrecv irrecv(RECV_PIN);
decode_results results;
RCSwitch mySwitch = RCSwitch();




byte decToBcd(byte val)
{
  return ( (val/10*16) + (val%10) );
}

byte bcdToDec(byte val)
{
  return ( (val/16*10) + (val%16) );
}

void setDateDs1307(byte second,        // 0-59
                   byte minute,        // 0-59
                   byte hour,          // 1-23
                   byte dayOfWeek,     // 1-7
                   byte dayOfMonth,    // 1-28/29/30/31
                   byte month,         // 1-12
                   byte year)          // 0-99
{
   Wire.beginTransmission(DS1307_I2C_ADDRESS);
   Wire.write(0);
   Wire.write(decToBcd(second));    
   Wire.write(decToBcd(minute));
   Wire.write(decToBcd(hour));     
   Wire.write(decToBcd(dayOfWeek));
   Wire.write(decToBcd(dayOfMonth));
   Wire.write(decToBcd(month));
   Wire.write(decToBcd(year));
   Wire.endTransmission();
}

void getDateDs1307(byte *second,
          byte *minute,
          byte *hour,
          byte *dayOfWeek,
          byte *dayOfMonth,
          byte *month,
          byte *year)
{

  Wire.beginTransmission(DS1307_I2C_ADDRESS);
  Wire.write(0);
  Wire.endTransmission();

  Wire.requestFrom(DS1307_I2C_ADDRESS, 7);

  *second     = bcdToDec(Wire.read() & 0x7f);
  *minute     = bcdToDec(Wire.read());
  *hour       = bcdToDec(Wire.read() & 0x3f); 
  *dayOfWeek  = bcdToDec(Wire.read());
  *dayOfMonth = bcdToDec(Wire.read());
  *month      = bcdToDec(Wire.read());
  *year       = bcdToDec(Wire.read());
}

void setup()
{
  byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
  Wire.begin();
  ledDisplay.initialize();
//  Serial.begin(9600);

  irrecv.enableIRIn(); // Start the receiver
  mySwitch.enableTransmit(10);
  mySwitch.setPulseLength(251);
  
  
  second = 30;
  minute = 00;
  hour = 23;
  dayOfWeek = 7;
  dayOfMonth = 17;
  month = 5;
  year = 15;
//  setDateDs1307(second, minute, hour, dayOfWeek, dayOfMonth, month, year);
}

void loop()
{
 printTime();

} 

void printTime()
{
	 byte second, minute, hour, dayOfWeek, dayOfMonth, month, year;
         getDateDs1307(&second, &minute, &hour, &dayOfWeek, &dayOfMonth, &month, &year);

        ledDisplay.setValue(hour*100+minute);
        
        if(irrecv.decode(&results))
  {
//    Serial.println(results.value, HEX); 

  
  
    if ((results.value == 0x37) || (results.value == 0x10037) )
    {
        push_button++;
        if (push_button==0){regim3();}
        if (push_button==1){regim1();}
        if (push_button==2){regim2();}

if (push_button>2){push_button=0;}
       // mySwitch.send(buttons[0],24); 
    }
    
    delay (500);   
    irrecv.resume(); 
  }
    
}

void regim1()
{
mySwitch.send(buttons[0],24);
}

void regim2()
{
mySwitch.send(buttons[1],24);
}

void regim3()
{
mySwitch.send(buttons[2],24);
}


 

Joiner
Offline
Зарегистрирован: 04.09.2014

maksmkv пишет:

.......  нашел  видео  по которому удалил  диод, 2 резистора  и  замнул  контакты.........

На сколько я помню, достаточно просто удалить диод, т.е. разорвать цепь VCC --> R5 --> D2 --> Bat. Т.е. если просто выкинуть диод, то цепь будет разорвана. Не знаю какие Вы еще два резистора удаляли, и какие контакты замыкали. Может в этом и причина?

 У меня 3 модуля и штук 5 микросхем DS3231. Ни к одному модулю, ни к одной микросхеме, которые я использовал у меня нет претензий к точности хода. Поэтому и пишу часто, что я фанат часиков DS3231. Классная микросхема!

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

Joiner пишет:

На сколько я помню, достаточно просто удалить диод, т.е. разорвать цепь VCC --> R5 --> D2 --> Bat. Т.е. если просто выкинуть диод, то цепь будет разорвана. Не знаю какие Вы еще два резистора удаляли, и какие контакты замыкали. Может в этом и причина?

Поддержу, зарядная цепь простейшая, хоть диод, хоть резистор R5 выкинуть. Больше ничего трогать не надо.
Проверьте контакт и напряжение на батарейке и восстановите, что еще наудаляли и назамыкали.

maksmkv
Offline
Зарегистрирован: 07.04.2013

Схему сможете предоставить сюда? Спасибо

maksmkv
Offline
Зарегистрирован: 07.04.2013

Ок, приедет  еще  модуль -попробую только диод убрать)

MacSim
Offline
Зарегистрирован: 28.11.2012

maksmkv пишет:

Сможете посомтреть  код   -  может  в  нем дело -  при отключении  устройства,  часы начинают отставать. Что  может быть не так?

что его смотреть при отключении устройства твой код не работает (тихо! об этом никому :)

замерь напряжение батарейки возможно просевшее.

ЗЫ: И... лучше используйте литеевый аккум. он 3.6 вольта., отпаивать диод не придется, заряжается в отличии от батарейки.

Joiner
Offline
Зарегистрирован: 04.09.2014

maksmkv пишет:

Схему сможете предоставить сюда? Спасибо

Здесь даташит, в начале его есть типичная схема.  https://datasheets.maximintegrated.com/en/ds/DS3231.pdf

А здесь про часы с модулем, там схема модуля есть http://cxem.net/mc/mc316.php

Eddy
Offline
Зарегистрирован: 18.02.2017

Joiner пишет:

maksmkv пишет:

.......  нашел  видео  по которому удалил  диод, 2 резистора  и  замнул  контакты.........

На сколько я помню, достаточно просто удалить диод, т.е. разорвать цепь VCC --> R5 --> D2 --> Bat. Т.е. если просто выкинуть диод, то цепь будет разорвана. Не знаю какие Вы еще два резистора удаляли, и какие контакты замыкали. Может в этом и причина?

 У меня 3 модуля и штук 5 микросхем DS3231. Ни к одному модулю, ни к одной микросхеме, которые я использовал у меня нет претензий к точности хода. Поэтому и пишу часто, что я фанат часиков DS3231. Классная микросхема!

Разрешите поинтересоваться как у фаната DS3231. Так и не нашел однозначного ответа как правильнее всего эксплуатировать этот модуль: с lir2032,  с элементом cr2032 без доработок, с с элементом cr2032 вырезав резистор в цепи заряда .  На контактах гнезда для элемента (без батарейки )при подключени  4,6в.

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

 Eddy,

 

Eddy
Offline
Зарегистрирован: 18.02.2017

согласен. ткните носом кого. быстрее зарежу. где он этот r5

Eddy
Offline
Зарегистрирован: 18.02.2017

этого резать? Зарезал вобщем шакала. напряжение на держателях элемента (аккумулятора) пропало. Будем посмотреть.

Genri5
Offline
Зарегистрирован: 31.05.2016

Достаточно выпаять справа от микросхемы диод.

Eddy
Offline
Зарегистрирован: 18.02.2017

обведенный красным?  второпях обводил. Возможные отрицательные последствия есть?

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

Genri5 пишет:

Достаточно выпаять справа от микросхемы диод.

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

Eddy
Offline
Зарегистрирован: 18.02.2017

Где он. Куда он спрятался?

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

Фигассе себе. Т.е. они еще схему заряда "улучшили".)))) Когда свой, года два назад, потрошил, там хоть делителем пытались напряжение в норму привести.

Eddy
Offline
Зарегистрирован: 18.02.2017

честно говоря схему из интернета взял но на первый взгдяд с железкой совпадает

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

Eddy пишет:

честно говоря схему из интернета взял но на первый взгдяд с железкой совпадает

Все может быть. Я с тех пор модулями не покупал.

Joiner
Offline
Зарегистрирован: 04.09.2014

Убрать диод вполне достаточно. Я так и сделал. Мои корявенькие часики отходили более полутора лет. Ушли вперед от атомных из интернета всего на 20 секунд!!!!!!!!!! Батарейку не менял, время не корректировал. Питаются от какой-то старенькой зарядки от мобилы. Напряжение в сети вырубалось не менее 3-х раз. Показали полную неубиваемость. Это самые точные часы в моем доме, не считая китайскую метеостанцию, которая подправляет свое время по какому-то передатчику ДВ-диапазона из Европы. Время на них совпадает.