Vasile Surducan и Emanoil Surducan
Мультиплексирование линий ввода/вывода микроконтроллеров и управление светодиодным индикатором
Очень часто разработчики устройств на микроконтроллерах или программируемых устройствах сталкиваются с проблемой нехватки цифровых линий ввода/вывода при подключении многоразрядных светодиодных индикаторов. Особенно острой становится проблема при необходимости реализации в устройстве кнопочной клавиатуры, наряду с индикаторами и другой периферией. С целью экономии портов микроконтроллера в таких случаях прибегают к использованию различной техники мультиплексирования линий ввода/вывода, которые имеют свои преимущества и недостатки.
К таковым методам мультиплексирования цифровых линий ввода/вывода относится Charlieplexing (мультиплексирование «методом Чарли») или Gugaplexing.
Чарли Аллен (Charlie Allen) разработал метод Charlieplexing, работая в компании Maxim, которая с тех пор выпускает микросхемы, реализующие алгоритм Чарли. Аллен использовал высокоимпендансное третье состояние выводов, реализованное во многих микропроцессорах, для выключения светодиодов в матрице, в то время как включение отдельных светодиодов производится путем подачи на соответствующие выводы микропроцессора сигналов высокого и низкого уровня.
Gugaplexing – это новый метод мультиплексирования линий ввода/вывода, и, в сравнении с Charlieplexing, позволяет управлять вдвое большим числом светодиодов при добавлении в схему нескольких дополнительных компонентов.
В общем случае они позволяют подключить 8-разрядный семисегментный светодиодный индикатор, используя всего 9 линий ввода/вывода. Однако, при разработке следует учитывать, что при таком мультиплексировании имеет место низкий коэффициент заполнения, и поэтому требуется наличие драйвера между микроконтроллером и индикатором для достижения высокой видимости символов на индикаторе.
Схема на рисунке 1 использует 8+N/2 линий ввода/вывода для подключения N-разрядного семисегментного индикатора, наряду с восемью кнопками на этой же шине. Стоит заметить, что данная реализация не требует использования драйвера для индикатора и можно использовать ее с любыми программируемыми устройствами и микроконтроллерами, допускающими непосредственное подключение светодиодов к портам, например с микроконтроллерами Atmel или Microchip.
Кликните для увеличения |
|
Рисунок 1. | Индикатор с общим анодом, индикатор с общим катодом и кнопки могут быть подключены к одной шине. |
На схеме резисторы R8 – это токоограничительные резисторы для индикатора IC1 (CA56-12HWA) с общим анодом и для индикатора IC2 (CA56-12SRWA) с общим катодом. Допускается любая комбинация стандартных и ультраярких индикаторов IC1/IC2, однако потребуется корректный выбор коэффициента заполнения в программном обеспечении. Резисторы R7 и импульсные диоды D1-D8 (1N4148) используются для исключения подсвечивания выключенных сегментов индикаторов (Antighostig). Появление такого эффекта (Ghosting) – слабое свечение выключенных сегментов – связано с переключением (мультиплексированием) и появлением кратковременных импульсных помех, или с несоответствующими уровнями напряжений на выводах управления, когда эти выводы находятся в высокоимпедансном состоянии (Z-состояние). Такой эффект – результат использования всех линий ввода/вывода: высокий, низкий и высокоимпедансный логический уровень выхода, переключение между ними в последовательности бесконечного цикла программы (см. Таблицу 1).
Рисунок 2. | Без резисторов R7 видно подсвечивание выключенных сегментов индикатора (слева). С резисторами R7 такого эффекта не наблюдается, даже при нажатии кнопок S1-S3 |
Нижеследующее выражение позволит вычислить значение резисторов R7:
R7=(VSAFE – 0.6 В)/10IGHOST,
где
- 0.6 В – падение напряжения на диодах D1-D8, измеренное при температуре 25 °С;
- IGHOST – пороговое значение статического тока утечки, при котором подсвечивание выключенных сегментов заметно, но минимально;
- VSAFE – потенциальное значение напряжения, которое может появиться на любом сегменте, когда сегмент не включен.
Таблица 1. Последовательность переключений для индикаторов
Последова-
тельность |
Включенный
символ на индикаторе |
Чтение
кнопок |
Общие выводы, кнопки
|
Шина сегментов
A, B, … Dp |
|||
AK1
|
AK2
|
AK3
|
AK4
|
||||
1
|
IC1 – 1
|
—
|
Z
|
Z
|
Z
|
Z
|
выход
низкий уровень=данные |
2
|
IC1 – 2
|
—
|
Z
|
1
|
Z
|
Z
|
|
3
|
IC1 – 3
|
—
|
Z
|
Z
|
1
|
Z
|
|
4
|
IC1 – 4
|
—
|
Z
|
Z
|
Z
|
1
|
|
5
|
—
|
Да
|
1
|
—
|
—
|
—
|
вход |
6
|
IC2 – 5
|
—
|
0
|
Z
|
Z
|
Z
|
выход высокий уровень=!данные |
7
|
IC2 – 6
|
—
|
Z
|
0
|
Z
|
Z
|
|
8
|
IC2 – 7
|
—
|
Z
|
Z
|
0
|
Z
|
|
9
|
IC2 – 8
|
—
|
Z
|
Z
|
Z
|
0
|
|
Обозначение логических уровней в таблице: Z – высокоимпедансное состояние; |
Пользователи могут найти значение IGHOST экспериментально при внешнем освещении менее 10 люкс, подав небольшой ток на отдельный сегмент индикатора и наблюдая за значением тока и падением напряжения на сегменте в момент, когда сегмент начинает светиться. Для ультраярких индикаторов значение IGHOST должно быть приблизительно 70 мкА. Ток IGHOST создает нежелательное падение напряжения VGHOST:
VGHOST=1.54 В и VSAFE≤kVGHOST,
где k – доверительный коэффициент в диапазоне 0.5 – 0.7, компенсирующий напряжение VGHOST дисперсии индикатора. В нашем примере значение VSAFE = 0.7 В для ультраяркого индикатора и 1 В для стандартного индикатора. Если будет использоваться комбинация из стандартного и ультраяркого индикатора, то необходимо выбрать меньшее значение VSAFE для вычисленного значения R7.
Чтение кнопок представляет собой асинхронную процедуру, в отличие от цифрового мультиплексирования; таким образом любая комбинация нажатия кнопок не должна включать сегменты индикаторов. Резисторы R1, R2, R3 ограничивают ток через сегменты индикатора IC1 ниже IGHOST при включенном транзисторе Q1 и высоком уровне на выводе AK1. Резистор R6 удерживает транзистор закрытым, даже когда выход AK1 находится в высокоимпедансном состоянии. Резистор R4 ограничивает ток коллектора транзистора.
Также следует отметить, что во время чтения кнопок должны быть включены внутренние подтягивающие резисторы микроконтроллера по линиям A, B и C.
Загрузки
Демонстрационная программа для микроконтроллера PIC16F886 (исходный код, подключение индикаторов по схеме на рисунке 1) – скачать