Создал тему, чтобы задавать возникающие по ходу дела вопросы. Делаю проект заготовку. Часы, календарь, будильник, таймер. DS3231. Вопрос первый. У DS3231 намертво зашитый календарь или нет? Поясняю вопрос. Если я запишу в RTC некорректный календарь, что произойдет? К примеру, пусть сегодня 17 сентября, четверг. 2020 год. Я в настройках набрал 17 сентября, пятница. 2020 год. Заливаю данные в DS3231. Что произойдет?
Видео процесса на данный момент. Дисплей Futaba M204SD08AA. 20x4. На 4 строке тестовый вывод переменных и справа выведено значение 16 битного таймера, который измеряет время обращения к RTC.
Последний раз редактировалось Demiurg Чт сен 17, 2020 15:51:14, всего редактировалось 2 раз(а).
Произойдет парадокс с последующим разделением вероятности на две линии. даташит: 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 равно понедельнику и т. Д.). Нелогичные записи времени и даты приводят к неопределенной операции.
ден недели в поравилный RTC обычно не вносится он сам вычисляется чипом исходя из даты и года по матрице лет
_________________ ZМудрость(Опыт и выдержка) приходит с годами. Все Ваши беды и проблемы, от недостатка знаний. Умный и у дурака научится, а дураку и .. Алберт Ейнштейн не поможет и ВВП не спасет.и МЧС опаздает
Я в настройках набрал 17 сентября, пятница. 2020 год. Заливаю данные в DS3231. Что произойдет?
Запишет как пятницу, то есть как 5-й день, ну или как 6-й, это зависит от того с какого дня у вас неделя начинается. Он не определяет правильный ли день недели введен. Там с этим все примитивно.
Обязательным условием долгой и стабильной работы Li-FePO4-аккумуляторов, в том числе и производства EVE Energy, является применение специализированных BMS-микросхем. Литий-железофосфатные АКБ отличаются такими характеристиками, как высокая многократность циклов заряда-разряда, безопасность, возможность быстрой зарядки, устойчивость к буферному режиму работы и приемлемая стоимость. Но для этих АКБ очень важен контроль процесса заряда и разряда для избегания воздействия внешнего зарядного напряжения после достижения 100% заряда. Инженеры КОМПЭЛ подготовили список таких решений от разных производителей.
Компания EVE выпустила новый аккумулятор серии PLM, сочетающий в себе высокую безопасность, длительный срок службы, широкий температурный диапазон и высокую токоотдачу даже при отрицательной температуре.
Эти аккумуляторы поддерживают заряд при температуре от -40/-20°С (сниженным значением тока), безопасны (не воспламеняются и не взрываются) при механическом повреждении (протыкание и сдавливание), устойчивы к вибрации. Они могут применяться как для автотранспорта (трекеры, маячки, сигнализация), так и для промышленных устройств мониторинга, IoT-устройств.
Что там экспериментировать - это обычный счётчик, который знает, что в минуте столько-то секунд, в часах столько-то минут, в сутках столько-то часов, в таком-то месяце столько-то дней и високосные года. Вычислением дней недели оно не занимается, просто крутит от 1 до 7 в полночь
При этом когда пользователь задаёт дату, то именно софт должен ограничивать его. Не давать вписать 31 ноября или знать в каком году в феврале на день больше. Сначала вводится год, определяем високосный ли он и далее по списку.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Сделал проверку. Записывал в RTC только числа месяцев, месяцы, годы. Затем сразу же считывал данные. День недели не менялся. То есть, день недели задается пользователем. Сейчас занимаюсь примерами вычисления високосных лет. Если кто поделится примером на си, заранее благодарен.
С какой целью это делать при использовании DS3231? Она и без этого умеет это делать. Вот если бы Вы делали часы просто на основе одного МК, то тогда другое дело. А так все подобные алгоритмы (ИМХО) в данном варианте не несут ни какой пользы.
Мои эксперименты показали следующее: (если с часами уже экспериментировали, как поведут себя новые часы, пока неизвестно, нет в наличии), при задании календарной даты день недели произвольный, задается пользователем, также RTC молча проглотил 30 февраля и при задании 23.59.00 вывел 31 февраля. Резюмирую. Нужно софтово проверять корректность календарных данных. При изменении месяцев, если февраль, проверять, какая дата стоит, чтобы не перевалило за 28 или 29.
Добавлено after 6 hours 5 minutes 48 seconds: В данный момент чешу репу, как быть. На уровне интерфейса. Если некорректные данные при вводе времени, календарных данных. Скажем, 30 число, вводим Февраль. Некорректно. Или был високосный год, а сейчас не високосный, стоял февраль. 29 число. Правим год. Невисокосный, а число 29 февраля. Некорректно. Это примеры ввода. Выводить какое-то сообщение или? В данный момент у меня сделано так. При входе в редактирование параметров массив переменных переносится во временный массив. Если данные некорректны, при нажатии на Enter возвращаются назад старые данные. Если все корректно, записывается в RTC.
Зачем задавать заведомо неправильную дату месяца? Ни один софт не сможет победить глупость пользователя. Не пойму какую цель Вы преследуете. Как отреагирует Ваш софт если вместо сегодняшнего 18 сентября, пользователь установит 20 сентября. Сможет Ваш софт скорректировать неправильную дату? Нет? Вот то-то и оно. Что касается RTC, он никогда не выведет неправильную дату в феврале если задать изначально правильно текущую дату и соответствующий год.
не совсем понятно, в чём трудность не дать в принципе ввести за пределами диапазона. день более 28 - месяц проверяется на февраль, если да - проверяется на високосность и день меняется на 29 или 28, если нет, проверяется на апрель, июнь, сентябрь и ноябрь, если да и равно 31 - меняется на 30.
В данный момент у меня все параметры проверяются на корректность автоматически при редактировании (кнопки Плюс-Минус, диапазоны значений). Также, когда введены необходимые значения, при нажатии на Enter данные проверяются на корректность перед сохранением и заливкой в RTC. Оказалось, могут быть коллизии, я их описал выше. Это февраль, високосный-невисокосный год, 29 число. Мне нужно: подчеркиваю, не кодом, а словами, на уровне интерфейса. Что делать, если некорректные значение. К примеру, когда я делал блоки управления для станков, у меня было реализовано так: если какое-либо значение некорректно, на дисплей выводится сообщение с соответствующим предупреждением и ошибкой. Чтобы выйти из этого состояния, оператор должен нажать кнопку Esc-Отмена.
да зачем вообще давать возможность вводить некорректное значение? чтобы потом сообщить пользователю? и заставить нажимать Esc? На станках подобного вообще не должно быть. нажал не то - раздался бип, что не то, и всё. Следующее нажатие уже должно быть мочь то, а не лишнее Esc.
Не понимаю в чём проблема. Всё просто, сначала вводится год. +/- границы понятны(например от 20 до 99 или от 020 до 999 или от 2020 до 9999). После ввода сразу вычисляем високосный он или нет. Потом вводится месяц от 1 до 12, границы тоже определены. Сделать так чтобы +/- нельзя было нащёлкать 0 или 13))) Просто? Просто! Далее с учётом високосности решаем сколько дней в указанном месяце: 28/29/30/31 и ставим границу для числа от 1 до вычисленного. А далее просим ввести число: просто нажимая на +/- они по кругу будут идти правильные и никаких ошибок выводить никому не надо. Просто другое не ввести.
Если ввод пультом цифрами, то если цифра в вводимом разряде не может быть введена, она не вводится и разряд продолжает "мигать" пока не введут правильную.
_________________ Глупый не задает вопросы. Глупый и так все знает.
Телефон свой откройте да посмотрите как сделано. Три параметра: дата месяц год, справа у вас готовый календарь отображается. Ставлю 31 января 2020. Перевожу на февраль, дата становится 29.
Взял старый сотовый: Три параметра: дата месяц год, слева день недели (день недели недоступен редактированию) ставлю 31 января 2020 перевожу месяц на февраль, дата меняется с 31 на 29.
Вы не поняли моего вопроса. Написали все то я и так знаю, у меня это и реализовано. Но вы не написали ничего, что касается интерфейса. Повторяю. На уровне ИНТЕРФЕЙСА.
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 48
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете добавлять вложения