Главная » Статьи » Как подключить |
Когда не хватает ног. Часть 1. Дешифратор 4-16.
Таблица истинности описывающа логику работы приведена ниже.
L-низкий уровень
Н-высокий уровень
Х-низкий или высокий, без разницы
Если посидеть и повтыкать с минуту, то можно понять что ничего сложного тут нет =) Стоит отметить, что активный уровень на выходе - низкий (low). Помимо входов-выходов присутствуют два разрешающих вывода enable, включенных по логической И. Дешифратор будет выполнять свою функцию только тогда, когда обе эти ноги сидят на земле.
Имхо, недостатком является только то, что в любой момент времени только на одном из выходов может быть активный уровень. Поэтому, если потребуется одновременное включение нескольких выходов, придется приделывать динамическое управление.
Вот простой пример программы для ATTiny13, здесь поочереди выставляются пины выхода дешифратора в активное состояние, а-ля бегущий огонек:
$regfile = "attiny13.dat" $crystal = 1000000 Config Portb = Output Do Portb = &B00001111 Waitms 100 Portb = &B00001110 Waitms 100 Portb = &B00001101 Waitms 100 Portb = &B00001100 Waitms 100 Portb = &B00001011 Waitms 100 Portb = &B00001010 Waitms 100 Portb = &B00001001 Waitms 100 Portb = &B00001000 Waitms 100 Portb = &B00000111 Waitms 100 Portb = &B00000110 Waitms 100 Portb = &B00000101 Waitms 100 Portb = &B00000100 Waitms 100 Portb = &B00000011 Waitms 100 Portb = &B00000010 Waitms 100 Portb = &B00000001 Waitms 100 Portb = &B00000000 waitms 100 Loop End Вот что получится в итоге:
Еще на основе дешифратора можно построить расширитель для клавиатуры, и таким образом получить в распоряжение 16 кнопок занимающих 5 пинов микроконтроллера. Например вот простой пример для attiny2313: В основном цикле выполняется какая-нибудь программа, например мигание светодиода. По переполнению таймера происходит прерывание, в обработчике прерывания происходит сканирование клавиатуры и если была нажата кнопка, на ноге PortB.7 появится низкий уровень. Узнав в какой момент было нажатие, можно узнать номер нажатой кнопки. Этот номер отправим по UART: $regfile = "attiny2313.dat" $crystal = 1000000 $baud = 1200 Dim M As Byte Dim N As Byte Config Portb = Output Config Portb.7 = Input Config Portd.2 = Output Config Timer1 = Timer , Prescale = 8 'переполнение таймера каждые 0,5 сек On Timer1 Keyboard: Enable Interrupts Enable Timer1 Do '***выполняем основную программу*** Portd.2 = 1 Wait 1 Portd.2 = 0 Wait 1 Loop End Keyboard: For M = 0 To 15 Step 1 Portb = M If Pinb.7 = 0 Then 'если была нажата кнопка N = M 'смотрим в какой момент она была нажата M = 0 Print N 'печатаем номер кнопки Return 'и выходим из цикла End If 'если нажатия небыло, продолжим сканирование до конца Waitms 10 Next M Return 'возвращаемся в основной цикл программы Документация на микросхему 74HC154 | |
Просмотров: 41862 | Комментарии: 16
| Теги: |
Всего комментариев: 16 | |||||||||||||
| |||||||||||||
авторизация
рубрики
Проекты [46] |
Как подключить [32] |
Инструменты [3] |
Полезная информация [18] |
Объявления [3] |
метки