Страница 1 из 3

Проект-заготовка. Часы, календарь, будильник, таймер. DS3231

Добавлено: Ср сен 16, 2020 20:40:39
Demiurg
Создал тему, чтобы задавать возникающие по ходу дела вопросы. Делаю проект заготовку. Часы, календарь, будильник, таймер. DS3231.
Вопрос первый. У DS3231 намертво зашитый календарь или нет? Поясняю вопрос. Если я запишу в RTC некорректный календарь, что произойдет? К примеру, пусть сегодня 17 сентября, четверг. 2020 год. Я в настройках набрал 17 сентября, пятница. 2020 год. Заливаю данные в DS3231. Что произойдет?

Видео процесса на данный момент. Дисплей Futaba M204SD08AA. 20x4. На 4 строке тестовый вывод переменных и справа выведено значение 16 битного таймера, который измеряет время обращения к RTC.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Ср сен 16, 2020 21:45:11
BlackKilkennyCat
Произойдет парадокс с последующим разделением вероятности на две линии.
даташит:
The day-of-week register increments at midnight. Values that correspond to the day of week are user-defined but must be sequential (i.e., if 1 equals Sunday, then 2 equals Monday, and so on). Illogical time and date entries result in undefined operation.

Вольный перевод гуглом: регистр дня недели увеличивается в полночь. Значения, соответствующие дню недели, определяются пользователем, но должны быть последовательными (т. Е. Если 1 равно воскресенью, то 2 равно понедельнику и т. Д.). Нелогичные записи времени и даты приводят к неопределенной операции.

Добавлено after 19 minutes 42 seconds:
Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS3231
может пригодиться:
https://en.wikipedia.org/wiki/Zeller%27s_congruence оно же в виде кода: https://ideone.com/CkDGvY

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Ср сен 16, 2020 22:04:07
musor
ден недели в поравилный RTC обычно не вносится он сам вычисляется чипом исходя из даты и года по матрице лет

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Чт сен 17, 2020 01:12:41
VALNER
BlackKilkennyCat писал(а): Я в настройках набрал 17 сентября, пятница. 2020 год. Заливаю данные в DS3231. Что произойдет?
Запишет как пятницу, то есть как 5-й день, ну или как 6-й, это зависит от того с какого дня у вас неделя начинается.
Он не определяет правильный ли день недели введен. Там с этим все примитивно.

[uquote="musor",url="/forum/viewtopic.php?p=3893581#p3893581"]ден недели в поравилный RTC обычно не вносится[/uquote]

Ну, исходя из этого 3231 не нормальный.
У него банально вводиться номер дня и он его по кругу считает от 1 до 7.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Чт сен 17, 2020 06:45:00
OKF
[uquote="musor",url="/forum/viewtopic.php?p=3893581#p3893581"]ден недели в поравилный RTC обычно не вносится...[/uquote]
Поправляю. Ден недели в правильном СОФТЕ обычно не вносится...

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Чт сен 17, 2020 07:29:24
Demiurg
[uquote="OKF",url="/forum/viewtopic.php?p=3893644#p3893644"][uquote="musor",url="/forum/viewtopic.php?p=3893581#p3893581"]ден недели[/uquote]
Поправляю[/uquote]
Поправляльщик... Ггг. Хм, благодарю.
Сегодня поэкспериментирую. Посмотрю на поведение часиков...

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Чт сен 17, 2020 11:53:34
BlackKilkennyCat
Что там экспериментировать - это обычный счётчик, который знает, что в минуте столько-то секунд, в часах столько-то минут, в сутках столько-то часов, в таком-то месяце столько-то дней и високосные года. Вычислением дней недели оно не занимается, просто крутит от 1 до 7 в полночь

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Чт сен 17, 2020 17:51:48
AndTer
При этом когда пользователь задаёт дату, то именно софт должен ограничивать его. Не давать вписать 31 ноября или знать в каком году в феврале на день больше.
Сначала вводится год, определяем високосный ли он и далее по списку.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 07:57:04
Demiurg
Сделал проверку. Записывал в RTC только числа месяцев, месяцы, годы. Затем сразу же считывал данные. День недели не менялся. То есть, день недели задается пользователем.
Сейчас занимаюсь примерами вычисления високосных лет. Если кто поделится примером на си, заранее благодарен.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 09:22:17
Самсусамыч
С какой целью это делать при использовании DS3231? Она и без этого умеет это делать. Вот если бы Вы делали часы просто на основе одного МК, то тогда другое дело. А так все подобные алгоритмы (ИМХО) в данном варианте не несут ни какой пользы. :dont_know:

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 15:38:39
Demiurg
Мои эксперименты показали следующее: (если с часами уже экспериментировали, как поведут себя новые часы, пока неизвестно, нет в наличии), при задании календарной даты день недели произвольный, задается пользователем, также RTC молча проглотил 30 февраля и при задании 23.59.00 вывел 31 февраля.
Резюмирую. Нужно софтово проверять корректность календарных данных. При изменении месяцев, если февраль, проверять, какая дата стоит, чтобы не перевалило за 28 или 29.

Добавлено after 6 hours 5 minutes 48 seconds:
В данный момент чешу репу, как быть. На уровне интерфейса. Если некорректные данные при вводе времени, календарных данных. Скажем, 30 число, вводим Февраль. Некорректно. Или был високосный год, а сейчас не високосный, стоял февраль. 29 число. Правим год. Невисокосный, а число 29 февраля. Некорректно. Это примеры ввода.
Выводить какое-то сообщение или? В данный момент у меня сделано так. При входе в редактирование параметров массив переменных переносится во временный массив. Если данные некорректны, при нажатии на Enter возвращаются назад старые данные. Если все корректно, записывается в RTC.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 15:46:07
Самсусамыч
Зачем задавать заведомо неправильную дату месяца? Ни один софт не сможет победить глупость пользователя. :facepalm: Не пойму какую цель Вы преследуете. :dont_know: Как отреагирует Ваш софт если вместо сегодняшнего 18 сентября, пользователь установит 20 сентября. Сможет Ваш софт скорректировать неправильную дату? Нет? Вот то-то и оно. :) Что касается RTC, он никогда не выведет неправильную дату в феврале если задать изначально правильно текущую дату и соответствующий год. :)

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 16:01:19
BlackKilkennyCat
не совсем понятно, в чём трудность не дать в принципе ввести за пределами диапазона.
день более 28 - месяц проверяется на февраль, если да - проверяется на високосность и день меняется на 29 или 28, если нет, проверяется на апрель, июнь, сентябрь и ноябрь, если да и равно 31 - меняется на 30.

Добавлено after 12 minutes 10 seconds:
Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS3231

Код: Выделить всё

if (day > 28)
 if (month == 2)
   if (year == vis)
     day = 29
   else 
     day = 28
  else if ((month in [4,6,9,11]) and (day > 30))
   day = 30;

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 16:04:11
Demiurg
В данный момент у меня все параметры проверяются на корректность автоматически при редактировании (кнопки Плюс-Минус, диапазоны значений). Также, когда введены необходимые значения, при нажатии на Enter данные проверяются на корректность перед сохранением и заливкой в RTC. Оказалось, могут быть коллизии, я их описал выше. Это февраль, високосный-невисокосный год, 29 число.
Мне нужно: подчеркиваю, не кодом, а словами, на уровне интерфейса. Что делать, если некорректные значение. К примеру, когда я делал блоки управления для станков, у меня было реализовано так: если какое-либо значение некорректно, на дисплей выводится сообщение с соответствующим предупреждением и ошибкой. Чтобы выйти из этого состояния, оператор должен нажать кнопку Esc-Отмена.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 16:07:17
BlackKilkennyCat
да зачем вообще давать возможность вводить некорректное значение? чтобы потом сообщить пользователю? и заставить нажимать Esc?
На станках подобного вообще не должно быть. нажал не то - раздался бип, что не то, и всё. Следующее нажатие уже должно быть мочь то, а не лишнее Esc.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 16:36:33
AndTer
Не понимаю в чём проблема.
Всё просто, сначала вводится год. +/- границы понятны(например от 20 до 99 или от 020 до 999 или от 2020 до 9999). После ввода сразу вычисляем високосный он или нет.
Потом вводится месяц от 1 до 12, границы тоже определены. Сделать так чтобы +/- нельзя было нащёлкать 0 или 13))) Просто? Просто!
Далее с учётом високосности решаем сколько дней в указанном месяце: 28/29/30/31 и ставим границу для числа от 1 до вычисленного.
А далее просим ввести число: просто нажимая на +/- они по кругу будут идти правильные и никаких ошибок выводить никому не надо. Просто другое не ввести.

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

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 17:11:15
Dimon456
Телефон свой откройте да посмотрите как сделано.
Три параметра: дата месяц год, справа у вас готовый календарь отображается.
Ставлю 31 января 2020.
Перевожу на февраль, дата становится 29.

Взял старый сотовый:
Три параметра: дата месяц год, слева день недели (день недели недоступен редактированию)
ставлю 31 января 2020
перевожу месяц на февраль, дата меняется с 31 на 29.

Без всяких дополнительных слов и Esc.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 17:13:20
BlackKilkennyCat
Dimon456, просто на нём Esc нет, вот и пришлось производителю извращаться :)

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 17:25:17
Dimon456
Как нет, а об пол.

Re: Проект-заготовка. Часы, календарь, будильник, таймер. DS

Добавлено: Пт сен 18, 2020 17:51:19
Demiurg
[uquote="AndTer",url="/forum/viewtopic.php?p=3894222#p3894222"]...[/uquote]
Вы не поняли моего вопроса. Написали все то я и так знаю, у меня это и реализовано. Но вы не написали ничего, что касается интерфейса. Повторяю. На уровне ИНТЕРФЕЙСА.

[uquote="Dimon456",url="/forum/viewtopic.php?p=3894252#p3894252"]...[/uquote]
Наконец-то конкретика. Ага, то есть, если выставлены последние числа месяцев, то от этого и исходить. Хм... Вариант.

Добавлено after 24 minutes 32 seconds:
Новое видео.