Что понимают под понятием семисегментный код

от admin

Тема 2. Шифраторы и дешифраторы, элементы цифровой индикации

Цель работы: изучение схемотехники и работы семисегментных индикаторов, шифраторов, дешифраторов, а также их применения в цифровых и микропроцессорных устройствах.

Любая микропроцессорная система реализует пять основных этапов преобразования информации: ввод исходной информации, обработка (выполнение логических, арифметических и других операций), управление процессом обработки, хранение и вывод результатов.

В простейшей цифровой системе, представленной на рисунке 2.1, функцию ввода информации выполняет кнопочная клавиатура, с помощью которой осуществляется ввод численной или символьной информации (цифр, букв и других символов).

Для формирования двоичного кода, вводимого в однокристальную микроЭВМ (ОЭВМ) при нажатии соответствующей клавиши на клавиатуре, применяется цифровое устройство, называемое шифратором (Ш). Обработка и управление процессом обработки информации осуществляется микропроцессором (МП), входящим в состав микроЭВМ. Хранение исходных данных, промежуточных и конечных результатов, а также программ, по которым происходит обработка информации, осуществляется запоминающим устройством (ЗУ), входящим также в состав ОЭВМ. Вывод информации осуществляется на семисегментный светодиодный индикатор.

Отображение соответствующего символа (цифры или буквы) на семисегментном индикаторе осуществляется при подаче на его входы семиразрядного управляющего двоичного кода, который формируется цифровым устройством, называемым дешифратором (Д). Дешифратор выполняет преобразование двоичной информации на выходе ОЭВМ в специальный двоичный код семисегментного индикатора, соответствующий отображаемому символу.

Семисегментный индикатор – представляет собой светодиодную матрицу, состоящую из семи светодиодов с общим анодом или катодом в одном корпусе. На рисунке 2.2 показан внешний вид и схемы подключения светодиодного индикатора АЛС320. Различные комбинации светящихся сегментов, обеспечиваемые внешней коммутацией, позволяют воспроизвести цифры от 0 до 9 и некоторые символы. В 8-сегментных индикаторах (АЛС321) восьмой сегмент отображает десятичную точку.

Шифратор (кодер) – это комбинационное логическое устройство, вырабатывающее на выходах параллельный двоичный код при подаче сигнала только на один какой-либо его вход. Такое кодирующее устройство применяется для преобразования символов определенного кода в n-разрядный двоичный код. Число информационных входов шифратора равно числу преобразуемых символов (клавиш клавиатуры) и удовлетворяет условию , где n – число информационных выходов. Разрядность шифратора соответствует разрядности выходного двоичного кода. 4-х разрядный шифратор позволяет получить шестнадцать (24=16) вариантов в ыходного двоичного кода, достаточных для преобразования шестнадцатеричных цифр от 0 до F.

Дешифратор (декодер) – это комбинационное логическое устройство, которое при появлении на входах параллельного двоичного кода вырабатывает выходной сигнал на одном из выходов. Как правило, номер выхода, на котором появляется выходной сигнал, соответствует определенному входному двоичному коду. Такое декодирующее устройство применяется для распознавания входных двоичных кодов и преобразования двоичного кода в другие виды кодов, например, в семисегментный код для управления семисегментными индикаторами. Число входов дешифратора равно числу разрядов входного двоичного кода, а число выходов определяется выражением , где n – число информационных входов. Полный двоичный дешифратор имеет 2n выходов. Разрядность дешифратора определяется разрядностью входного кода. Так полный 4-разрядный дешифратор имеет четыре входа и шестнадцать выходов.

В настоящей работе рассматривается схемотехника подключения семисегментных индикаторов и управление процессами ввода и отображения информации. Исследование работы конкретных схем выполняется на ПЭВМ с использованием моделирующей программы Electronics Workbench (EWB).

Предварительное задание к эксперименту.

Изучив работу светодиодного индикатора, дешифратора-формирователя семисегментного кода и шифратора, определите для цифры, соответствующей Вашему номеру варианта, двоичный и семисегментный коды. Результаты запишите в соответствующие графы таблицы 2.1.

Управление семисегментным индикатором

В этой статье мы поговорим о цифровой индикации.
Семисегментные светодиодные индикаторы предназначены для отображения арабских цифр от 0 до 9 (рис.1).


Рис.1.

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


Рис.2.

Индикатор называется семисегментным из-за того, что отображаемый символ строится из отдельных семи сегментов. Внутри корпуса такого индикатора находятся светодиоды, каждый из которых засвечивает свой сегмент.
Буквы и другие символы на таких индикаторах отображать проблематично, поэтому для этих целей используются 16-сегментные индикаторы.

Светодиодные индикаторы бывают двух типов.
В первом из них все катоды, т.е. отрицательные выводы всех светодиодов, объединены вместе и для них выделен соответствующий вывод на корпусе.
Остальные выводы индикатора соединены к аноду каждого из светодиодов (рис.3, а). Такая схема называется «схема с общим катодом».
Также существуют индикаторы, у которых светодиоды каждого из сегментов подключены по схеме с общим анодом (рис.3, б).


Рис.3.

Каждый сегмент обозначен соответствующей буквой. На рисунке 4 представлено их расположение.

Рис.4.

В качестве примера рассмотрим двухразрядный семисегментный индикатор GND-5622As-21 красного свечения. Кстати существуют и другие цвета, в зависимости от модели.
С помощью трехвольтовой батарейки можно включать сегменты, а если объединить группу выводов в кучку и подать на них питание, то можно даже отображать цифры. Но такой метод является неудобным, поэтому для управления семисегментными индикаторами используют регистры сдвига и дешифраторы. Также, нередко, выводы индикатора подключаются напрямую к выходам микроконтроллера, но лишь в том случае когда используются индикаторы с низким потреблением тока. На рисунке 5 представлен фрагмент схемы с использованием PIC16F876A.


Рис.5.

Для управления семисегментным индикатором часто используется дешифратор К176ИД2.
Эта микросхема способна преобразовать двоичный код, состоящий из нулей и единиц в десятичные цифры от 0 до 9.

Чтобы понять, как все это работает, нужно собрать простую схему (рис.6). Дешифратор К176ИД2 выполнен в корпусе DIP16. Он имеет 7 выходных вывода (выводы 9 — 15), каждый из которых предназначен для определенного сегмента. Управление точкой здесь не предусмотрено. Также микросхема имеет 4 входа (выводы 2 — 5) для подачи двоичного кода. На 16-й и 8-ой вывод подается плюс и минус питания соответственно. Остальные три вывода являются вспомогательными, о них я расскажу чуть позже.


Рис.6.

DD1 — К176ИД2
R1 — R4 ( 10 — 100 кОм)
HG1 — GND-5622As-21

В схеме присутствует 4 тумблера (можно любые кнопки), при нажатии на них на входы дешифратора подается логическая единица от плюса питания. Кстати питается сама микросхема напряжением от 3 до 15 Вольт. В данном примере вся схема питается от 9-вольтовой «кроны».

Также в схеме присутствует 4 резистора. Это, так называемые, подтягивающие резисторы. Они нужны, чтобы гарантировать на логическом входе низкий уровень, при отсутствии сигнала. Без них показания на индикаторе могут отображаться некорректно. Рекомендуется использовать одинаковые сопротивления от 10 кОм до 100 кОм.

На схеме выводы 2 и 7 индикатора HG1 не подключены. Если подключить к минусу питания вывод DP, то будет светиться децимальная точка. А если подать минус на вывод Dig.2, то будет светиться и вторая группа сегментов (будет показывать тот же символ).

Входы дешифратора устроены так, что для отображения на индикаторе чисел 1, 2, 4 и 8 требуется нажатие лишь одной кнопки (на макете установлены тумблеры, соответствующие входам D0, D1, D2 и D3). При отсутствии сигнала отображается цифра ноль. При подаче сигнала на вход D0 отображается цифра 1. И так далее. Для отображения других цифр требуется нажатие комбинации тумблеров. А какие именно нужно нажимать нам подскажет таблица 1.


Таблица 1.

Чтобы отобразить цифру «3» необходимо логическую единицу подать на вход D0 и D1. Если подать сигнал на D0 и D2, то отобразится цифра «5» (рис.6).


Рис.6.

Здесь представлена расширенная таблица, в которой мы видим не только ожидаемую цифру, но и те сегменты (a — g), которые составят эту цифру.


Таблица 2.

Вспомогательными являются 1, 6 и 7-ой выводы микросхемы (S, M, К соответственно).

На схеме (рис.6) 6-ой вывод «М» заземлен (на минус питания) и на выходе микросхемы присутствует положительное напряжение для работы с индикатором с общим катодом. Если используется индикатор с общим анодом, то на 6-ой вывод следует подать единицу.

Если на 7-ой вывод «К» подать логическую единицу, то знак индикатора гасится, ноль разрешает индикацию. В схеме данный вывод заземлен (на минус питания).

На первый вывод дешифратора подана логическая единица (плюс питания), что позволяет отображать преобразованный код на индикатор. Но если подать на данный вывод (S) логический ноль, то входы перестанут принимать сигнал, а на индикаторе застынет текущий отображаемый знак.

Стоит заметить одну интересную вещь: мы знаем, что тумблер D0 включает цифру «1», а тублер D1 цифру «2». Если нажать оба тумблера, то высветится цифра 3 (1+2=3). И в других случаях на индикатор выводится сумма цифр, составляющих эту комбинацию. Приходим к выводу, что входы дешифратора расположены продуманно и имеют очень логичные комбинации.

Также вы можете посмотреть видео к этой статье.

rafo Опубликована: 31.05.2015 0 4
Вознаградить Я собрал 0 4

Старый добрый семисегментный индикатор

image

В этой статье я хочу продолжить свой цикл о программировании Arduino для начинающих электронщиков. Мы познакомимся с подключением светодиодного семисегментного индикатора к микроконтроллеру через сдвиговый регистр, разберемся с особенностями его программной обработки. Также я продемонстрирую, как с помощью редактора электронных таблиц Excel можно генерировать семисегментные коды. И, как всегда, много внимание будет уделено деталям, которые часто воспринимаются понятными «по умолчанию», но на самом деле для новичка таковыми не являются. В конце, следуя «Arduino way», напишем простой класс для управления семисегментной индикацией.

Различные приборы и оборудование часто отображают информацию в цифровом виде. От типа индикации зависит скорость и точность ее восприятия наблюдателем.

Оптимальным с точки зрения скорости считывания данных являются стрелочные приборы. По положению стрелки относительно шкалы наблюдателю очень просто оценить диапазон или определить момент выхода за пределы допустимого диапазона отображаемых значений. Но добиться высокой точности считывания сложно.

image

Хорошей альтернативой стрелочным приборам являются цифровые индикаторы сегментного типа. Благодаря фиксированному положению сегментов очень просто отличать отображаемые на них значения, а также обеспечивается максимальная дистанция, с которой значение может быть надежно прочитано.

Наибольшее распространение получили светодиодные сегментные индикаторы. Это связано с конструктивной простотой таких индикаторов, их высокой яркостью, хорошей контрастностью и практически полным отсутствием инертности. Еще одним неоспоримым преимуществом таких индикаторов является широкий диапазон рабочих температур, начиная от экстремально низких.

image

И действительно, имея под рукой 3D-принтер, вы можете получить светодиодный сегментный индикатор практически любой конфигурации. Например, я использую онлайн кастомайзер на thingiverse. Он позволяет достаточно гибко и без лишних заморочек настраивать модель, которую потом останется всего лишь распечатать и немного доработать напильником.

image

❯ Подключение и управление

Конструктивно светодиодный семисегментный индикатор представляет собой корпус со светопрозрачными сегментами, под которыми расположены светодиоды. Светодиоды могут подсвечивать разную комбинацию сегментов.

Сегменты принято обозначать буквами от A до G, как показано на рисунке. Индикаторы могут оснащаться восьмым сегментом – десятичная точка (decimal point), обозначается как DP или H.

image

Как правило, светодиоды в таких индикаторах объединяют катодами или анодами. Получаются индикаторы с общим катодом (ОК) или общим анодом (ОА).

image

Рассмотрим индикатор с общим анодом. Для управления таким индикатором на его общем аноде необходимо обеспечить положительный потенциал. Чтобы получить требуемый символ, на определенную комбинацию катодов необходимо подать отрицательный потенциал. Остальные выводы можно оставить неподключенными.

image

Комбинацию состояний светодиодов для отображения требуемого символа на индикаторе удобно кодировать байтами, так как светодиодов в индикаторе 8 и битов в байте тоже 8. Способ кодирования зависит от схемы подключения индикатора.

Пускай индикатор будет подключен через сдвиговый регистр 74HC595. Как управлять сдвиговым регистром можно почитать в одной из моих прошлых статей. Так как индикатор состоит из светодиодов, необходимо ограничивать их рабочий ток. Самый простым способом является использование токоограничивающих резисторов. В этом кроется основное преимущество светодиодного индикатора перед другими, мы получаем очень просто драйвер, фактически это любая TTL-совместимая микросхема и горстка резисторов. Но тут же кроется и недостаток — большой потребляемый ток. Зато внешняя подсветка для индикатора тоже не нужна.

image

Резисторы обязательно включать последовательно с каждым сегментом индикатора. Использовать один общий резистор со стороны анода категорически нельзя! Сопротивление резисторов нужно подобрать так, чтобы обеспечивалась необходимая яркость сегментов, и рабочий ток не превышал предельного значения.

Для включения требуемого сегмента при условии, что общий анод подключен к плюсу питания, на вывод сдвигового регистра необходимо записать логический ноль. Это установит низкий электрический уровень. Между анодом и катодом светодиода в сегменте возникнет положительная разница потенциалов, светодиод начнет светиться.

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

Согласно выбранной схеме подключения сегментов индикатора к выходам регистров позиция битов в байт-коде может определяться как показано на рисунке.

image

Давайте попробуем составить семисегментный код для отображения цифры 0 на индикаторе. Для этого необходимо включить светодиоды сегментов A, B, C, D, E, F. Сегменты G и H должны быть выключены. Соответственно, на выводах сдвигового регистра Q0 – Q5 необходимо установить уровни логического нуля, а для выводов Q6 и Q7 – необходимо установить единицы.

image

Составим семисегментный код, который необходимо записать на выводы сдвигового регистра для отображения символа, обозначающего цифру 0.

image

Использовать семисегментные коды в двоичном формате не очень удобно. С помощью стандартного калькулятора Windows можно преобразовать полученную двоичную комбинацию в другие представления чисел. Для более точной интерпретации сегментного кода рекомендую представлять его в шестнадцатеричном формате.

image

Если откинуть точку, т.к. она не влияет на общий вид отображаемого символа, то семи-битный код дает нам 128 различных комбинаций символов для отображения на индикаторе. В зависимости от схемы подключения и выбранного типа кодирования, семисегментные коды для этих символов могут отличаться. Но их количество и внешний вид всегда будет конечным.

image

Но не все из возможных байт-кодов могут быть пригодны для отображения информации. Для индикации десятичных и шестнадцатеричных цифр могут быть использованы следующие коды

image

Также семисегментные индикаторы позволяют отображать ограниченное количество латинских букв, из которых можно составить слова, пригодные в работе некоторых приборов

image

❯ Excel для формирования семисегментных кодов

Наверняка на просторах интернета можно найти готовые программы для кодирования картинок в программный код на Си. Но я предлагаю проделать это самостоятельно с использованием редактора электронных таблиц Excel. Этот способ позволит получать коды не только для семисегментных индикаторов, но и для любых других.

Я считаю, что хорошая визуализация очень помогает в работе. Это позволяет сократить количество возможных ошибок. Поэтому ячейки таблицы я оформляю максимально похоже на семисегментный индикатор.

image

Для этого можно объединять соседние ячейки, менять их размеры, установить видимые границы и залить ячейки серым цветом. Все это можно сделать через команду меню: Главная / Формат / Формат ячеек.

image

image

Далее немного оживим изображение индикатора. Сделаю так, чтобы сегменты меняли цвет на красный при заполнении. Для этого с зажатой кнопкой «Ctrl» выделю все ячейки, которые представляют собой сегменты индикатора. На вкладке «Главная» необходимо выбрать меню: Условное форматирование / Правила выделения ячеек / Равно

image

В диалоговом окне «Равно» в поле для ввода введу единицу. В принципе, это может быть любой другой удобный для вас символ.

image

Работать это должно примерно так, как показано на картинке. Если в ячейку ввести единичку, она окрасится в красный. Не заполненные ячейки останутся серыми. Согласитесь, что вероятность перепутать включаемые сегменты так будет значительно ниже.

Теперь составим формулу, которая на основе изображения сформирует эквивалентный шестнадцатеричный код. Для удобства составлю таблицу, которая будет дублировать состояние сегментов. Сегмент H будет отвечать за точку, в семисегментных кодах пусть он будет постоянно выключен.

image

Напомню, что, согласно выбранной мной схемы подключения, сегмент А должен быть закодирован в нулевом разряде семисегментного кода. Причем, для включения сегмента в разряд нужно записать ноль.

image

Преобразование числа из двоичной системы счисления в десятичную буду производить следующим образом: каждый разряд числа умножу на вес соответствующего разряда. Чтобы определить вес разряда, нужно двойку возвести в степень его позиции в байте.

image

Далее, умножу вес бита на его двоичное значение, чтобы получить десятичное значение бита.

image

Далее суммирую значения всех разрядов, чтобы получить общий код в десятичном формате.

image

Преобразуем десятичный код в шестнадцатеричный.

image

В соседней ячейке получу значение в формате шестнадцатеричного числа для программы на Си.

image

Копипастим полученную табличку необходимое количество раз. Далее можно приступать к формированию семисегментных кодов.

image

Мой итоговый вариант выглядит вот так. Я перенес вычисления кодов на отдельную страницу. И в результате получаю готовую строку — инициализатор для программы на Си.

image

❯ Управление сдвиговым регистром 74HC595

Если вам известен принцип работы сдвигового регистра 74HC595, вы можете смело пропустить этот раздел и перейти к следующему, в котором будет рассмотрено непосредственно программирование.

image

Микросхема 74HC595 представляет собой последовательный синхронный сдвиговый регистр, который преобразует последовательный код, поступающий на вход SER, в параллельный код на выходах Q0 – Q7.

Синхронизация записи последовательного кода осуществляется подачей стробирующих импульсов на вход SCK. А вход RCK управляет обновлением выходов Q0-Q7. Это позволяет изменять состояние выходных сигналов Q0 – Q7 одновременно.

Обратите внимание, что бит последовательного кода, записываемый на вход регистра первым, оказался установлен на старшем выходе Q7.

image

Для экспериментов традиционно буду использовать Proteus. Схема эксперимента представлена на рисунке.

image

Первым делом с помощью директивы макроопределения в программе обозначу выводы микроконтроллера, к которым подключен сдвиговый регистр.

В функции «loop()» настрою эти выводы для работы на выход.

Для управления сдвиговым регистром перед функцией «loop()» объявим функцию «shift()«. Во входных параметрах функции будем передавать данные, для записи в регистр.

Для последовательной передачи данных в теле функции организуем цикл «for«. Счетчик «bitNum» в цикле будет определять номер бита переменной «data«, отправляемый на вход регистра. Передачу данных начнем со старшего бита, чтобы он оказался на выходе Q7.

Счетчик «bitNum» объявлен как целое без знака. Счет ведется в обратную сторону. При очередном вычитании из счетчика единицы, когда его значение было равным нулю, произойдет его переполнение. Новое значение счетчика станет равным 255. Это больше 8. Условие цикла не выполнятся, и цикл будет завершен.

Для записи бита на вход регистра в тело цикла поместим оператор проверки условия «if«. Он будет проверять состояние бита по номеру в переменной «bitNum«, и устанавливать соответствующее значение на входе регистра.

Немного сократим эту запись. Дело в том, что функция «digitalWrite()» уже содержит внутри проверку истинности своего второго входного параметра. Это позволяет обойтись без внешней проверки, а условие из нее сразу передать как входной параметр. Получается, на выводе микроконтроллера будет установлен низкий логический уровень, если в результате выполнения команды «data & (1<<bitNum)» получается ноль. При любом ненулевом результате, функция «digitalWrite()» запишет в порт логическую единицу.

После установки значения на входе данных регистра, в теле цикла необходимо сформировать один стробирующий импульс записи. А после 8-ми бит данных подадим одиночный импульс для переключения выходной защелки.

На этом наша функция завершена. Остается проверить ее работоспособность. Вызовем функцию «shift()» из функции «loop()«. В качестве входного параметра передадим семисегментный код семерки… на удачу.

❯ Вывод семисегментного кода

Для проверки результатов кодирования семисегментных кодов решим несложную задачку. Разработаем программу таймера на 10 секунд, который будет осуществлять прямой счет, как показано на рисунке.

image

Воспользуемся схемой из предыдущего раздела. Сдвиговый регистр подключен к выходам аппаратного модуля SPI, который осуществляет синхронную передачу данных и отлично подходит для этих целей. Как работает SPI на ARDUINO вы можете почитать по ссылке на официальном сайте.

Для работы с SPI интерфейсом в программе необходимо подключить встроенную библиотеку <SPI.h>.

Семисегментный код, который был сгенерирован в Excel, разместим в массиве так, чтобы его нулевой элемент содержал код нуля, а старший элемент — код девятки.

Сдвиговый регистр 74HC595 имеет быстродействие выше, чем тактовая частота микроконтроллера. Поэтому он будет работать при любых настройках скорости передачи данных по SPI, и ни каких особых настроек для SPI мы использовать не будем.

Фоновая программа будет содержать один цикл «for«, который с интервалом в одну секунду поочередно запишет в регистр очередной семисегментный код.

Этот программный код не имеет прикладного смысла. Единственная его задача заключалась в том, чтобы проверить правильность кодирования семисегментного кода. Не знаю, как у вас, но у меня все работает. Пишите о своих результатах в комментариях.

❯ Вывод десятичного числа

Семисегментные дисплеи используются для вывода десятичных чисел чаще всего. Давайте попробуем решить задачку, связанную с этим. Аналогично предыдущему примеру, выведем на семисегментный дисплей счетчик, но в этот раз пусть он считает до одной минуты.

Для решения поставленной задачи нам понадобится увеличить количество индикаторов в схеме. Второй индикатор также подключим через сдвиговый регистр. А регистры будут включены последовательно друг за другом.

image

Пускай верхний индикатор будет отображать десятки секунд, а нижний — единицы секунд.

После того, как схема модифицирована под условия новой задачи, можно приступать к программированию.

Сперва, изменим диапазон счета для цикла «for«, теперь он будет считать до 60 секунд.

Так как сдвиговые регистры включены последовательно, т.е. выход первого регистра подключен ко входу второго, первым делом нужно записывать единицы секунд, а за ними значение десятков.

Операция «i % 10» возвращает остаток от деления счетчика i на основание десятичной системы счисления, таким образом производится выделение младшего десятичного разряда. Для выделения десятков мы сперва выполняем сдвиг счетчика влево путем деления на основание системы счисления «i /10«, и затем выделяем десятки секунд из младшего разряда получением остатка от деления.

Для примера возьмём i=34. Тогда для «i%10» получится, что 10 помещается в 34 целиком 3 раза, в остатке остается 4. Затем выполним операцию «34/10«. При целочисленном делении получаем результат, аналогичный сдвигу вправо на один десятичный разряд. То есть тройка «переезжает» в разряд единиц, дробная часть откидывается. Операцию «34/10%10» целиком можно не выполнять, если вы гарантируете, что значение переменной никогда не будет иметь значимый разряд сотен.

Обратите внимание на то, как происходит преобразование десятичного числа в эквивалентный семисегментный код. Команда типа «segmCode[i % 10]» фактически производит табличную подстановку. Массив «segmCode» заполнен таким образом, что в его нулевом элементе размещен семисегментный код нуля, в первом — единицы, во втором — двойки, и так далее. Получается, что на сам индикатор мы выводим не десятичное число, а элемент массива перекодировки по индексу, который определяется этим десятичным числом.

❯ Немного унификации

Давайте немного доработаем наш код так, чтобы можно было отображать на индикаторе десятичные числа с необходимым количеством десятичных разрядов. Для этого эксперимента дополним схему, еще раз увеличив количество сдвиговых регистров и индикаторов.

image

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

Читать:
Как зарядить фонарь трофи та1

image

Условимся, что сдвиговый регистр «в хвосте» будет отображать единицы, т.е. младший десятичный разряд. Индикаторов в нашей схеме стало больше, и их количество фактически будет определять только здравый смысл.

Для вывода десятичного числа на индикаторы напишем функцию «decimalTo7segm()«.

Через входные параметры функция «decimalTo7segm()» получает непосредственно само десятичное число «uint32_t dec«. Входная переменная не обязательно должна быть 32-х разрядной, это будет зависеть от ваших потребностей. Если вам не нужно выводить слишком большие числа, ограничьте ее 16-ю или 8-ю разрядами, применив соответствующие типы данных. Количество доступных для отображения цифр индикаторов в функцию будет передавать входная переменная «numberOfDigits«. Ну а логика работы функции должна быть понятна из комментариев к коду.

Остается вызвать функцию «decimalTo7segm()» из «loop()«. Для удобства проверки работоспособности, передам значение 1234 и укажу количество индикаторов как 4.

❯ Улучшения в стиле «Arduino way»

Я лично не являюсь сторонником использования классов для программирования микроконтроллеров, и, наверное, когда-то посвящу этому отдельную статью. Но кого интересует оптимизация кода, если мы используем Arduino? Все-таки Arduino — это в первую очередь про удобство. Поэтому предлагаю оформить обработчик индикатора в виде отдельного класса.

Создадим класс «SevenSegmIndicator«. Этот класс должен будет описывать свойства и алгоритм работы семисегментного индикатора.

Наш класс будет иметь два свойства: «numberOfDigits» и массив «segmCode[]«. Переменная «numberOfDigits» будет использоваться для хранения в программе количества индикаторов, размещенных на схеме. По умолчанию этому полю будет присваиваться минимальное количество индикаторов, которое может обрабатывать наша программа, т.е. один. Массив «segmCode[]» хранит семисегментные коды. Массив заполним сразу.

С помощью спецификатора доступа «private» эти переменные будут скрыты от остального кода, доступ к ним возможен только для методов класса.

После спецификатора доступа «public» разместим методы нашего класса, которые будут реализовывать основную логику его работы. Эти методы будут доступны в остальной программе.

Метод «update()» фактически будет повторят написанную нами ранее функцию «decimalTo7segm()«.

Для инициализации будущих объектов класса добавим в него конструктор. Он будет производить инициализацию SPI интерфейса микроконтроллера, а также записывать количество индикаторов в схеме.

Объявление объекта класса будет производиться аналогично обычным переменным. Количество индикаторов передается в качестве инициализатора с помощью конструктора, который мы объявили ранее.

Теперь в функции «setup()» больше не останется кода, так как он теперь будет выполняться конструктором класса.

Нам осталось воспользоваться методом класса «updae()» для вывода на индикатор десятичного числа. Разместим его вызов в функции «loop()«.

❯ Послесловие

Задумайтесь только, сама идея семисегментного индикатора была запатентована более ста лет назад, а активно применяется он уже более половины века. Я уверен, что данный тип индикации будет иметь еще очень долгую жизнь, надеюсь, что после прочтения этой статьи, вы понимаете почему.

Что понимают под понятием семисегментный код

В настоящее время для отображения информации всё чаще используются графические дисплеи, однако, семисегментные индикаторы также не утратили своего значения. Если требуется лишь отображение чисел, то они могут стать более предпочтительным вариантом, т.к. просты в управлении и могут использоваться совместно с любым микроконтроллером с достаточным количеством выводов. Жидкокристаллические семисегментные индикаторы обладают сверхнизким энергопотреблением (например, в электронных часах, вместе со схемой управления работают от одной батарейки в течение нескольких лет).

На этой странице будем вести речь о светодиодных семисегментных индикаторах. Они имеют предельно простую конструкцию, дёшевы, надёжны. Обеспечивают высокую яркость и контрастность отображаемой информации. Существует большое разнообразие индикаторов: с разным цветом свечения сегментов, разного размера, отличающиеся схемой подключения светодиодов (с общим катодом или общим анодом). При необходимости отображения нескольких разрядов можно установить несколько одноразрядных индикаторов рядом на печатной плате либо выбрать нужный вариант многоразрядного индикатора.

Своё название семисегментные индикаторы получили в связи с тем, что изображение символа формируется с помощью семи отдельно управляемых (подсвечиваемых светодиодом) элементов — сегментов. Эти элементы позволяют отобразить любую цифру 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 0 1 1 1 1 1 1 0x3F
1 1 1 0 0 0 0 1 1 0 0x06
2 2 2 1 0 1 1 0 1 1 0x5B
3 3 3 1 0 0 1 1 1 1 0x4F
4 4 4 1 1 0 0 1 1 0 0x66
5 5 5 1 1 0 1 1 0 1 0x6D
6 6 6 1 1 1 1 1 0 1 0x7D
7 7 7 0 0(1) 0 0 1 1 1 0x07
(0x27)
8 8 8 1 1 1 1 1 1 1 0x7F
9 9 9 1 1 0 1 1 1 1 0x6F
10 A A 1 1 1 0 1 1 1 0x77
11 b b 1 1 1 1 1 0 0 0x7C
12 C C 0 1 1 1 0 0 1 0x39
13 d d 1 0 1 1 1 1 0 0x5E
14 E E 1 1 1 1 0 0 1 0x79
15 F F 1 1 1 0 0 0 1 0x71
16 <Пробел> space 0 0 0 0 0 0 0 0x00
17 - (minus) 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 при статической индикации.

Семисегментный четырёхразрядный индикатор FYQ-3641A

Рис. %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 В проблем не возникает.

Семисегментный четырёхразрядный индикатор FYQ-3641B

Рис. %img:fyq2

В индикаторах с разрядами по схеме с общим анодом, наоборот, сегменты зажигаются низким уровнем, а разряд включается высоким уровнем на выводе.

Как уже было сказано, динамическая индикация предполагает последовательное поразрядное отображение информации с большой частотой переключения. Для этого в цикле выполняются следующие действия.

  1. Гасятся все разряды индикатора — для предотвращения появления артефактов на выводимом изображении при смене состояния шины управления сегментами; если используется схема с общими катодами, для этого на общие катоды всех разрядов подаётся высокий уровень (лог. 1); в схеме с общими анодами, на аноды подаётся лог. 0.
  2. На шину управления сегментами выдаются сигналы для отображения символа в очередном разряде.
  3. Зажигается очередной разряд.

Либо можно погасить сегменты с помощью шины управления сегментами, переключиться на очередной разряд и выставить на шине сегментов индикатора сигналы для формирования символа. Возможны различные варианты, так что можно выбрать тот, который в данной ситуации проще реализовать.

Затем делается пауза, в течение которой происходит отображение информации на текущем разряде, после чего процесс повторяется. В результате происходит последовательное отображение от первого разряда до последнего, после чего вновь возвращаемся к первому и т.д.

Если разряды переключаются с частотой 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

Далее приведён код для общего случая. Определяя конфигурирующие константы, можно адаптировать его к любому варианту подключения индикатора. Сразу следует отметить, что этот пример далёк от оптимальности, как по эффективности кода, так и по размеру кода. Такова плата за универсальность. С другой стороны, быстродействие микроконтроллеров велико и регенерация изображения на индикаторе не требует слишком много процессорного времени. А в случае крайней необходимости, можно оптимизировать код с учётом конкретной конфигурации.

Похожие публикации