Имитация модуля часов реального времени с помощью программного обеспечения

Я создаю часы с помощью Arduino.

В большинстве часов есть модуль RTC или какой-то чип RTC для определения времени. У меня такого нет.

Как заменить этот чип программным обеспечением? Есть ли библиотека C/C++, эквивалентная библиотеке Java java.util.date?

Могу ли я запустить программу Java вместо программы C на моем Arduino, чтобы я мог использовать эту библиотеку Java? Я знаю только Java и у меня мало опыта с C/C++. Я искал способы запрограммировать эти часы на Java, и у меня это получилось, но это только на моем компьютере, а не на Arduino.

, 👍-2

Обсуждение

вам нужно провести некоторое исследование, прежде чем публиковать вопрос... я подозреваю, что вы не потрудились ничего сделать перед публикацией своего вопроса, потому что поиск в Интернете по запросу arduino timekeeping выдает хорошую информацию, @jsotola

Могу ли я запустить программу Java вместо программы ac на моем arduino, чтобы я мог использовать эту библиотеку Java? А? Как переключение на язык Java решает проблему с получением времени? На ПК ваш ПК будет получать время по NTP через интернет-соединение. Библиотека Java просто получает это уже сохраненное значение. Она не получает время по той простой причине, что теперь она написана на Java вместо C++. Однако вы можете использовать тот же механизм — либо использовать сетевое соединение какого-либо типа (например, WiFI) и получать время через клиент NTP / SNTP, либо запрограммировать время один раз и сохранить его в периферийном устройстве RTC., @Maximilian Gerhardt

Вы не ответили на комментарии в своем предыдущем вопросе по этому поводу https://arduinoprosto.ru/q/53108/arduino-clock-project, @Juraj

Возможный дубликат [проекта часов arduino](https://arduinoprosto.ru/q/53108/arduino-clock-project), @Chris Stratton

Ваш вопрос был отмечен за качество. Пожалуйста, см. [Как задать хороший вопрос об Arduino?](https://arduino.meta.stackexchange.com/q/2523/19409), @sa_leinad

Объясните, как именно, по вашему мнению, будет работать эта программная симуляция. Например, хотите ли вы, чтобы часы всегда начинали в предопределенное время после сброса?, @Dmitry Grigoryev


2 ответа


1

Посмотрев на ваш другой вопрос, кажется, вы пытаетесь бежать, прежде чем научиться ходить. Вы можете быть хорошим программистом на Java, но вам нужно разобраться с C++, прежде чем вы пойдете ва-банк и построите часы.

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

Если бы у вас была сеть, вы могли бы извлекать данные заголовков из сетевых пакетов, но вы запускаете это на Mega, что кажется странным выбором для чего-то столь простого, как сетевые часы, вряд ли подойдет nano или ESP8266.

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

https://www.arduino.cc/reference/en/

https://playground.arduino.cc/Code/Time

,

3

как заменить чип [RTC] программным обеспечением?

Вы не можете. RTC состоит из двух основных частей:

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

Логику можно легко заменить программным обеспечением, а вот кристалл — нет. Любое «чисто программное» решение, которое вы можете найти, в конечном итоге опирается на подсчет циклы системных часов (сигнал, который тактирует весь микроконтроллер). На большинстве Arduino, включая Uno, системные часы основан на керамическом резонаторе. Обычно они обозначаются как допуск частоты 0,5%, и они обычно имеют смещение частоты около ±0,1%. Это дрейф в ±44 минуты в месяц!

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

существует ли библиотека C++, эквивалентная библиотеке Java java.util.date?

Я не знаю Java, но есть библиотеки C++ для управления время. Например, вы можете инициализировать TimeLib Пола Стоффрегена как следует:

setTime(hr,min,sec,day,mnth,yr);  // установить начальное время
setSyncInterval(-1);  // делаем вид, что нам не нужна повторная синхронизация

и затем периодически запрашивать время с помощью now(). Это должно быть все вам нужно создать «доказательство концепции» ваших часов: оно скажет вам время, но с ужасно плохой долгосрочной точностью.

Обратите внимание, что после добавления RTC или другого хорошего источника времени вы можете добавить «поставщик времени» для этой библиотеки, оставьте остальную часть кода без изменений, и воспользуйтесь точностью вашего нового источника времени.

Могу ли я запустить программу Java вместо программы AC на моем Arduino [...]?

Нет, не можете. Среда выполнения Java никогда не поместится в ваш Arduino.

,

Резонатор можно легко заменить настоящим кристаллом на 16 МГц. Некоторые старые платы/комплекты уже работают таким образом, как и инструкции по arduino on mockboard на сайте arduino. Главным недостатком является энергопотребление, но ваш базовый проект Arduino работает на полной скорости, потребляя полную мощность все время. Для более продвинутых активация делителя тактовой частоты может минимизировать количество схем, работающих на частоте 16 МГц, периферийные устройства можно отключить, а само ядро процессора можно приостановить, оставив только аппаратный таймер, подсчитывающий тики., @Chris Stratton