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

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

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

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

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

, 👍-2


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.

,