Можно ли изменить библиотеку RTC, чтобы RTC-сутки проходили за 3(6) реальных часа?

kolyn
Offline
Зарегистрирован: 18.01.2019

Пытаюсь сделать пчеловодные весы, логика работы описана в http://arduino.ru/forum/programmirovanie/kak-mozhno-krasivee-ofrmit-eti-ify#comment-447055. Использую модуль SIM800l и RTC DS3231 с библиотекой  https://github.com/JChristensen/DS3232RTC.

Код для работы с модулем SIM800,  как и у всех Незнаек, блокирующий. Но мне необхолимо с  периодичностью 10 мин.( +-1мин) определять показания весового датчика. Для этого решил использовать будильник RTC. Т.е. "завожу" будильник напр. на 10:20. Если в это время код заблокирован (поднаята труба SIM800) в RTC DS3231 поднимается флаг сработки будильника. После освобождения кода проверяем флаг, если поднят - взвешиваем и "заводим" на 10:30

Там еще несколько заморочек - перевод SIM и Ардуино в энергосберегающие режимы, вачдог, экран с кнопкой по прерыванию, использование второго будильника RTC DS3231 для задания периодичности "поиска сети" в случае ее потери (это шоб батарейку быстро не сожрало)...

Все это хозяйтво требует длительного тестирования. И тут главная засада!!! Надо, что-бы монитор порта не отключался суток 10 или даже больше. Было три попытки - и три неудачи! Электричество, жена и я сам!

Главный вопрос - можно ли править RTC - библиотеку так, чтобы ее функционал остался, а время тикало в Н-раз быстрее и как??? Куда копать?

b707
Offline
Зарегистрирован: 26.05.2017

а просто умножить число часов на 3 не предлагать?

kolyn
Offline
Зарегистрирован: 18.01.2019

Нет, там в РТЦ регистры будильников работают с собственным временем (том, что в РТЦ хранится). А мне именно будильники нужны.

Green
Offline
Зарегистрирован: 01.10.2015

Правьте время в RTC - подводите к будильнику.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

Ставить алерты каждые N минут  в часах на время отладки - не предлагать?

b707
Offline
Зарегистрирован: 26.05.2017

kolyn пишет:

Нет, там в РТЦ регистры будильников работают с собственным временем (том, что в РТЦ хранится). А мне именно будильники нужны.

если вам не нужно РЕАЛЬНОЕ время - а нужно какое-то свое, то нафига вам вообще RTC ? - пишите на ардуино программный таймер.

Изменить скорость хода часов в RTC без кардинальной переделки железа нельзя.

b707
Offline
Зарегистрирован: 26.05.2017

kolyn пишет:

Нет, там в РТЦ регистры будильников работают с собственным временем (том, что в РТЦ хранится). А мне именно будильники нужны.

а умножить будильники на 3 тоже?

что за детские вопросы....

kolyn
Offline
Зарегистрирован: 18.01.2019

DIYMan пишет:

Ставить алерты каждые N минут  в часах на время отладки - не предлагать?

 

Что это и где почитать?

kolyn
Offline
Зарегистрирован: 18.01.2019

b707 пишет:

а умножить будильники на 3 тоже?

что за детские вопросы....

А умножте 23:30 на 3 и , сколько получится и какая это будет дата? А в программе к дате и времени привязана ячейка памяти... Переписать программу? Дайте взрослый ответ.

Кароч, сам задал вопрос - сам отвечу. НЕОЗМОЖНО изменить делитель в РТЦ. Он там где-то глабоко унутрях и доступа к нему снаружи нет. Можно поменять кварц, но не факт, что заработают на  повыш. частоте и опять-же как с Ай2Си? А в 3231 внешнего кварца нет вообще. Тут  Вы, b707, совершенно правы.

Вопрос снят.

b707
Offline
Зарегистрирован: 26.05.2017

kolyn пишет:

А умножте 23:30 на 3 и , сколько получится и какая это будет дата? А в программе к дате и времени привязана ячейка памяти... Переписать программу? Дайте взрослый ответ.

конечно переписать программу. А вы чего ждали?

умножить 23:30 на 3 совершенно несложно - это будет 22:30 + 2 дня

kolyn
Offline
Зарегистрирован: 18.01.2019

b707 пишет:

 

если вам не нужно РЕАЛЬНОЕ время - а нужно какое-то свое, то нафига вам вообще RTC ? - пишите на ардуино программный таймер.

Изменить скорость хода часов в RTC без кардинальной переделки железа нельзя.

Это идея! Написать на другой Ардуине программку, имитирующую 2321! Спасибо!

b707
Offline
Зарегистрирован: 26.05.2017

kolyn пишет:

Это идея! Написать на другой Ардуине программку, имитирующую 2321! Спасибо!

меня каждый раз удивляет ваша реакция :) Единственный смысл RTC, по-моему - это сохранять привязку к реальному времени между включениями микроконтроллера. Если вам не нужно хранить время в выключенном состоянии - то вам вообще не нужен RTC и эмулировать его (тем более на отдельной ардуине) - нафига?

Все легко делается на той же ардуине.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

b707 пишет:

Все легко делается на той же ардуине.

ТС сам же написал, что не может написать неблокирующий код для работы с SIM800, вот и придумывает себе гемморой.

kolyn
Offline
Зарегистрирован: 18.01.2019

b707 пишет:

конечно переписать программу. А вы чего ждали?

умножить 23:30 на 3 совершенно несложно - это будет 22:30 + 2 дня

B707, фальшивые ртц мне нужны для тестирования реальной программы, и изменить ее? И что я тестировать буду? Измененную программу???

b707
Offline
Зарегистрирован: 26.05.2017

kolyn пишет:

B707, фальшивые ртц мне нужны для тестирования реальной программы, и изменить ее? И что я тестировать буду? Измененную программу???

ну так я вообще не понимаю, нафига вам писать "фальшивый РТЦ". Не проще переписать чужую программу весов под свои нужды?

kolyn
Offline
Зарегистрирован: 18.01.2019

b707 пишет:

меня каждый раз удивляет ваша реакция :) Единственный смысл RTC, по-моему - это сохранять привязку к реальному времени между включениями микроконтроллера. Если вам не нужно хранить время в выключенном состоянии - то вам вообще не нужен RTC и эмулировать его (тем более на отдельной ардуине) - нафига?

Все легко делается на той же ардуине.

Устрйство в идеале должно работать 24/7. Вести лог. В  EEPROM 24С32, что на модуле часов. Чтобы не логировать дату запись ведется в хитром порядке, когда опред, ячейка соответствует определенному дню с начала года (это чтобы потом прочесть можно было и увидеть не простой набор цифр)

При этом работать от аккумуляторов. Ну забыл я акки зарядить, ну не запишется пару дней лог - войны не будет. Зарядил, перезагрузил дата/время - все работает.

И да, не хватает знаний/способностей/ума сделать код неблокирующим. И в сон Ардуину загоняю - та же блокировка. И будильники в РТЦ - костыли. Понимаю. Но оно работает. Кривовато, но работает.

Хочу я  это "творение" протестировать. Как? 10 сутк подряд не отключать от компа? Для этого фальшивые РТЦ нужны, чтобы сутки РТЦ( с будильниками и прочей лабудой) протекали не за 24, а , например, за 4 реальных часа. Работает как надо 10 фальшивых суток -радуюсь, нет ищу ошибки. Протестил, подключил настоящие, все.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

kolyn  , так может вам в принципе поменять логику работы ?

Например каждые 10 минут просыпаться, запросить у RTC текущее время, замерить вес, записать его вместе с отметкой времени в EEPROM. Каждый час будить модем (транзисторный ключ на него поставить), прочитать СМС (вдруг пришла команда запрос веса), ответить на команду - подсчитать вес за период если уж так надо, и опять спать.

kolyn
Offline
Зарегистрирован: 18.01.2019

andycat пишет:

kolyn  , так может вам в принципе поменять логику работы ?

Например каждые 10 минут просыпаться, запросить у RTC текущее время, замерить вес, записать его вместе с отметкой времени в EEPROM. Каждый час будить модем (транзисторный ключ на него поставить), прочитать СМС (вдруг пришла команда запрос веса), ответить на команду - подсчитать вес за период если уж так надо, и опять спать.

 

Примерно так и работает. Только без временных отметок для экономиии места в ЕЕПРОМ . И вес проверять раз/10 мин - резкая потеря веса - вышел рой (размножение пчел) - ТРЕВОГА. Модем в режиме "AT+CSCLK=1", потребление минимум, будит Ардуину прерыванаем с ноги RST при входящем/СМС.

Только обшаюсь не СМС, а так: Я звоню весам. Они снимают трубу, и говорят мне (человечьим голосом на чистом русском языке): "Хотите узнать привес за сутки - нажмите 1, привес за неделю - нажмите два, хотите послушать свежий анекдот - нажмите 666".  Я на своем телефоне нажимаю кнопку 1, весам передается ДТМФ-сигнал и они говорят человечьим языком: "Привес за сутки составил 16 кг. 850 гр." Я переключаюсь с телефона на калькулятор, умножаю на количество семей, на цену меда в долларах и довольный потираю руки.

Позже выясняется, что это был глюк и в реале вместо привеса была убыль..

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

Я не знаю какой вы собираетесь аккумулятор ставить на устройство, но sim800 в спящем режиме потребляет не мало, а если ещё и хочется быть постоянно в online для приёма звонков то о спящем режиме можно забыть.

kolyn
Offline
Зарегистрирован: 18.01.2019

andycat пишет:
Я не знаю какой вы собираетесь аккумулятор ставить на устройство, но sim800 в спящем режиме потребляет не мало, а если ещё и хочется быть постоянно в online для приёма звонков то о спящем режиме можно забыть.

0.88 мА в режиме AT+CFUN=1: Full functionality (default) - не так уж и много.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

а сами пробовали мерять потребление в рабочем режиме?

я может плохо понял даташит, откройте страницу 26 даташита - 0.88 мА потребление это в спящем режиме.

в этом режиме ваш модем не примет звонки.

из практики в спящем режиме он потребляет 1...2 мА, в полном функциональном режиме без звонков  СМС и передачи данных ~25 мА.

kolyn
Offline
Зарегистрирован: 18.01.2019

SIM800H/L_Hardware_Design_V2.01, стр. 26. Гуглеперевод: 

 
SIM800H / L имеет два режима энергосбережения: режим минимальной функциональности и режим ожидания. AT-команда «AT + CSCLK = 1» может использоваться для перевода SIM800H / L в спящий режим. AT-команда «AT + CFUN = <fun>» может быть использована для установки SIM800H / L в минимальную функциональность. Когда SIM800H / L находится в спящем режиме и режиме минимальной функциональности, ток модуля самый низкий.
И там же ,ниже:
4.3.1.
Режим минимальной функциональности
Существует три режима работы, которые можно установить с помощью команды AT «AT + CFUN = <fun>«. Команда обеспечивает выбор уровней функциональности <fun> = 0,1,4. 
AT + CFUN = 0: минимальная функциональность.
AT + CFUN = 1: полная функциональность (по умолчанию).
AT + CFUN = 4 : Режим полета (отключить функцию RF)
Ниже табличка:0 -0.66мА;    1-0.88мА;  4 -0.76 ма.
Сам не мерял. Даташиты врут

 

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

в табличке написано "sleep mode"

удачи в проектировании с такими мыслями про даташиты

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

kolyn пишет:
Даташиты врут
Ужость! Как жить-та?

kolyn
Offline
Зарегистрирован: 18.01.2019

ЕвгенийП пишет:

Ужость! Как жить-та?

Есть китайские ватты, метры, литры, даже штуки... Пдочему бы не быть китайским ДШ? ;))

b707
Offline
Зарегистрирован: 26.05.2017

kolyn пишет:

Есть китайские ватты, метры, литры, даже штуки... Пдочему бы не быть китайским ДШ? ;))

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

А еще правильнее - померяйте реальное потребление своего модуля, которое может и не совпасть с даташитом.

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

kolyn пишет:

Есть китайские ватты, метры, литры, даже штуки...

да много чего есть: американские лошадиные силы, американские мили - до фига всего есть.

А вопрос как жить-та остаётся.

DIYMan
DIYMan аватар
Offline
Зарегистрирован: 23.11.2015

kolyn пишет:

DIYMan пишет:

Ставить алерты каждые N минут  в часах на время отладки - не предлагать?

 

Что это и где почитать?

https://datasheets.maximintegrated.com/en/ds/DS3231.pdf - раздел Alarms. Ваш будильник - это тоже alarm, настроек у алармов кучу, можно взводить каждые N минут, например. Выдержка из даташита:

Цитата:

The alarms can also be programmed to repeat every second, minute, hour, day, or date

kolyn
Offline
Зарегистрирован: 18.01.2019

andycat пишет:

в табличке написано "sleep mode"

удачи в проектировании с такими мыслями про даташиты

И я о том же. Из руководства по АТ- командам AT+CSCLK= р, р=0 - Disable slow clock, не знаю как перевести, медленные часы?, модуль не в "sleep mode".

р=1 "Медленные часы включеы??" и управляются DTR. DTR высокий (или не подключен, проверено) - "sleep mode", на АТ не реагирует , энергопотребление падает ( не скажу на сколько в абсолютных цифрах, т.к измерял на входе DC\DC, питающего SIM800). При установленном по умолчанию AT+CFUN=1 принимает звонок, в сериал ничего не шлет, опеделить наличие звонка можно только по изменению сигнала на выводе RING c "1" на "0". Вывести из "sleep mode" - подать на DTR  низкий уровень, через 50мсек модуль очухается и начнет принимать АТ- команды.

Р =3 - засыпает автоматически после некоторого бездействия, просыпается при приходе чего- либо в Rx, причем первая команда должна быть фиктивной ( просто разбудить), последующие модуль восринимает.

А про ДШ была просто шутка.;)

UPD.  Если AT+CSCLK= 1 и на DTR подана "1", т.е. установлен режим "sleep mode" и пришел звонок, потребление резко возрастает (видимо радиомодуль врубается на полную). При отбое входящего потребление снова падает до "предзвоночных" значений.

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

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

kolyn
Offline
Зарегистрирован: 18.01.2019

andycat пишет:
Беда спящего режима в том, что на любой внешний чих модем почти сразу просыпается, причём странно, на команды не реагирует, но потребление поднимается. Во всяком случае у меня было так.

Не подтвердить ни опровергнуть не могу - не проверял. Проверю обязательно. Цифровым - нереально, нужен хотя бы стрелочный (оценить порядок цифр). В идеале - такой, как у Гаммона, дык где ж его взять.

 

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

kolyn пишет:

Хочу я  это "творение" протестировать. Как? 10 сутк подряд не отключать от компа? Для этого фальшивые РТЦ нужны, чтобы сутки РТЦ( с будильниками и прочей лабудой) протекали не за 24, а , например, за 4 реальных часа. Работает как надо 10 фальшивых суток -радуюсь, нет ищу ошибки. Протестил, подключил настоящие, все.

Даю подсказку, время в часах можно устанавливать. 

kolyn
Offline
Зарегистрирован: 18.01.2019

bwn пишет:

Даю подсказку, время в часах можно устанавливать. 

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

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

kolyn пишет:

При отбое входящего потребление снова падает до "предзвоночных" значений.

Это сколько в миллиамперах?

kolyn
Offline
Зарегистрирован: 18.01.2019

andycat пишет:
kolyn пишет:

Это сколько в миллиамперах?

Это скорее в попугаях. Мерял китайским показометром на входе ДС/ДС, со стороны 18 вольт. Попытки измерить ток по низкой (4 В) - как и положено - приводят к перезагрузкам. Поэтому пока только оценки "больше - меньше" :( Норм. прибора нет.

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

kolyn пишет:

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

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

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

kolyn
Offline
Зарегистрирован: 18.01.2019

bwn пишет:

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

[/quote] 

К сожалению там задействован второй будильник, который в случае "пропадания сети" будет устанавливать время следующего "поиска сети" - если искать постоянно, то батарей не хватит и на сутки. А сеть может пропасть и на 5 минут, и на 1.5 суток. Там логика другая: 5минут, 5минут, 10, 10, 30, 30, 1 час ...

Можно, конечно, тестить их по отдельности - так, как Вы предложили, но...

Пока писал проскочила мысля (как раньше не додумал) повесить обе функции на один будильник, кратный  5 минутам.

Буду подумать. Спасибо.

UPD. Если сделаю так - там минус строк сорок моего быдлокода. Еще раз спасибо!!!

Green
Offline
Зарегистрирован: 01.10.2015

Нет. Спасибо мало! Хорошо бы... мёда!)

andycat
andycat аватар
Offline
Зарегистрирован: 07.09.2017

kolyn, вы усложняете себе задачу, причём не имея опыта в таких делах. Сделайте как выше уже писалось - каждые 10 минут мерять вес, раз в сутки отправлять итоги по смс, остальное время спать. А то получается вы хотите и рыбку съесть и аккумулятора чтоб на долго хватило.