Миллисекунды у DS1307

sinnpriest
Offline
Зарегистрирован: 16.09.2015

Клапауций 001 пишет:

sinnpriest пишет:

Но если, после сброса или сбоя, я вхожу в программу. А событие уже наступило десять минут назад. А при таком входе как флаг поднимать, раз оно уже прошло? Как расчитать значения ШИМ? При входе в программу millis() равно нолю, а флаг надбыло поднимать " - 600000 миллисекунд назад".

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

следующая копия тебя не будет скорбеть, что ты не успел трахнуть соседку потому, что умер.

Брат!!! ))) Ты существуешь!!! ))))))))))) Я всегда так размышляю! ))))))

Реально ахуел, поржал. Эмоции это жизнь! )

sinnpriest
Offline
Зарегистрирован: 16.09.2015

bwn пишет:

Тогда наверно лучше цикл начать сначала. Или произвести обратный расчет от начала события. Хотя сбой питания и его последующее включение в течении минут, скорее исключение, чем правило.
Как вариант, если интервал события еще не закончен - начинаем сначала, если уже закончился - на максимум. Для заката лучше ничего и не делать, выключилось, значит выключилось.

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

Но такой принцип (начать сначала) не правильный при интервалах рассвета или заката в один час. В случае сбоя очень сльно будет заметен скачёк ШИМ.

Лучше сделать все круто - вычисление значения шим в середине цикла рассвета/заката, даже если millis() = 0

sinnpriest
Offline
Зарегистрирован: 16.09.2015

Joiner пишет:

Клапауций 001 пишет:

я в принципе не понимаю сути проблемы:

если требуется что-то сделать после 08:45, но не позже 19:00, то каким боком тут грёбаные минуты?

Проблема высосана из пальца :)

Не могу согласится. Если думать так, то тогда эпитет этой программе: "и так сойдет". Не хочу. Я делаю для себя и может быть для других, если захотят повторить. Смысл в вышестоящих моих постах.

sinnpriest
Offline
Зарегистрирован: 16.09.2015

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

В принципе исходные есть:

- Время входа в программу есть - из модуля-времени

- Могу расчитать время начала рассвета - из модуля времени и программы

- Могу расчитать время конца рассвета - из программы

- Есть время в миллисекундах - ...

Думаю решу.

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

sinnpriest пишет:

Не могу согласится. Если думать так, то тогда эпитет этой программе: "и так сойдет". Не хочу. Я делаю для себя и может быть для других, если захотят повторить. Смысл в вышестоящих моих постах.

Ниче непонимаю! Почему нельзя запускать рассвет-закат по RTC, а осуществлять закаты и рассветы по миллисам?

Почему?

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

sinnpriest пишет:

В принципе исходные есть:

- Время входа в программу есть - из модуля-времени

- Могу расчитать время начала рассвета - из модуля времени и программы

- Могу расчитать время конца рассвета - из программы

- Есть время в миллисекундах - ...

Думаю решу.

кароче, ты реально не понимаешь смысла:

1. нахрена, вообще RTC нужен и откуда взялось минимальное разрешение RTC в 1 секунду.

2. почему на millis() невозможно сделать RTC.

*пока ты бродишь в потёмках в будильником в руках, вместо фонарика, напиши скетч, в котором у тебя рассветы и закаты будут происходить по нажатию кнопок "рассвет", "закат".

затем, замени условия нажатия кнопок на условия совпадения времени RTC.

если тебя и после этого не попустит, то я уже и не знаю.

sinnpriest
Offline
Зарегистрирован: 16.09.2015

ОК. 

На всякий случай. Цель: сделать контроллер управления драйверами светодиодов у светильника для морского аквариума. Основная задача: плавный рассвет и закат. Каналов шесть. По сути их будет больше.

Начало рассвета в 10 часов, конец в 11 (для удобства). Получается рассвет в 36000 секунд окончание рассвета в 39600 секунд.

Если все идет своим чередом - вопросов нет. TLC c 36000 до 39600 плавно изменяет значение с 0 до 4095 (12-bit). ЭТО У МЕНЯ РАБОТАЕТ ЧЁТКО И СТАБИЛЬНО ))) (извините, капс)

Но! Если сбой, сброс или еще какая херня. Ну бывает, и я хочу это предусмотреть, а не запускать снова рассвет с 96% (если сбой произошол в районе 39032сек.) с ноля до 4095. А чтоб с 3985 до 4095. И вот эти 3985 мне и нужно вычислить изначально, при сборе. В принципе верю, что у меня получится, но не сегодня ))))

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

Joiner пишет:

Ниче непонимаю! Почему нельзя запускать рассвет-закат по RTC, а осуществлять закаты и рассветы по миллисам?

Почему?

потому, что мы не видим код, в котором ТС преследуют секунды.

sinnpriest
Offline
Зарегистрирован: 16.09.2015

Клапауций 001 пишет:

sinnpriest пишет:

В принципе исходные есть:

- Время входа в программу есть - из модуля-времени

- Могу расчитать время начала рассвета - из модуля времени и программы

- Могу расчитать время конца рассвета - из программы

- Есть время в миллисекундах - ...

Думаю решу.

кароче, ты реально не понимаешь смысла:

1. нахрена, вообще RTC нужен и откуда взялось минимальное разрешение RTC в 1 секунду.

2. почему на millis() невозможно сделать RTC.

*пока ты бродишь в потёмках в будильником в руках, вместо фонарика, напиши скетч, в котором у тебя рассветы и закаты будут происходить по нажатию кнопок "рассвет", "закат".

затем, замени условия нажатия кнопок на условия совпадения времени RTC.

если тебя и после этого не попустит, то я уже и не знаю.

Вот тут http://reefcentral.ru/forum/topic/20560-prostoj-kontroller/

Я рассказываю людям чё делать. Первый скетч работает "на ура", но там 8-бит. Мне кажется это мало. Хочу 12-бит. Но последний скетч не работает т.к. библиотека fade глючит. Пытаюсь решить через tlc.set

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

sinnpriest пишет:

Но! Если сбой, сброс или еще какая херня. 

блин. снова сбой.

чем твой сбой отличается от штатного запуска?

sinnpriest
Offline
Зарегистрирован: 16.09.2015

Клапауций 001 пишет:

sinnpriest пишет:

Но! Если сбой, сброс или еще какая херня. 

блин. снова сбой.

чем твой сбой отличается от штатного запуска?

Тем, что отсчет события (рассвета/заката) начинается не с ноля, а при входе например начался минут двадцать назад.

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

sinnpriest пишет:

Я рассказываю людям чё делать.

кароче - ты реально задрал.

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

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

sinnpriest пишет:

Тем, что отсчет события (рассвета/заката) начинается не с ноля, а при входе например начался минут двадцать назад.

т.е. ты утром просыпаешься, а пиво вчера вечером не выпил - твои действия?

sinnpriest
Offline
Зарегистрирован: 16.09.2015

Клапауций 001 пишет:

sinnpriest пишет:

Тем, что отсчет события (рассвета/заката) начинается не с ноля, а при входе например начался минут двадцать назад.

т.е. ты утром просыпаешься, а пиво вчера вечером не выпил - твои действия?

Я просто хочу усмотреть любые варианты. 

Например, я случайно сегодня загрузил на "сборку: ардуино-tlc" пример, где светодиоды зажигаются последовалтельно и гаснут. Куда уж проще. И он у меня завис через 30 минут. Да! У меня много времени на тесты )))

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

sinnpriest пишет:

..................................

Если все идет своим чередом - вопросов нет. TLC c 36000 до 39600 плавно изменяет значение с 0 до 4095 (12-bit). ЭТО У МЕНЯ РАБОТАЕТ ЧЁТКО И СТАБИЛЬНО ))) (извините, капс)

.....................................

12-bit это круто, а нахрена?  Пытался различить 255 градаций на светодиоде, не различаю. различаю только от 0 до примерно 10, а дальше не вижу ни какого скачка. Какой диапазон яркости светодиода? Неужели 8 bit не хватит?

 

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

sinnpriest пишет:

Например, я случайно сегодня загрузил

береги себя - то не была случайность, дьявол шизофрении играет тобой.

Radjah
Offline
Зарегистрирован: 06.08.2014

Клапауций дело говорит. Забей в код время начала рассвета и время начала заката. И до кучи границы, в которых они могут плавать.

Например

6-30 - восход. Отложить можно до 8 часов. После тупо свет на максимум сразу.

22-00 - закат. Если стартанули после  22-00, то ничего не делаем и ждем восхода.

ШИМ растягиваешь на продолжительность восхода и заката. Это можно вообще одной функцикей сделать, передавая знак.

Например, 1024 секунды на все дела.

12 бит = 4096 уровней.

Каждую секунду делаешь 4*знак.

В итоге за 1024/60 = 17 минут на все дела.

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

Выработайте концепцию: что должно произойти, если свет отключили в начале цикла и включили через 15 минут, включили через 30 минут, включили через пять часов? Аналогично, если отключили в конце цикла. Во всех случаях это разные алгоритмы.
Чисто для паранойи, как вариант, разбиваю диапазон на 10% интервалы и по достижении пишу в EEPROM, вернувшись после отключения продолжаю с запомненного значения.
Для супер паранойи - мониторим напряжение питания, при снижении подключаем резервный источник и фиксируем время и значение ШИМ, по восстановлению продолжаем с запомненного значения.
НО, если отключение произошло в момент достижения >50% освещенности и продолжалось длительное время, вы получите достаточно сильную вспышку. Логичнее начинать цикл с начала. Перепад освещенности уже произошел, зачем его усугублять своими действиями?

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

bwn пишет:

что должно произойти, если свет отключили 

у него не свет отключают - у него сбои...

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

Клапауций 001 пишет:

bwn пишет:

что должно произойти, если свет отключили 

у него не свет отключают - у него сбои...

Слова такого не понимаю. Сбой - это недоработанное железо.
У меня в свое время так Спектрум на холодильник реагировал. Кондер на 68000мкФ решил проблему)))

arduinec
Offline
Зарегистрирован: 01.09.2015

sinnpriest пишет:

вычисление значения шим в середине цикла рассвета

Простейшая формула:
ТЗШ = (ТЗВ - ВНР) / (ВКР - ВНР) * (ШКР - ШНР) + ШНР
где
ВНР и ВКР - время начала и конца рассвета
ШНР и ШКР - ШИМ начала и конца рассвета
ТЗВ и ТЗШ - текушие значения времени и ШИМ

 

sinnpriest
Offline
Зарегистрирован: 16.09.2015

Скептицизм - дело хорошее.

В общем проблему решил. Как и говорил, нужно было немного подумать.

Рабочий скетч контроллера выложил в Сеть. http://reefcentral.ru/forum/topic/20560-prostoj-kontroller/?p=315862

- Рассвет/закат на 12 битах. При этом никакие сбои или запуски на середите цикла не страшны. Работает строго по программе.

- Шесть каналов.

- Управляемый ШИМ вентилятор от теромдатчика.