Используя АЦП для проверки состояния клавиатуры, была спроектирована схема, в которой микроконтроллер управляет пятью светодиодами независимо, используя пять выводов, и считывает состояние 14 кнопок! Схема также может рассматриваться для получения простого светового эффекта с несколькими экспериментальными функциями.
В меню программы из двенадцати элементов, в дополнение к упомянутым выше световым эффектам,имеется также очень простая обучающая игра на выбор и калькулятор для преобразования трехзначных десятичных чисел в двоичный код.
Описание схемы
Схема устройства представлена на рисунке 1.
Схема управляется микроконтроллером, задачей которого является считывание состояния клавиатуры и управление двенадцатью светодиодами. Клавиатура состоит из 13 кнопок - которые вместе с резисторами R1-R14 образуют делитель напряжения. В зависимости от того, какая клавиша нажата,напряжение на выходе делителя изменяется. Это напряжение подается на порт PB4 микроконтроллера и измеряется AЦП. В зависимости от значения измеряемого напряжения, микроконтроллер, используя таблицу данных, содержащуюся в программе,определяет, какая кнопка нажата.
После декодирования кнопки соответствующая задача или программа световых эффектов реализуется в регистрах rLimage и rHimage. При прерываниях таймера, происходящих каждые 52 мкс (каждые 250 тактов для тактового сигнала RC - 4,8 МГц), состояние этих регистров отображается с использованием метода charlieplexindu (Чарлиплексирования) . Чарлиплексирование - это метод мультиплексирования, возможность независимого управления большим количеством светодиодов с небольшим количеством портов контроллера.
Максимальное количество светодиодов, управляемых N выводами (портами) микроконтроллера
N*N-N, то есть для 4 контактов 4*4-4=12, для 5 контактов 5*5-5=20 и, например, 8 контактов 8*8-8=56 независимо управляемых светодиодов.
Для того чтобы микроконтроллер мог управлять диодами с использованием метода Чарлиплексирования, его порты должны быть в трех состояниях и иметь достаточно высокую нагрузочную способность. Три состояния - это когда порт микроконтроллера может внутренне подключаться к плюсовому источнику питания или к минусу (заземлению) или отключаться от всего, находясь в состоянии высокого уровня.
Между каждыми двумя выводами, предназначенными для управления LED, мы подключаем два светодиода встречно-параллельно. Способ подключения диодов к четырем портам порта показан
на рисунке 2.
Резисторы R15-R18 ограничивают величину тока, протекающего через диоды. Значение этих резисторов должно составлять половину сопротивления, необходимого для ограничения тока светодиода в данной цепи. Это связано с тем, что ток подсветки отдельных светодиодов всегда протекает через два резистора. Если мы хотим зажечь диод LEDI, то порт PBO должен быть установлен как выход в состоянии высокий (+) и порт PB3 как низкий (-) выход. С другой стороны, чтобы другие светодиоды на портах PB1 и PB2 не зажигались в это время, они должны быть установлены в состояние высокого импеданса (в процессоре AVR мы устанавливаем его как вход без «подтягивания, обнуления битов данного вывода в регистрах DDRB и PORTB). Конечно в одну единицу времени может гореть только один светодиод, но благодаря быстрому включению следующих диодов у нас создается впечатление, что они горят одновременно.
Для мультиплексного управления рекомендуется использование так называемых высокоэффективных диодов. Было изготовлено несколько схем, использующих чарлиплексирование, и, несмотря на использование в них самых дешевых светодиодов, полученные эффекты оказались удовлетворительными.
Одним из недостатков Чарлиплексирования является возможность управления только светодиодами или оптопарами. Если микропроцессор должен отображать некоторую информацию о состоянии устройства с помощью нескольких светодиодов, то отображаемый метод может значительно уменьшить количество выводов, необходимых для микроконтроллера.
В таблице 1 приведены состояния выводов порта PB, необходимые для зажигания отдельных светодиодов LED1-LED12.
В схеме также применяется пьезозуммер. Это дополнительная функция разделения задач между выходами контроллера. При измерении напряжения с кнопок пьезозуммер не мешает измерению и даже действует как подавитель помех.
Процедуры генерации звука и измерения состояния клавиатуры адекватно переключают функцию PB4 в качестве выхода или входа.Между функциональными переключениями имеются соответствующие интервалы времени.
Резистор R13 защищает выход PB4 от короткого замыкания на землю от кнопки S13. Конечно, значение R13 также включено в аналоговые измерения состояния клавиатуры.
Изготовление устройства
Расположение элементов показано на рис.3,а печатная плата в формате Sprint-Layout находится в архиве.
Резисторы используемые для раскладки клавиатуры имеют допуск 1%:
Используйте измеритель для выбора резисторов, чтобы их значения были как можно ближе к значениям на схеме. Программа для МК находится в архиве.
Работа с устройством
Схема включается нажатием кнопки сброса S14,подключеной к выводу 1 МК. После включения световые точки «сдвигаются». И теперь с помощью кнопок S1-S12 мы выбираем одну из 12 подпрограмм. Кнопка S1 активирует подпрограмму,которой мы можем независимо управлять отдельными светодиодами. При нажатии клавиши соответствующий светодиод включается (выключается). S1 переключает LED 1, S2 - LED2 и т.д. Эта подпрограмма облегчает проверку правильности изготовления схемы и в то же время позволяет отображать независимые опции управления отдельных светодиодов. Кнопка S2 активирует несколько звуковых эффектов. Переключатели S3-S9 включают различные типы световых эффектов, в том числе 12-битный двоичный счетчик. После включения эффекта зажигания мы можем настроить
«Скорость» его отображения.
Эта настройка выполняется кнопками S1(+) и S2(-). Кроме того, яркость светодиодов можно регулировать с помощью клавиш S3(+) и S4(-). После нажатия кнопки S10 мы включим игру, которая заключается в нажатии кнопки с цифрой, отображаемой в двоичном виде. Светодиоды отображают двоичные псевдослучайные числа от 1 до 12. После нажатия кнопки, соответствующей данному номеру, соответствующий звук сообщает нам, был ли ответ верным. кнопка S11 активирует программу калькулятора для преобразования трехзначных десятичных чисел в двоичное число. Три светодиода в левой части дисплея показывают нам, какую цифру вводить.
Кнопки S1-S9 соответствуют номерам с 1 по 9, кнопки 10, 11 и 12 вводят цифру 0. Чтобы ввести цифру 16, нажмите 0,1,6, т.е. S10,S1,S6 и для цифр 845 кнопки S8, S4, S5.
После ввода трех цифр схема преобразует число в двоичное и отображает результат на LED.
Чтобы ввести новое число для преобразования, нажмите 0 "(S10). Затем снова загорятся три светодиода с левой стороны дисплея. Последняя опция, включенная с помощью кнопки S12 активирует процедуру отображения измерения датчика АЦП в виде бинама (LED12 - отображает самый младший бит измерения). Мы можем видеть показания преобразователя после нажатия отдельных кнопок. Выйти из этой процедуры можно только нажатием кнопки S14 Reset.
В исходной версии программы (на ассемблере) отмечены места выполнения кода подпрограмм после выбора кнопками S1 - S12. Эти места отмечены интервалами из комментариев с соответствующим номером.
Вы можете свободно изменять эти процедуры, менять местами и даже удалять свои процедуры для расширения памяти. Однако вы не должны изменять или удалять комментарии, которые разделяют подпрограммы параметров.
Кнопка S13-OFF выключает схему. Выключение питания включает в себя перевод процессора в режим Power Down, в котором система потребляет около 0,1uA. Этот ток может зависеть от версии системы ATtinyl3. Такое незначительное энергопотребление не будет разряжать аккумулятор в течение многих лет. Если мы используем низковольтную версию ATtinyl3V, на устройство может подаваться напряжение от 2В до 5,5В. Минимальное энергопотребление в состоянии Power Down достигается, если правильно установлен Botlevel биты в fusebits - Botlevel off. При программировании контроллера вы также должны запрограммировать fusebity RС па 4,8 МГц и отключить предделитель на 8. Остальные фьюзы не трогаем.
На всякий случай здесь приводится полная таблица FUSEBITY (AVR STUDIO).
FUSEBITY
;*********************************************
;***LOCKBITS:
;Lockbit21= 11:No memory lock features enabled
;***FUSEBITS:
;Fusebit_H= 0:Enable serial programming
;Fusebit_G= 1:Erase EEPROM when chip is erased
;Fusebit_F= 1:Watchdog timer always off
;Fusebit_E= 1:Divide clock by 8, OFF
;Fusebi_DC= 10:Start-up time: 14 CK + 64ms
;Fusebi_BA= 01:Int. RC Osc. 4.8 MHz
;***FUSEBITS HIGH:
;Fusebit_7= 1:Selfprog disabled
;Fusebit_6= 1:DEBUG WIRE disabled
;Fusebi_54= 11:BODLEVEL disabled
;Fusebit_3= 1:External reset enable
Материал взят из журнала Elektronika dla Wszystkich за 2009.8