После установления питания диод VD2 «запрет» батарею, которая имеет напряжение заведомо ниже, чем на выходе стабилизатора. Оба диода — с переходом Шоттки, падение напряжения на них не превышает 0,2–0,4 В.
Теперь разберемся с нашими компараторными примочками. В нормальном режиме кнопка Кн2 (S3 на плате индикации — см. рис. 20.2) разомкнута и на работу схемы не влияет. Напряжение батареи фактически напрямую (делитель R4/R5 делит сигнал в отношении 300/301) попадает на инвертирующий вход компаратора. Это напряжение сравнивается с напряжением на стабилитроне VD3, равном примерно 3,9 В. Стабилитрон обязательно должен быть маломощный, типа КС139Г, в стеклянном корпусе, или соответствующий импортный, в противном случае сопротивление резистора R35 надо снизить примерно в два-три раза. Когда напряжение батареи упадет ниже этого уровня (выбранного с некоторым запасом — при 3 В МК еще может нормально работать, но часть напряжения батареи упадет на диоде VD2, кроме того, следует учитывать, что смена батарейки может произойти не сразу), то компаратор перебросится в состояние логической единицы по выходу.
Программа (см. далее) зарегистрирует падение напряжения батарейки, и разделительное двоеточие (пара светодиодов VD1 и VD2 на схеме по рис. 20.2, подключенных к выводу мигания от Timer 1) перестанет мигать и будет гореть постоянно. Восстановление произойдет сразу, как только батарею сменят на свежую. Та же реакция будет, если просто отключить батарею тумблером «Бат» (S1 на рис. 20.1) или удалить ее. Для того, чтобы в этих случаях вход компаратора не оказывался «висящим в воздухе», и предназначен резистор R5. Ток через него настолько мал (около 1,5 мкА), что на разряд батареи это не оказывает влияния. С8 защищает вход от наведенных на этом резисторе помех.
Разумеется, отличить нажатие кнопки Кн2 от внезапного выключения батарейки МК не в состоянии, но «правильная» реакция на нажатие Кн2, как мы увидим далее, происходит только в режиме установки часов — когда предварительно была нажата кнопка Кн1 (S2 на рис. 20.2). Нажатие Кн2 и в самом деле будет восприниматься, как отключение батарейки — ив режиме установки, и в рабочем режиме, но только на время ее нажатия, а после отпускания состояние МК сразу восстановится. Поэтому функции друг другу не мешают, за исключением невероятного совпадения, если батарейка «захочет» разрядиться как раз в момент установки времени (и при разряженной или отключенной батарейке, увы, установку времени производить нельзя).
При пропадании внешнего питания запирается диод VD1, а диод VD2 открывается, и напряжение батареи попадает на питание МК. Резистор R6 вкупе с развязывающим конденсатором С2 служат для большей устойчивости работы МК в момент перепада напряжений при переключении питания, для той же цели служит конденсатор С7, установленный параллельно кнопке Кн1 (иначе при перепадах напряжения может спонтанно возникать прерывание, и часы войдут в режим установки, о котором далее). Одновременно с переключением питания становится равным нулю напряжение на стабилитроне, а так как при этом стабилитрон представляет собой обрыв в цепи, то установлен резистор R36, который служит тем же целям, что и резистор R5. Компаратор работать перестает (точнее, он всегда будет показывать «нормальную» батарею), но нас это не волнует, т. к. индикации все равно нет.
Тумблер «Бат» (S1 на рис. 20.1) нужен для отключения батареи в случае, если вы хотите остановить часы надолго, а вот тумблер для включения сетевого питания тут совершенно не требуется (разве что на время отладки).
Программа
Полный текст программы часов можно скачать с сайта автора по ссылке: http://revich.lib.ru/AVR/clock.zip
. Все подробности приведены в качестве комментариев к тексту программы, здесь мы рассмотрим только общее ее построение и принцип работы.При включении питания процессора программа начинает работу с команды по метке RESET. Здесь она устанавливает соответствующие порты на выход (все, кроме двух входов компаратора и входа кнопки Кн1), затем делает нужные установки для таймеров и разрешает соответствующие прерывания.
Восьмиразрядный Timer 0 у нас будет по событию переполнения управлять разрядами в режиме динамической индикации. При заданной частоте на входе Timer 0, равной 1/8 от тактовой частоты (4 МГц), частота управления разрядами получится равной 1/256 от 4 МГц/8 = 500 кГц, т. е. чуть меньше 2 кГц, а каждый из четырех разрядов будет включаться с частотой почти 500 Гц, что однозначно превышает порог заметности мигания.
* * *