Несмотря на широкое распространение графических индикаторов, в некоторых случаях для отображения информации используются устройства, состоящие из семи сегментов. Его возможностей достаточно для отображения всех арабских цифр от 0 до 9 и некоторых букв на латинице и кириллице.
Общие сведения и принцип работы
Семисегментные индикаторы появились давно. Они выполнялись на основе ЖК-сегментов, на базе вакуумно-люминесцентных элементов, но это, большей частью, уже в прошлом. На текущий момент в качестве подобных устройств индикации в подавляющем большинстве случаев используются светодиодные элементы.
Каждый сегмент такого индикатора представляет собой светодиод с линзой в виде продолговатого столбика (горизонтального или вертикального). Зажигая часть LED, можно формировать требуемые символы.
Возможности формирования букв у подобных индикаторов ограничены, но в некоторых случаях этого вполне достаточно.
Каждый светящийся участок имеет стандартное обозначение буквой латинского алфавита. Часть индикаторов содержит восьмой сегмент – децимальную точку (decimal point, dp). С ее помощью можно отделять мантиссы от порядков чисел или осуществлять дополнительную индикацию (например, миганием и т.п.)
Основные типы индикаторов
В первую очередь индикаторы можно разделить на две основные категории:
- С общим катодом.
- С общим анодом.
Они не отличаются потребительскими свойствами, просто в некоторых случаях удобнее применять один вид устройств, в других – другой. Различаются они полярностью подключения светодиодов. В первом случае у LED объединены катоды, а аноды выведены для управления. Во втором – аноды соединены, а управляющие сигналы подаются на катоды.
У схем с общим анодом на объединенную точку подается положительное напряжение питания, а для того, чтобы зажечь сегмент, он должен быть соединен с нулем. В схемах с общим катодом общая точка соединяется с шиной с нулевым потенциалом, а для зажигания на анод надо подать положительный уровень.
Специальность: Проектирование и монтаж изделий электротехники.
Индикаторы отличаются и по другим характеристикам:
- размер знакоместа;
- цвет свечения (самые распространенные – красный, синий, зеленый, но могут быть и другие цвета);
- потребляемый ток;
- количество разрядов в одном корпусе.
При подборе аналогов надо обращать внимание на все.
Распиновка, схема подключения
Стандарта распиновки для семисегментных индикаторов в общем случае нет. У разных индикаторов назначение и расположение выводов может различаться даже в пределах одной модели (например, АЛС324А и АЛС324Б).
Для удобства подключения и разводки печатной платы у индикаторов может быть больше одного пина с одинаковым функциональным назначением.
Если индикатор содержит больше одного-двух разрядов, его распиновка может быть выполнена только для использования с динамической формой индикации (о ней ниже). Это значит, что сегменты в каждом разряде с одинаковым назначением соединены между собой внутри устройства и выведены на один пин. А выводы общих точек каждого разряда (общие катоды и аноды) имеют отдельную ножку.
Программирование
Перед тем, как перейти непосредственно к программному управлению, надо знать, что управлять семисегментными устройствами индикации можно двумя способами:
- статическим;
- динамическим.
В первом случае в каждый момент времени зажигаются все необходимые сегменты подачей логических нулей или единиц на соответствующие пины индикатора. Этот способ прост, но он требует большого количества выводов управляющей схемы. Для одного разряда их потребуется 7 (плюс точка), а для четырех разрядов уже 28 (или даже 32). Даже если у контроллера, управляющего индикацией, есть такое количество свободных портов, печатная плата будет представлять собой большое количество пересекающихся проводников (или проводов при навесном монтаже).
Для большого количества разрядов лучше применить динамическую индикацию. При таком подходе соединяются одноименные сегменты каждого разряда, а сигнал на общую точку подается только для тех разрядов, в которых этот сегмент задействован. Затем подсвечивается следующий сегмент в требуемых разрядах и т.п. В каждый момент времени горит только один сегмент, но за счет инерции зрения (управление происходит с большой частотой) кажется, что индицируется нужный символ.
Многие семисегментные светодиодные индикаторы можно подключать непосредственно к выводам микроконтроллера или портам Ардуино. Они рассчитаны на небольшой ток, поэтому сначала лучше свериться с даташитом на индикатор.
В большинстве случаев понадобятся токоограничивающие резисторы. Они выбираются исходя из напряжения питания контроллера и максимально допустимого тока порта.
Если этот ток меньше тока зажигания светодиода, то напрямую подключить индикатор не получится, потребуются промежуточные ключи. Если планируется применить динамическую индикацию, то для коммутации общих катодов или общих анодов ключи понадобятся в любом случае.
Изучая подходы к программированию схем контроллер-индикатор, надо рассмотреть простейший вариант:
- индикатор подключен к Ардуино через резисторы;
- для управления каждым сегментом используется отдельный порт.
Используется индикатор с общим катодом, поэтому для зажигания сегмента требуется логическая единица на соответствующем выводе. Таким образом, чтобы зажечь цифру 1, потребуется подать 1 на выводы 3 и 5, на остальных выводах должны быть нули.
В примере рассмотрен условный индикатор. Распиновку для конкретной модели надо смотреть в ее Datasheet.
Теперь можно написать программу.
При выполнении этой программы на индикатор будут последовательно выводиться цифры от 0 до 9. Очевидно, что этот способ неудобен, так как потребуется слишком много выводов даже для одного разряда. Упрощает монтаж использование сдвиговых регистров, например 74HC595. Работу микросхемы можно подробно изучить в даташите, а для примера важно знать, что этот регистр позволяет преобразовать последовательный код в параллельный. Для вывода последовательного кода надо всего два вывода контроллера (плюс один вывод для синхронизации регистра хранения).
Программа на языке С++ будет выглядеть следующим образом. Она перебирает индикацию цифр от 0 до 9.
Например, чтобы получить цифру 1, надо зажечь сегменты с и b. Для этого надо отправить в микросхему 74HC595 код 00000110, который в шестнадцатеричном формате выглядит, как 0x06. Для остальных цифр коды приведены в таблице.
Сдвиговые регистры можно соединять последовательно, тем самым наращивая разрядность схемы. При этом для управления потребуются те же три порта контроллера.
Чтобы разобрать пример динамической индикации, надо собрать схему, указанную на рисунке и подключить ее к плате Arduino.
Текст скетча будет выглядеть так. В массиве digits организовано хранение комбинаций сегментов для цифр от 0 до 9.
Разобравшись с этими базовыми примерами схем подключения семисегментного индикатора и основами управления в различных режимах, можно развивать навыки, усовершенствуя аппаратную часть и программное обеспечение. Отработав навыки, можно переходить к более сложным графическим индикаторам для вывода информации.
Явно с PIC овских форумов взято, но есть одно но…
Если вы будете перебирать 7 сегментов поочередно, выбирая при этом на каждом из 3х дисплеев горит там этот сегмент или нет, то будет следующее:
1. Каждый из сегментов объективно сможет гореть не дольше, чем их количество. Ведь каждый должен гореть в разное время (в случае семи — от яркости сегмента останется 14% = 1/7) с т.з. яркости нужно всегда обходить меньшую сторону матрицы:
— так если перебирать поиндикаторно, яркость будет 33% = 1/3
— данные проценты для обоих способов теоретический безопасный максимум
— на практике в принципе при известной скважности можно завысить напряжение (пробой у диода по большей части тепловой, а значит присутствует значительная термическая инерция) Так если вы перебираете с частотами 1Khz+ при питании 3х вольтового диода от 5в и вас останется 24% яркости при вашей схеме и 56% с перебором поиндикаторно.
— однако при завышениях, если ваш код зависнет диоды быстро сгорят! (так что яркость в этом методе надо экономить максимально)
— можно относительно безопасто немного поднять яркость, если после токоограничиающего резистра на питании зашунтировать диоды на массу конденсатором в обход матриц — это создаст условия при которых сегменты будут делить 1/3 только если будут все включены на «888» — в ином случае яркость будет делиться упрощенно говоря (но это уже нельзя сочетать с завышением)
2. При посегментном переборе вам придется делать преобразующий обход данных код, вместо того, что бы просто выводить байт-символ в порт (на ардуине он как раз 8 пинов для 8 сегментного индикатора) вам прийдется выбирать на 3 пина дисплеев по биту из 3х байт-символов на них в данный момент выводящихся.
P.S. а вообще все это очень весело что бы размяться с кодом… ну и что бы теор часть знать, однако сейчас гораздо актуальнее взять TM1638 воткнуть 8х10матрицу например это может быть 8х 8-ми сегментных индикаторов + еще 2х8 группа кнопок для управления
P.S. защита от копипасты мешает обычным юзерям редактировать текст (а тем кто собрался передрать такую инфо очевидно нет потому что есть F12)