Предположим, у меня есть мотор. Я хочу посчитать количество времени, в течение которого двигатель работает ежедневно, а в конце месяца — общее время, в течение которого двигатель работал. Как я могу сделать это с помощью ATmega 32?
Существует два метода определения времени во встроенной системе:
Если ваша система имеет прерывание по таймеру, прочитайте количество отсчетов до запуска двигателя и считайте отсчеты после. Вычтите два значения и преобразуйте в временную базу по вашему выбору.
Возможно, вам придется изменить обработчик прерывания по таймеру, чтобы использовать больший тип данных, в зависимости от частоты прерывания.
Если ваша встроенная система имеет RTC, то прочитайте соответствующие регистры перед запуском двигателя и прочитайте их после. Вычтите соответственно, чтобы получить вашу продолжительность. Преобразуйте длительность в выбранную вами временную базу.
RTC может быть внешним по отношению к Системе на микросхеме (SOC) или там может быть один. У вас есть детали, а я нет.
Создайте две интегральные переменные, одна для времени включения двигателя, а другая для времени отключения двигателя.
Вы можете изменить таймер ISR, чтобы проверить состояние двигателя.
Когда ISR определяет, что двигатель включен, увеличивайте его по времени.
Когда ISR определяет, что двигатель выключен, увеличьте время отключения двигателя.
Этот метод подсчитывает только общее время, в течение которого двигатель включен, и общее время, в течение которого двигатель выключен. Это не так точно, как считывание системного времени до запуска двигателя и после его остановки.