Для подключения к внешнему устройству используются цепи O1—O24, из них O1…O16 являются обычными выходами, а O17…O24 могут использоваться как входы или выходы. Цепь O16 параллельно используется для внутренних нужд.
4. Программирование
Программа должна писаться для каждого конкретного случая использования устройства отдельно, поэтому автор не приводит здесь никаких вариантов, а только рассматривает основные принципы программного управления схемой.
Практически любой язык программирования имеет функции, позволяющие записать число по заданному адресу в порт ввода-вывода. Управление схемой осуществляется через вызовы таких функций. Для записи 8-битового числа в буферный регистр схемы необходимо записать его в регистр данных параллельного порта, затем записать в регистр управления любое число, имеющее в соответствующем разряде единицу (соответствующем выводу С выбранного буферного регистра), и затем в него же ноль. Для чтения 4 битов данных достаточно просто прочитать регистр состояния порта, для чтения остальных битов предварительно измените состояние линии 016. Необходимо учитывать, что некоторые входные и выходные линии порта проинвертированы.
Адреса регистров для LPT1 приведены в таблице (верно для большинства компьютеров, но для корректного определения адресов следует использовать данные BIOS):
Регистр данных… 378h
Регистр состояния… 379h
Регистр управления… 37Ah
Автор:
6.16. Электронные часы с будильником на
В данном проекте описаны электронные часы с будильником, выполненные на AVR-микроконтроллере типа AT90S2313-10PI. Часы имеют светодиодный индикатор отображения текущего времени и встроенный аккумулятор для поддержания хода при пропадании сетевого напряжения, что очень актуально в условиях непрекращающегося экономического кризиса. Устройство содержит минимум комплектующих и имеет несложную электрическую схему. Часы были испытаны автором на протяжении нескольких месяцев, что показало их надежность и работоспособность.
Рис. 6.19.
Краткое описание устройства часов
Предлагаемый вашему вниманию проект был выполнен «по ходу дела» при освоении автором микроконтроллеров семейства AVR фирмы Atmel. Один из этих «жучков» и был использован при разработке часов. Выбор именно AT90S2313-10PI объясняется широкой доступностью и невысокой ценой этого кристалла, а также наличием в нем памяти программ объемом 2 Кб и программно реализованного стека.
Как видно, микроконтроллер является основной и единственной микросхемой, используемой в данной разработке. Для задания тактовой частоты контроллера используется кварцевый резонатор на 10 МГц, но управляющую программу очень легко переделать и для резонаторов с другими частотами. В качестве устройства отображения использованы два индикатора красного цвета свечения с общим анодом, каждый индикатор состоит из двух цифр с десятичными точками. Цифры имеют отдельные аноды. Можно применить любые индикаторы с общим анодом, лишь бы ток сегмента не превышал 20 мА и каждая цифра имела бы собственный анод. Рекомендуется выбирать индикаторы с большими цифрами, тогда часы будут хорошо видны в темноте.
Индикация текущего времени осуществляется динамически, в данный конкретный момент времени отображается лишь одна цифра, что позволяет значительно снизить аппаратные затраты. Происходит это так. Аноды каждой из четырех цифр обоих индикаторов являются раздельными, что позволяет в данный момент времени подключить к источнику питания только один анод и отобразить одну цифру. Для этого часы имеют четыре транзисторных ключа, выполненных на транзисторах типа КТ361Е (VT1…VT4), и резисторах (R2…R9). Ключи управляются микроконтроллером, причем соответствующий ключ открыт, если на выводе контроллера присутствует логический ноль. Одноименные сегменты всех четырех цифр соединены вместе и через токоограничивающие резисторы R21…R27 подключены к выводам порта В (выводы РВ.0…РВ.6). Десятичная точка не используется, она «принесена в жертву» добавленному в часы будильнику и всегда выключена. Управляющая программа один за другим подключает цифры к источнику питания, и одновременно на соответствующие выводы порта В выставляется код отображаемой цифры. Поскольку сканирование индикатора происходит очень быстро, мерцание цифр становится незаметным.