Содержание
Немножко теории
Наверное нет необходимости рассказывать, что такое 7-сегментные индикаторы. Как сложно и представить область техники, где они не применяются. Соответственно по их подключению написано масса статей, но попробую все таки написать свою :)
Итак: что же такое 7-сегментный индикатор?
Обратимся к Википедии: "Семисегме́нтный индика́тор — устройство отображения цифровой информации. Это — наиболее простая реализация индикатора, который может отображать арабские цифры.
Семисегментный индикатор, как говорит его название, состоит из семи элементов индикации (сегментов), включающихся и выключающихся по отдельности. Включая их в разных комбинациях, из них можно составить упрощённые изображения арабских цифр. Часто семисегментные индикаторы делают в курсивном начертании."
В чем же "бяка" данной схемы? А в том, что для вывода например трехразрядного числа нужно задействовать 11 ножек микроконтроллера, причем 7 из них, чтобы не раздувать программу, должны относится к одному порту.
Все это хорошо, но, например, у Attiny2313 такой только порт В на котором "висят" и оба входа аналогового компаратора.
И вот тут на помощь приходят специальные драйверы.
Чаще всего применяют драйвера MAX7219 и MAX7221, управляемые по SPI. Материал по работе с этими драйверами разместил недавно serdgos тут — www.drive2.ru/c/2812487/. Поэтому повторятся не буду — желающие могут почитать. Данные драйвера позволяют уменьшить количество задействованных выводом, но опять же требуют использования дополнительной библиотеки и "привязаны" к строго определенным ножкам микроконтроллера. А есть ли более "хардкорные" решения? Оказывается есть — драйвер CD4026.
Описание Драйвера
Чип CD4026 предназначен для управления 7-сегментными индикаторами и представляет собой счётчик до десятка с встроенным сдвиговым регистром.
Счётчик увеличивается на единицу всякий раз, когда контакт «clock» становится HIGH (на восходящем фронте). Выходы a-g становятся HIGH в соответствии со значением счётчика, и отражают его значение арабской цифрой при подключении 7-сегментного индикатора с общим катодом.
Подключение
С этим все просто: смотрим даташит на индикатор. Я использовал 3х- разрядный, но принципиально разницы с четырехразрядным нет, — для подключения четвертого разряда нужно будет еще задействовать вывод 6 индикатора (сейчас он "пустой").
В качестве источника сигнала выступал Arduino Pro Micro c задействованными выводами
Pin2 Выход на счетчик
Pin3 Сброс счетчика
Pin4 Подключение разряда 1
Pin6 Подключение разряда 2
Pin9 Подключение разряда 3
Точку не подключал, ибо сейчас ненужно, а принцип подключения тот же.
Программа
Так как задействовано Arduino. то и язык соответствующий — модифицированный С.
Прога секундомера, считающего секунды с момента включения, "накидана по быстрячку" чтобы проверить работоспособность, поэтому слегка корява — уж извините.
#define CLOCK_PIN 2
#define RESET_PIN 3
#define DIGIT_1PIN 4
#define DIGIT_2PIN 6
#define DIGIT_3PIN 9
void resetNumber()
<
// Для сброса на мгновение ставим контакт
// reset в HIGH и возвращаем обратно в LOW
digitalWrite(RESET_PIN, HIGH);
digitalWrite(RESET_PIN, LOW);
digitalWrite(DIGIT_1PIN, HIGH);
digitalWrite(DIGIT_2PIN, HIGH);
digitalWrite(DIGIT_3PIN, HIGH);
>
void showNumber(float t)
< int n;
// Первым делом обнуляем текущее значение
resetNumber();
// Выводим первый разряд
digitalWrite(DIGIT_1PIN, LOW);
n=int(t-int(t/10)*10);
// Далее быстро «прокликиваем» счётчик до нужного
// значения
while (n–) <
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
>
delay(2);
// Обнуляем счетчик
resetNumber();
// Выводим второй разряд
digitalWrite(DIGIT_2PIN, LOW);
n=int(t/10-int(t/100)*10);
// Далее быстро «прокликиваем» счётчик до нужного
// значения
while (n–) <
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
>
delay(2);
// Обнуляем счетчик
resetNumber();
// Выводим третий разряд
digitalWrite(DIGIT_3PIN, LOW);
n=int(t/100);
// Далее быстро «прокликиваем» счётчик до нужного
// значения
while (n–) <
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
>
delay(2);
>
void setup() <
pinMode(RESET_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);
pinMode(DIGIT_1PIN, OUTPUT);
pinMode(DIGIT_2PIN, OUTPUT);
pinMode(DIGIT_3PIN, OUTPUT);
// Обнуляем счётчик при старте, чтобы он не оказался
// в случайном состоянии
resetNumber();
>
Можно еще сократить количество выводов, задействовав сдвиговые регистры, но об этом мы поговорим отдельно :)
В этой статье мы поговорим о цифровой индикации.
Семисегментные светодиодные индикаторы предназначены для отображения арабских цифр от 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). И в других случаях на индикатор выводится сумма цифр, составляющих эту комбинацию. Приходим к выводу, что входы дешифратора расположены продуманно и имеют очень логичные комбинации.
Также вы можете посмотреть видео к этой статье.
Существуют такие параметры, для которых было бы удобнее выдавать объективную информацию, чем просто индикацию. Например, температура воздуха на улице или время на будильнике. Да, все это можно было бы сделать на светящихся лампочках или светодиодах. Один градус – один горящий светодиод или лампочка и тд. Но считать эти светлячки – ну уж нет! Но, как говорится, самые простые решения – самые надежные. Поэтому, долго не думая, разработчики взяли простые светодиодные полосы и расставили их в нужном порядке.
Как все начиналось
В начале двадцатого века с появлением электронных ламп появились первые газоразрядные индикаторы
С помощью таких индикаторов можно было вывести цифровую информацию в арабских цифрах. Раньше именно на таких лампах делали различную индикацию для приборов и других электронных устройств. В настоящее время газоразрядные элементы почти уже нигде не применяются. Но ретро – это всегда модно, поэтому, многие радиолюбители собирают для себя и своих близких прекрасные часы на газоразрядных индикаторах.
Минус газоразрядных ламп – кушают много электроэнергии. Про долговечность можно и поспорить. У нас в университете до сих пор в лабораторных кабинетах эксплуатируются частотомеры на газоразрядных индикаторах.
Семисегментные индикаторы
С появлением светодиодов ситуация кардинально изменилась в лучшую сторону. Светодиоды сами по себе потребляют маленький ток. Если расставить их в нужном положении, то можно высвечивать абсолютно любую информацию. Для того, чтобы высветить все арабские цифры, достаточно всего семь светящихся светодиодных полос – сегментов, выставленных определенным образом:
Почти ко всем таким семисегментным индикаторам добавляют также и восьмой сегмент – точку, для того, чтобы можно было показать целое и дробное значение какого-либо параметра
По идее у нас получается восьми сегментный индикатор, но по-старинке его также называют семисегментным.
Что получается в итоге? Каждая полоска на семисегментном индикаторе засвечивается светодиодом или группой светодиодов. В результате, засветив определенные сегменты, мы можем вывести цифру от 0 и до 9, а также буквы и символы.
Виды и обозначение на схеме
Существуют одноразрядные, двухразрядные, трехразрядные и четырехразрядные семисегментные индикаторы. Более четырех разрядов я не встречал.
На схемах семисегментный индикатор выглядит примерно вот так:
В действительности же, помимо основных выводов, каждый семисегментный индикатор также имеет общий вывод с общим анодом (ОА) или общим катодом (ОК)
Внутренняя схема семисегментного индикатора с общим анодом будет выглядеть вот так:
а с общим катодом вот так:
Если семисегментный индикатор у нас с общим анодом (ОА), то в схеме мы должны на этот вывод подавать “плюс” питания, а если с общим катодом (ОК) – то “минус” или землю.
Как проверить семисегментный индикатор
У нас имеются в наличии вот такие индикаторы:
Для того, чтобы проверить современный семисегментный индикатор, нам достаточно мультиметра с функцией прозвонки диодов. Для начала ищем общий вывод – это может быть или ОА или ОК. Здесь только методом тыка. Ну а далее проверяем работоспособность остальных сегментов индикатора по схемам выше.
Как вы видите ниже на фото, у нас загорелся проверяемый сегмент. Таким же образом проверяем и другие сегменты. Если все сегменты горят, то такой индикатор целый и его можно использовать в своих разработках.
Иногда напряжения на мультиметре не хватает для проверки сегмента. Поэтому, берем блок питания, и выставляем на нем 5 Вольт. Чтобы ограничить ток через сегмент, проверяем через резистор на 1-2 Килоома.
Таким же образом проверяем индикатор от китайского приемника
В схемах семисегментные индикаторы соединяются с резисторами на каждом выводе
В нашем современном мире семисегментные индикаторы заменяются жидко-кристаллическими индикаторами, которые могут высвечивать абсолютно любую информацию
но для того, чтобы их использовать, нужны определенные навыки в схемотехнике таких устройств. Поэтому, семисегментные индикаторы до сих пор находят применение, благодаря дешевизне и простоте использования.