Как сделать часы параллельно с выполнением основной программы?

Тема в разделе "Схемотехника, компоненты, модули", создана пользователем mystique, 18 июл 2011.

  1. mystique

    mystique Нерд

    Есть сама ардуинка с программой и LCD. Программа выполняется. Хочется, чтобы в моменты, когда устройство не нужно, не используется, то на LCD тикали обычные часы. Но если я в основной программе буду щелкать счетчиком (в переменной увеличивать значение) с паузой в 1 секунду, то часы будут безбожно отставать ровно на то время, которое у МК заняло выполнение остальных команд. И смещение времени не рассчитаешь, т.к. оно - величина не постоянная.

    Подскажите пожалуйста, как это можно реализовать?
     
  2. Iskandaru

    Iskandaru Нерд

    В теории, Ардуино параллельные операции выполнять не может, только последовательные. Но ничто не мешает прописать синхронизацию, которая будет "подтягивать" Ваши часы. Я так понимаю, что для этого надо использовать Функцию millis().
    Вот ссылка: http://arduino.cc/en/Reference/Millis

    Кроме того, есть супер-штука http://www.pobot.ru/topic/show/15/

    Выложите ссылки на Ваш код с часами, посмотрим, куда эти millis() можно засунуть.
     
  3. nailxx

    nailxx Официальный Нерд Команда форума

    Ну да, всё верно Iskandaru говорит. Можно запоминать время (millis) перед неопределённой работой, и время после. Вычтя первое из второго, получится затраченное время, на которое нужно скорректировать часы.

    Более хардкорный, но железобетонный способ: использовать timer interrupts. Они позволяют через каждый заданный интервал дёргать функцию, блокируя выполнение основного кода. В этой функции можно тикать часы.
     
  4. mystique

    mystique Нерд

    Спасибо! Про вариант с mills() я как-то не подумал. Встрою. ;)
     
  5. icoz

    icoz Нуб

    Товарищи, обращаю ваше внимание сюда!
    Там сказано, что millis "сбрасывается на ноль, в следствие переполнения значения, приблизительно через 50 дней."
    Соответственно, надо предусмотреть программную корректировку для этого события.
     
  6. Iskandaru

    Iskandaru Нерд

    Не, речь идет о том, чтобы фиксировать показания millis до и после вычислений, а потом сравнивать и разность подгонять под реальное время. Сомневаюсь, что цикл основной программы будет превышать 50 дней. Хотя способ с прерываниями мне нравиться больше...