Семисегментный индикатор
С помощью таких индикаторов можно было вывести цифровую информацию в арабских цифрах. Раньше именно на этих лампах делали различную индикацию для приборов и других электронных устройств. В настоящее время газоразрядные элементы почти уже нигде не применяются.
Рис. 1 — Часы на газоразрядных индикаторах
Минусы газоразрядных ламп — большое потребление энергии.
С появлением светодиодов ситуация изменилась кардинально. Светодиоды сами по себе потребляют маленький ток. Если расставить их в нужное положение, то можно высвечивать абсолютно любую информацию. Для того, чтобы высветить все арабские цифры было достаточно всего-то семь (отсюда и название семисегментного индикатора) светящихся светодиодных полосочек, выставленных определенным образом.


Рис. 2 — Расположение сегментов
Почти ко всем таким семисегментным индикаторам добавляют также и восьмой сегмент — точку, для того, чтобы можно было показать целое и дробное значение какого-либо параметра по идее получается восьми сегментный индикатор, но по-старинке его также называют семисегментным, и ошибки в этом нет.
Короче, семисегментный индикатор — это светодиоды, расположенные друг относительно друга в определенном порядке и встроенные в один корпус.

Рис. 3 — Схема одиночного семисегментного индикатора
Семисегментный индикатор может быть как с общим анодом (ОА), так и с общим катодом (ОК). Если семисегментник у нас с общим анодом (ОА), то в схеме мы должны на этот вывод подключать «плюс», а если с общим катодом (ОК) — то «минус» или землю. На какой вывод мы подадим напряжение, такой светодиод у нас и загорится.
Рис. 4 — Светодиодные индикаторы
Семисегментные индикаторы могут быть одиночные и многоразрядные, то есть две, три, четыре семисегментника в одном корпусе. Для того, чтобы проверить современный семисегментник, нам достаточно мультиметра с функцией прозвонки диодов. Ищем общий вывод (это может быть или ОА или О и смотрим работоспособность всех сегментов индикатора.
Рис. 5 — Проверка трехразрядного семисегментника
У нас загорелся один сегмент, таким же образом проверяем и другие сегменты.
Иногда напряжения на мультиметре не хватает, чтобы проверить сегменты индикатора. Поэтому берем блок питания, выставляем на нем 5 В, подключаем к одной клемме блока питания резистор 1-2 кОм и начинаем проверять индикатор.
Рис. 6 — Проверка индикатора
Зачем нужен резистор? В момент подачи на светодиод напряжения он начинает резко потреблять ток и в этот момент он может перегореть. Чтобы ограничить ток, последовательно со светодиодом включается в цепь резистор.
Таким же образом проверяем четырехразрядный семисегментник с китайского радиоприемника
Рис. 7 — Проверка четырехразрядного семисегментника
В схемах семисегментники цепляются с резисторами на каждом выводе. Это тоже связано с тем, что светодиоды при подаче напряжения на них потребляют большой ток и выгорают.

Рис. 8 — Подключение резисторов семисегментнику
В нашем современном мире семисегментники уже заменяются ЖК-индикаторами, которые могут высвечивать абсолютно различную информацию, но для того, чтобы их использовать, нужны определенные навыки в схемотехнике таких устройств. Пока что проще и дешевле светодиодных семисегментных индикаторов ничего нет.
Как устроен семисегментный индикатор
В настоящее время для отображения информации всё чаще используются графические дисплеи, однако, семисегментные индикаторы также не утратили своего значения. Если требуется лишь отображение чисел, то они могут стать более предпочтительным вариантом, т.к. просты в управлении и могут использоваться совместно с любым микроконтроллером с достаточным количеством выводов. Жидкокристаллические семисегментные индикаторы обладают сверхнизким энергопотреблением (например, в электронных часах, вместе со схемой управления работают от одной батарейки в течение нескольких лет).
На этой странице будем вести речь о светодиодных семисегментных индикаторах. Они имеют предельно простую конструкцию, дёшевы, надёжны. Обеспечивают высокую яркость и контрастность отображаемой информации. Существует большое разнообразие индикаторов: с разным цветом свечения сегментов, разного размера, отличающиеся схемой подключения светодиодов (с общим катодом или общим анодом). При необходимости отображения нескольких разрядов можно установить несколько одноразрядных индикаторов рядом на печатной плате либо выбрать нужный вариант многоразрядного индикатора.
Своё название семисегментные индикаторы получили в связи с тем, что изображение символа формируется с помощью семи отдельно управляемых (подсвечиваемых светодиодом) элементов — сегментов. Эти элементы позволяют отобразить любую цифру 0..9, а также некоторые другие символы, например: ‘-‘, ‘A’, ‘b’, ‘C’, ‘d’, ‘E’, ‘F’ и другие. Это даёт возможность использовать индикатор для вывода положительных и отрицательных десятичных и шестнадцатеричных чисел и даже текстовых сообщений. Обычно индикатор имеет также восьмой элемент — точку, используемую при отображении чисел с десятичной точкой. Сегменты индикатора обозначают буквами a, b, . g (a — верхний элемент, далее буквы присваиваются сегментам по часовой стрелке; g — центральный сегмент; dp — точка).
8 независимых элементов, каждый из которых может находиться в одном из двух состояний — горит или не горит, дают всего 2**8=256 возможных комбинаций. Или 128 комбинаций, каждая из которых может быть с горящей точкой или без неё.

Рис. %img:ssd
Существует два варианта одноразрядных индикаторов: с общими катодами или общими анодами. Всего для подключения используется 9 выводов — общий и 8 отдельных выводов светодиодов.

Рис. %img:ssc
Статическая индикация
В том случае, если светодиоды в индикаторе имеют соединённые вместе аноды (схема с общим анодом), общий анод подключается к источнику напряжения +VDD, а катоды светодиодов — сегментов подключаются к схеме управления (например, микроконтроллеру), которая отвечает за формирование изображения на индикаторе. Зажигаются сегменты низким уровнем (логический 0) на выводе схемы управления. По отношению к схеме управления ток светодиодов является втекающим, так что могут использоваться интегральные схемы, которые имеют выходы с открытым стоком. Изменяя величину питающего индикатор напряжения VDD, можно регулировать яркость свечения.

Рис. %img:ssc2
Если в индикаторе соединены вместе катоды (схема с общим катодом), то общий катод подключается к общему проводу схемы, а аноды светодиодов подключаются к схеме управления. В этом случае сегмент зажигается высоким уровнем на выходе схемы управления, для которой ток светодиода является вытекающим, что не позволяет использовать выходы с открытым стоком, необходим выход, выполненный по двухтактной схеме. Регулировать яркость можно, подключив общий вывод индикатора к источнику смещающего напряжения 0..VDD, рассчитанного на втекающий ток, например к эмиттерному повторителю на транзисторе структуры p-n-p. Увеличивая смещение, будем уменьшать яркость свечения.

Рис. %img:ssc3
В спецификации на индикатор указывается потребляемый одним сегментом ток. Обычно это величина порядка нескольких мА и нагрузочной способности выводов большинства микроконтроллеров достаточно для управления индикатором. Если используется микроконтроллер с малым выходным током выходов или если используется индикатор с большим током (например, большого размера или рассчитанный на работу при ярком внешнем освещении), то подключение осуществляется через драйвер — интегральную микросхему, содержащую набор повторителей или инверторов с мощными выходами. Также можно использовать транзисторы в качестве ключей для управления индикатором.
Как и любой светодиод (также это относится и к обычным диодам), светодиоды сегментов имеют очень резкую зависимость тока от напряжения на светодиоде. Поэтому требуется стабилизация тока через эти светодиоды для обеспечения работы в номинальном режиме. Обычно используется простейший способ — последовательное включение задающих ток резисторов. При выборе номинала резисторов следует учитывать падение напряжения на светодиоде в выбранном режиме работы. Эту величину можно уточнить в спецификации на индикатор. Падение напряжения на светодиоде существенно больше, чем на обычном диоде.
Например, для индикаторов FYQ-3641Ax/Bx падение напряжения на светодиоде в зависимости от материала, цвета свечения составляет от 1.6 до 2 В при токе 5 мА и от 1.8 до 2.4 В при токе 30 мА (30 мА — максимально допустимый ток через светодиод для данного индикатора в непрерывном режиме). Так как возможен разброс значений для разных устройств даже одного типа (в меньшей степени, но есть разброс между характеристиками светодиодов и в пределах одного индикатора), а кроме того, падение напряжения зависит от температуры, поэтому параметры схемы должны обеспечивать достаточную стабильность тока при изменении падения напряжения на светодиоде.
Для случая, когда ток задаётся с помощью резистора, это означает, что падение напряжения на резисторе должно быть много больше возможных отклонений напряжения на светодиоде от среднего значения. Предположим, что требуется обеспечить ток через светодиод 5 мА, при этом напряжение на светодиоде составляет в среднем 1.8 В.

Рис. %img:c
При напряжении источника 3.3 В (вариант 1) падение напряжения на резисторе составит 3.3-1.8=1.5 В; значит сопротивление резистора R1=1.5 В/5 мА=300 Ом. Если при воздействии дестабилизирующих факторов (разброс параметров, изменение температуры или иные причины), напряжение на светодиоде остаётся в пределах 1.6..2.0 В (отклонение до ±0.2 В от расчётного значения 1.8 В), то отклонение тока от расчётного значения будет не более ±0.7 мА (не более 14%). В большинстве практических случаев это достаточная точность для питания цепей светодиодных индикаторов, хотя ещё следует учесть нестабильность питающего напряжения, неидеальность цифровых ключей, допуск резистора.
При напряжении источника 5 В (вариант 2) падение напряжения на резисторе составит 5-1.8=3.2 В; значит, сопротивление резистора R2=3.2 В/5 мА=640 Ом, выбираем 620 Ом — ближайшее значение из ряда E24. В этом случае отклонение напряжения на светодиоде ±0.2 В вызовет отклонение тока от расчётной величины порядка ±0.3 мА или не более чем ±7%. Получили точность заданного тока лучшую, чем в первом случае. Это вполне ожидаемый результат — увеличивая напряжение источника и его сопротивление, мы делаем его более близким к идеальному источнику тока.
Если задаться предельно допустимой точностью тока ±20%, можем получить, что минимальное питающее напряжение составляет 2.8 В, при этом сопротивление ограничивающего ток резистора равно 200 Ом.

Рис. %img:sym
Для формирования изображения символа на индикаторе используют таблицу, которая ставит в соответствие коду символа набор отображаемых сегментов. Приведём пример такой таблицы. В этой таблице код символа — его порядковый номер в таблице. Набор сегментов, формирующих символ, рассматривается как двоичное число, сегменту A соответствует младший бит числа. Если бит числа равен 0, то соответствующий сегмент не зажигается при отображении символа, а если равен 1, то зажигается. В таблице также приводится запись числа, определяющего набор зажигаемых сегментов, в шестнадцатеричной форме.
| # | Символ | Рис. | g | f | e | d | c | b | a | HEX |
| 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 0x3F | |
| 1 | 1 | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 0x06 | |
| 2 | 2 | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0x5B | |
| 3 | 3 | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 0x4F | |
| 4 | 4 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 0x66 | |
| 5 | 5 | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0x6D | |
| 6 | 6 | 1 | 1 | 1 | 1 | 1 | 0 | 1 | 0x7D | |
| 7 | 7 | 0 | 0(1) | 0 | 0 | 1 | 1 | 1 | 0x07 (0x27) |
|
| 8 | 8 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0x7F | |
| 9 | 9 | 1 | 1 | 0 | 1 | 1 | 1 | 1 | 0x6F | |
| 10 | A | 1 | 1 | 1 | 0 | 1 | 1 | 1 | 0x77 | |
| 11 | b | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 0x7C | |
| 12 | C | 0 | 1 | 1 | 1 | 0 | 0 | 1 | 0x39 | |
| 13 | d | 1 | 0 | 1 | 1 | 1 | 1 | 0 | 0x5E | |
| 14 | E | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0x79 | |
| 15 | F | 1 | 1 | 1 | 0 | 0 | 0 | 1 | 0x71 | |
| 16 | <Пробел> | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0x00 | |
| 17 | — | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0x40 | |
| . | можете добавить другие символы | |||||||||
Для символа ‘7’ в таблице даны два возможных варианта отображения.
Динамическая индикация
Обычно требуется отображение чисел, состоящих более чем из одного разряда. Например, для цифрового вольтметра понадобится хотя бы 4..5 разрядов, а для RLC-метра, отображающего две величины или для частотомера, требуемое количество разрядов может составить 8..10. Количество разрядов в калькуляторе может превышать 12. Проблема в том, что если каждым разрядом управлять индивидуально, то с увеличением их количества, рост числа выводов микроконтроллера и количества проводников для подключения индикатора будет просто катастрофическим. Для управления N разрядами требуется 8*N управляющих линий и 1 общий провод. В случае 5 разрядов, количество управляющих линий составит 40, а в 10-разрядном индикаторе — уже 80. А между тем свободных 80 выходов может просто не быть даже у микроконтроллера в 100-выводном корпусе (с учётом выводов питания, отладки, подключения кварцевых резонаторов и реализации важных альтернативных функций). А в 100-выводных корпусах выпускаются далеко не самые дешёвые микроконтроллеры.
К счастью, динамическая индикация позволяет решить проблему, во много раз сократив требуемое для подключения количество выводов. Идея динамической индикации состоит в том, что информация отображается не во всех разрядах индикатора сразу, а поочерёдно, в каждый момент времени только в одном разряде. В связи с тем, что зрение инерционно, необязательно чтобы все элементы изображения светились непрерывно и одновременно. Если с достаточно высокой частотой последовательно переключаться от отображения одного разряда к следующему, а при достижении последнего разряда индикатора, снова переходить к отображению первого и т.д., то глазом это будет восприниматься так, как если бы каждый разряд отображал информацию статично. Этот метод похож на использовавшийся в кинескопах способ формирования изображения с помощью развёртки.
Так как требуется, чтобы в каждый момент времени работал только один разряд индикатора, то количество выводов можно существенно уменьшить: выводы одноимённых сегментов всех разрядов соединяются вместе, образуя общую шину для управления сегментами. Включение нужного разряда производится с помощью вывода общего анода (или катода, в зависимости от варианта исполнения индикатора) этого разряда.
Как правило, индикаторы, содержащие несколько разрядов, выпускаются именно в расчёте на динамическую индикацию, и все необходимые соединения выполнены внутри устройства. N-разрядный индикатор в этом случае имеет 8 выводов для управления сегментами и N выводов для управления включением разрядов (общий анод или катод разряда). Всего требуется 8+N выводов, что намного лучше, чем 8*N+1 при статической индикации.

Рис. %img:fyq
В индикаторах, разряды которых выполнены по схеме с общим катодом, сегменты зажигаются высоким уровнем на выводах управления сегментами, а разряд включается низким уровнем на соответствующем выводе.
Предположим, что на изображённом выше индикаторе мы хотим вывести цифру "1" в младшем разряде (зажечь сегменты b, c). Для этого на выводе 6 управления младшим разрядом 4 устанавливаем низкий уровень; на выводах 8, 9, 12 управления остальными разрядами устанавливаем высокий уровень; на выводах 4, 7 управления сегментами c и b устанавливаем высокий уровень, а на выводах управления остальными сегментами — низкий (выводы управления сегментами подключаем через токоограничительные резисторы). В результате только светодиоды B, C разряда 4 будут смещены в прямом направлении, через них будет течь ток и они будут светиться. Сегменты B и С остальных разрядов светиться не будут, так как и на их анодах, и катодах установлен высокий уровень, т.е. напряжение смещения отсутствует. Все сегменты разряда 4, кроме b и c не будут гореть, так как на анодах и катодах соответствующих светодиодов установлен низкий уровень, т.е. напряжение смещение и ток через них отсутствуют. Все остальные светодиоды — светодиоды сегментов a, d, e, f, g, dp разрядов 1..3 не будут светиться, так как они вообще смещены в обратном направлении (на катоде установлен высокий уровень, на аноде низкий).
Это очень важная особенность схемы с динамической индикацией — в определённые моменты времени на светодиоды индикаторов неизбежно подаётся обратное напряжение. Максимально допустимое обратное напряжение для светодиодов очень невелико, типичное значение — единицы вольт. Для приводимых здесь в качестве примера индикаторов FYQ-3641Ax/Bx, в соответствии с документацией, допускается обратное напряжение 5 В. Это означает, что напряжение на выходах схемы управления этим индикатором не должно превышать 5 В. В противном случае потребуются меры по преобразованию уровней сигналов. При подключении индикатора к микроконтроллерам с напряжением питания до 5 В проблем не возникает.

Рис. %img:fyq2
В индикаторах с разрядами по схеме с общим анодом, наоборот, сегменты зажигаются низким уровнем, а разряд включается высоким уровнем на выводе.
Как уже было сказано, динамическая индикация предполагает последовательное поразрядное отображение информации с большой частотой переключения. Для этого в цикле выполняются следующие действия.
- Гасятся все разряды индикатора — для предотвращения появления артефактов на выводимом изображении при смене состояния шины управления сегментами; если используется схема с общими катодами, для этого на общие катоды всех разрядов подаётся высокий уровень (лог. 1); в схеме с общими анодами, на аноды подаётся лог. 0.
- На шину управления сегментами выдаются сигналы для отображения символа в очередном разряде.
- Зажигается очередной разряд.
Либо можно погасить сегменты с помощью шины управления сегментами, переключиться на очередной разряд и выставить на шине сегментов индикатора сигналы для формирования символа. Возможны различные варианты, так что можно выбрать тот, который в данной ситуации проще реализовать.
Затем делается пауза, в течение которой происходит отображение информации на текущем разряде, после чего процесс повторяется. В результате происходит последовательное отображение от первого разряда до последнего, после чего вновь возвращаемся к первому и т.д.
Если разряды переключаются с частотой f, то время отображения одного разряда составит максимум 1/f. Максимум — потому что время горения разряда может быть и меньше периода переключения. Мы можем изменять время горения от 0 до 1/f, и тем самым регулировать яркость разряда за счёт эффекта от широтно-импульсной модуляции.
При количестве разрядов N, полное время регенерации изображения на индикаторе в целом составит N*1/f, соответственно частота регенерации F=1/T=f/N. Для того чтобы не было заметно мерцания изображения, частота регенерации F должна быть не менее 50 Гц, а лучше не менее 100 Гц.
Каждый разряд горит в течении не более чем 1/N от периода регенерации. При быстром переключении разрядов глаз не будет замечать мерцания, но воспринимать он будет усреднённую яркость. Усреднённая за период регенерации, она составит 1/N от величины в случае статической индикации при тех же токах через светодиоды. Поэтому силу тока во время импульсов при динамической индикации потребуется увеличивать по сравнению с силой тока при статической. Естественно, предназначенные для динамической индикации индикаторы рассчитаны на это — они имеют достаточно большой максимально допустимый импульсный ток, в несколько раз превышающий максимальный средний ток. Сложнее обстоит дело с управляющей индикатором схемой. Не каждый микроконтроллер сможет обеспечить достаточный ток для управления сегментами, и тем более не каждый сможет непосредственно управлять включением разрядов — ток через общий вывод разряда может превышать ток сегмента в 8 раз, если горят все элементы разряда. Но это не большая проблема — подключить индикатор к микроконтроллеру можно через микросхему-драйвер с мощными выходами или можно использовать ключи на транзисторах.
Вместо обычных повторителей или инверторов для подключения выводов управления разрядами индикатора может использоваться дешифратор n x N или демультиплексор. Помимо увеличения нагрузочной способности, это даёт возможность ещё уменьшить количество занятых управлением индикатором выводов микроконтроллера. На входы дешифратора подаётся двоичный код, и только на одном выходе, определяемом этим двоичным кодом, будет лог. 1, а на всех остальных будет лог. 0 (или, если выходы инверсные, то наоборот). Дешифратор с трёхбитовым входом имеет до 2**3=8 выходов и может использоваться до 8-разрядных индикаторов включительно, а с 4-битовым входом может переключать до 16 разрядов. Демультиплексор осуществляет коммутирование входного сигнала E на один из выходов, задаваемых адресными входами и полностью эквивалентен дешифратору при E=1, а при E=0 на всех выходах будет лог. 0 (или 1, если выходы инверсные).
В некоторых случаях, особенно если количество разрядов у индикатора небольшое, при подключении удаётся обойтись без дополнительных микросхем. Современные светодиоды имеют высокий КПД и обеспечивают достаточно высокую яркость при малых токах, в то время как при токах, близких к максимальным, яркость становится чрезмерно, некомфортно высокой. Имеет смысл экспериментально подобрать режим работы индикатора.
Например, FYQ-3641A8 (четырёхразрядный, красный цвет свечения) обеспечивает хорошую видимость символов при токе в импульсе всего 2 мА на сегмент. Это позволяет использовать индикатор совместно с микроконтроллерами STM32F100xx непосредственно, без драйверов (максимальный ток вывода микроконтроллера составляет 25 мА, этого более чем достаточно даже для управления включением разрядов, так как максимальный ток общего вывода для разряда в данном случае не превышает 8*2 мА=16 мА).
Индикаторы с большим количеством разрядов (существенно большим, чем 8) используются реже, но следует иметь в виду существование второго варианта динамической индикации, который выгодно использовать для таких многоразрядных устройств. Можно осуществлять "развёртку" не по разрядам индикатора, а по сегментам. Это означает, что сначала зажигаются сегменты ‘A’ во всех разрядах, где они должны гореть. В следующий интервал времени зажигаются сегменты ‘B’ в нужных разрядах, и т.д. по всем 8 элементам. При таком способе соотношение между периодом отображения одного элемента и периодом полной регенерации индикатора всегда 1/8, независимо от "длины" индикатора. В этом случае ток одного разряда будет либо нулевым, либо равным току одного элемента I0. Ток в линиях управления сегментами может достигать N*I0, где N — количество разрядов, I0 — ток одного сегмента; максимальной величины ток достигает, когда один и тот же сегмент горит во всех разрядах.
Пример программы
В качестве примера здесь будет приведена программа, выводящая информацию на 4-разрядный семисегментный индикатор FYQ-3641A (имеет общий катод). Для управления индикатором используется микроконтроллер STM32F100RBT6B в составе оценочной платы STM32VLDISCOVERY.
Прежде несколько слов о подключении индикатора. Во-первых, подключение выполнено без использования драйверов, так как используемый микроконтроллер может обеспечить достаточный ток для нормальной работы индикатора. Используется режим работы с током не более 2 мА на один сегмент, так что общий ток разряда не превышает 16 мА, в то время как максимально допустимый ток выхода для микроконтроллера составляет 25 мА.
Для предельного упрощения программы было бы удобно подключить индикатор к микроконтроллеру так, чтобы и линии управления сегментами, и линии управления разрядами индикатора образовывали непрерывные диапазоны битов в пределах своего порта ввода-вывода. Например, можно было бы подключить линии управления сегментами A, B, . G, DP к выводам PC0, PC1, . PC6, PC7, а линии DIG1, DIG2, DIG3, DIG4 для управления разрядами, допустим, к PA0, PA1, PA2, PA3. Тогда код управления индикатором получается действительно очень простым:
Однако, в действительности такой вариант обычно неприемлем по нескольким причинам. В реальном устройстве управление индикатором — не единственная задача микроконтроллера и многие выводы будут задействованы для реализации других функций. Это интерфейсы, устройства ADC, DAC, входы/выходы таймеров и др. Эти функции привязаны к конкретным выводам микроконтроллера как альтернативные функции или перемещаемы между выводами, но крайне ограниченно и если они используются, привязанные к этим выводам разряды порта ввода-вывода общего назначения оказываются недоступными. Поэтому маловероятно, что удастся выделить непрерывный диапазон битов под индикатор или даже биты в пределах одного порта.
Кроме того, немаловажен такой вопрос, как разводка печатной платы. Если выбирают между простотой разводки и простотой программы, то практически всегда делается выбор в пользу простой разводки. А простая разводка обычно требует подключения к выходам портов "вразнобой". Здесь можно посмотреть иллюстрирующий это пример.
Здесь индикатор будет подключён в соответствии с приведённой ниже схемой. Резисторы в цепях управления разрядами R9..R12 используются только для защиты выводов микроконтроллера от перегрузки (в случае ошибочного подключения, короткого замыкания и т.д.) в макетируемом устройстве. В реальном устройстве их быть не должно (подключение должно быть непосредственным), так как они вызывают изменение яркости свечения при изменении количества включённых сегментов в разряде. При этом номиналы резисторов R1..R8 следует увеличить до 820 Ом.

Рис. %img:dc
Далее приведён код для общего случая. Определяя конфигурирующие константы, можно адаптировать его к любому варианту подключения индикатора. Сразу следует отметить, что этот пример далёк от оптимальности, как по эффективности кода, так и по размеру кода. Такова плата за универсальность. С другой стороны, быстродействие микроконтроллеров велико и регенерация изображения на индикаторе не требует слишком много процессорного времени. А в случае крайней необходимости, можно оптимизировать код с учётом конкретной конфигурации.
Семисегментный индикатор с i2c
Здесь описан контроллер четырёхразрядного семисегментного индикатора с управлением по i2c.
Описание
Обычно семисегментные индикаторы подключают напрямую к микроконтроллеру. При нехватке ног ставят всякие расширители, счётчики и проч. А если индикаторов несколько? Можно конечно поставить много расширителей, регистров..
Я решил пойти другим путём. Пусть маленькая тинька будет контроллером семисегментного индикатора, управляет яркостью и проч. А главному контроллеру надо будет только отправить число, которое надо отобразить. При наличии нескольких семисегментников в системе — это будет очень неплохой разгрузкой главного контроллера.
Ещё одно соображение — конструктивного плана. Очень легко вынести индикаторы на нужные места, при этом кабель связи будет содержать всего 4 провода — питание и i2c. Я уж не говорю об упрощении топологии печатной платы.
Общий вид
Мне было лень делать печатку, потому собрал в стиле «dead bug»:

Залил всё «китайскими соплями»:


Схема
Схема содержит тиньку 2313, семисегментник и разъём. У tiny2313 очень удачно совпадают ноги для программирования и i2c. Поэтому устройство подключается при помощи разъёма внутрисхемного программирования.
Как видно, осталось свободными 2 ноги, так что можно сделать 6 разрядов. Если использовать ещё и ногу MISO, то 7. А если и RESET — то дотянем до восьми. Но не уверен, что хватит яркости, мультиплексирование-то — посегментное.
Управление
Пока есть 2 команды:
Первая команда имеет один параметр размером в байт и служит для задания яркости. Значение параметра может быть 0 — 7. Чем больше, тем ярче.
Вторая команда имеет один параметр размером в слово и служит для задания отображаемого значения. Значение параметра может быть 0 — 9999. Старший байт слова передаётся первым.
Надо бы сделать ещё команду для отображения десятичной точки. Потом сделаю. Ну и, наверное, желательна команда для записи произвольных значений всех сегментов. Тоже после.
Программа
Программа использует посегментное мультиплексирование. Это позволило обойтись безо всяких транзисторов-резисторов. Плюс к тому, можно использовать семисегментники как с общим анодом, так и с общим катодом. Потребуется только небольшая корректировка программы.
Процедуры для работы с i2c я взял из атмелевской аппноты AVR312. Адрес i2c задан в прошивке жёстко (0x10). Для смены адреса надо перекомпилировать. Можно подумать над программным заданием адреса, но мне кажется, что это лишнее.
Семисегментный светодиодный индикатор
Семисегментный светодиодный индикатор — устройство отображения цифровой информации. Это — наиболее простая реализация индикатора, который может отображать арабские цифры. Для отображения букв используются более сложные многосегментные и матричные индикаторы.

Семисегментный светодиодный индикатор , как говорит его название, состоит из семи элементов индикации (сегментов), включающихся и выключающихся по отдельности. Включая их в разных комбинациях, из них можно составить упрощённые изображения арабских цифр.
Сегменты обозначаются буквами от A до G; восьмой сегмент — десятичная точка (decimal point, DP), предназначенная для отображения дробных чисел.
Изредка на семисегментном индикаторе отображают буквы.


Семисегментные светодиодные индикаторы бывают разных цветов, обычно это белый, красный, зеленый, желтый и голубой цвета. Кроме того, они могут быть разных размеров.
Также, светодиодный индикатор может быть одноразрядным (как на рисунке выше) и многоразрядным. В основном в практике используются одно-, двух-, трех- и четырехразрядные светодиодные индикаторы:

Кроме десяти цифр, семисегментные индикаторы способны отображать буквы. Но лишь немногие из букв имеют интуитивно понятное семисегментное представление.
В латинице : заглавные A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, строчные a, b, c, d, e, g, h, i, n, o, q, r, t, u.
В кириллице : А, Б, В, Г, г, Е, и, Н, О, о, П, п, Р, С, с, У, Ч, Ы (два разряда), Ь, Э/З.
Поэтому семисегментные индикаторы используют только для отображения простейших сообщений.
Всего семисегментный светодиодный индикатор может отобразить 128 символов:

В обычном светодиодном индикаторе девять выводов: один идёт к катодам всех сегментов, а остальные восемь — к аноду каждого из сегментов. Эта схема называется «схема с общим катодом», существуют также схемы с общим анодом (тогда все наоборот). Часто делают не один, а два общих вывода на разных концах цоколя — это упрощает разводку, не увеличивая габаритов. Есть еще, так называемые «универсальные», но я лично с такими не сталкивался. Кроме того существуют индикаторы со встроенным сдвиговым регистром, благодаря чему намного уменьшается количество задействованных выводов портов микроконтроллера, но они намного дороже и в практике применяются редко. А так как необъятное не объять, то такие индикаторы мы пока рассматривать не будем (а ведь есть еще индикаторы с гораздо большим количеством сегментов, матричные).
Многоразрядные светодиодные индикаторы часто работают по динамическому принципу: выводы одноимённых сегментов всех разрядов соединены вместе. Чтобы выводить информацию на такой индикатор, управляющая микросхема должна циклически подавать ток на общие выводы всех разрядов, в то время как на выводы сегментов ток подаётся в зависимости от того, зажжён ли данный сегмент в данном разряде.



Подключение одноразрядного семисегментного индикатора к микроконтроллеру
На схеме ниже, показано как подключается одноразрядный семисегментный индикатор к микроконтроллеру.
При этом следует учитывать, что если индикатор с ОБЩИМ КАТОДОМ, то его общий вывод подключается к «земле», а зажигание сегментов происходит подачей логической единицы на вывод порта.
Если индикатор с ОБЩИМ АНОДОМ, то на его общий провод подают «плюс» напряжения, а зажигание сегментов происходит переводом вывода порта в состояние логического нуля .

Осуществление индикации в одноразрядном светодиодном индикаторе осуществляется подачей на выводы порта микроконтроллера двоичного кода соответствующей цифры соответствующего логического уровня (для индикаторов с ОК — логические единицы, для индикаторов с ОА — логические нули).
Токоограничительные резисторы могут присутствовать в схеме, а могут и не присутствовать. Все зависит от напряжения питания, которое подается на индикатор и технических характеристик индикаторов. Если, к примеру, напряжение подаваемое на сегменты равно 5 вольтам, а они рассчитаны на рабочее напряжение 2 вольта, то токоограничительные резисторы ставить необходимо (чтобы ограничить ток через них для повышенного напряжении питания и не сжечь не только индикатор, но и порт микроконтроллера).
Рассчитать номинал токоограничительных резисторов очень легко, по формуле дедушки Ома.
К примеру, характеристики индикатора следующие (берем из даташита):
— рабочее напряжение — 2 вольта
— рабочий ток — 10 мА (=0,01 А)
— напряжение питания 5 вольт
Формула для расчета:
R= U/I (все значения в этой формуле должны быть в Омах, Вольтах и Амперах)
R= (напряжение питания — рабочее напряжение)/рабочий ток
R= (5-2)/0.01 = 300 Ом
Подключение многоразрядного семисегментного индикатора к микроконтроллеру
Схема подключения многоразрядного семисегментного светодиодного индикатора в основном та-же, что и при подключении одноразрядного индикатора. Единственное, добавляются управляющие транзисторы в катодах (анодах) индикаторов:

На схеме не показано, но между базами транзисторов и выводами порта микроконтроллера необходимо включать резисторы, сопротивление которых зависит от типа транзистора (номиналы резисторов рассчитываются, но можно и попробовать применить резисторы номиналом 5-10 кОм).
Осуществление индикации разрядами осуществляется динамическим путем:
— выставляется двоичный код соответствующей цифры на выходах порта РВ для 1 разряда, затем подается логический уровень на управляющий транзистор первого разряда
— выставляется двоичный код соответствующей цифры на выходах порта РВ для 2 разряда, затем подается логический уровень на управляющий транзистор второго разряда
— выставляется двоичный код соответствующей цифры на выходах порта РВ для 3 разряда, затем подается логический уровень на управляющий транзистор третьего разряда
— итак по кругу
При этом надо учитывать:
— для индикаторов с ОК применяется управляющий транзистор структуры NPN (управляется логической единицей)
— для индикатора с ОА — транзистор структуры PNP (управляется логическим нулем)
При низковольтном питании микроконтроллера и маломощных светодиодных индикаторах, в принципе, можно отказаться от использования в схеме и токоограничительных резисторов, и управляющих транзисторах — подключать выводы индикатора непосредственно к выводам портов микроконтроллера, так как при динамической индикации ток потребления сегментами уменьшается. При этом следует учитывать, что разряды при применении индикаторов с ОК управляются логическим нулем, а индикаторы с ОА — логической единицей.
