На этот раз, в статье будет рассмотрен один из интереснейших модулей, а именно - многоразрядный семисегментный индикатор на базе микросхемы MAX7219. Почему многоразрядный? Ответ прост - количество разрядов это и есть количество цифр, которое может отобразить модуль. Например, на фото ниже, показаны три вида многоразрядных индикаторов, слева направо - 4-х разрядный, 6-ти разрядный, 8-ми разрядный. Причем первый является 4-х разрядным индикатором часового типа. Отличие индикатора часового типа от обычного в том, что у него есть знак двоеточия, тогда как у обычного любого индикатора этот знак заменяется точкой внизу, рядом с цифрой.

В этой статье, рассматриваемые модули работают на базе микросхемы MAX7219 . Эта микросхема является драйвером для светодиодных семисегментных индикаторов, а также LED матриц 8х8, и мы не будем рассматривать принципиальные схемы подключения этого драйвера. Просто за основу взят готовый модуль, будут приведены примеры подключения к плате Arduino UNO и разобрана работа с функциями библиотеки LedControl . Кстати, как уже было сказано - LED матрицы 8х8 тоже работают на базе драйвера MAX7219 , и кому интересно то добро пожаловать в статьи:

Итак, начнем... Думаю что про многоразрядность было дано хорошее описание, а вот почему семисегментный? Ответ тоже не так уж и сложен - потому что для формирования символа или отображения цифры используется семь светодиодов, проиндексированных буквами A, B, C, D, E, F, G, таблица ниже показывает как это обозначено:

Как видно из таблицы, есть также и восьмой светодиод - DP. Полностью закодировать символ или цифру можно в 1 байте, устанавливая или сбрасывая определенный бит, как это показано с примером кодирования символа J. В примере установлены биты B, C, D, E , что позволяет отобразить заданный символ на семисегментном индикаторе.

От теории к практике - подключим 8-ми разрядный модуль к плате Arduino Uno по указанной ниже схеме:

Для отображения символов используется несколько функций из подключаемой библиотеки LedControl.h. Разберем каждую из этих функций по порядку, начнем с функции setDigit().

Прототип объявления функции для отображения числа и передаваемые функции аргументы:

setDigit(int addr, int digit, byte value, boolean dp);

Где -

i nt addr - адрес модуля на шине SPI 0 SPI начинается с нуля)

int digit - 0 , 7

byte value - значение(число от 0 до 9) которое нужно отобразить в разряде номер которого указан в параметре int digit

boolean dp - int digit . Если параметр равен true то точка отобразится, если false то точка не отобразится.

Прототип объявления функции для отображения символа и передаваемые функции аргументы:

setChar(int addr, int digit, char value, boolean dp);

i nt addr - адрес модуля на шине SPI для которого вызывается функция, если модуль один - то этот параметр равен 0 (по умолчанию адресация устройств на шине SPI начинается с нуля)

int digit - порядковый номер разряда в модуле индикации, по умолчанию для многоразрядных индикаторов нумерация разрядов начинается с крайнего правого разряда, соответственно номер крайнего правого разряда равен 0 , а номер крайнего левого разряда в нашем случае равен 7

char value - символ, который должен отобразиться в разряде номер которого задан параметром int digit

boolean dp - этот параметр отвечает за отображение точки у разряда номер которого указан в параметре int digit . Если параметр равен true то точка отобразится, если false то точка не отобразится.

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

  • 0 1 2 3 4 5 6 7 8 9 цифра отображается как символ
  • A a
  • B b
  • С с символ отобразится в нижнем регистре
  • D d символ отобразится в нижнем регистре
  • E e символ отобразится в верхнем регистре
  • F f символ отобразится в верхнем регистре
  • H h символ отобразится в нижнем регистре
  • L l символ отобразится в верхнем регистре
  • P p символ отобразится в верхнем регистре
  • - знак "минус"
  • . , отображение точки
  • _ символ подчеркивания
  • <Пробел> установить символ пробела

В тестовом скетче можно поставить задачу такого плана:

  1. Отобразить поочередно цифры от 1 до 8 без точки
  2. Заполнить цифрами от 1 до 8 все разряды модуля индикации, плюс отобразить все точки указаных разрядов
  3. Отрисовать поразрядно массив с заранее закодированными в двоичном коде символами, в результате должно получиться "Arduino rules!!!"

Из-за ограниченного набора символов функция setChar() не подходит для тестового скетча, так как она не сможет нормально отрисовать фразу указанную в пункте 3. Вместо этой функции мы будем использовать функцию setRow() . Итак... функция setRow() уже была нами испытана в в статьях про изучение Led матриц 8х8, давайте вновь опишем прототип вызова и параметры данной функции.

Прототип объявления функции setRow() и передаваемые функции аргументы:

setRow(int addr, int row, byte value);

i nt addr - адрес модуля на шине SPI для которого вызывается функция, если модуль один - то этот параметр равен 0 (по умолчанию адресация устройств на шине SPI начинается с нуля)

int row - порядковый номер разряда в модуле индикации, по умолчанию для многоразрядных индикаторов нумерация разрядов начинается с крайнего правого разряда, соответственно номер крайнего правого разряда равен 0 , а номер крайнего левого разряда в нашем случае равен 7

byte value - значение в двоичном формате(пример B00000000, также возможна альтернатива в десятичном и шестнадцатиричном), которым закодирован необходимый символ. Таблица кодирования символов поможет правильно закодировать нужный символ.

Ну и в завершение статьи тестовый скетч и видео, как это работает:

#include "LedControl.h" /* * Подключаем библиотеку LedControl.h * и создаём объект класса LedControl * при этом, 7-ми сегметный дисплей с драйвером MAX72xx * должен быть подключен к плате Arduino следующим образом: * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * Arduino -> Display Module MAX72xx * */ LedControl lc = LedControl(12, 11, 10, 1); //Массив с закодированными символами, //Фраза "Arduino ruLES!!!" byte ar = { B01110111, //A B00000101, //r B00111101, //d B00011100, //u B00010000, //i B00010101, //n B00011101, //o B00000101, //r B00011100, //u B00001100, //l B01001111, //E B01011011, //S B10110000, //! B10110000, //! B10110000 //! }; void setup() { //Устройство(7-ми сегментный дисплей) выводим из спящего режима lc.shutdown(0, false); //Установить яркость дисплея на 8 //Всего возможных режимов яркости от 0 до 15 lc.setIntensity(0,8); //Очистить дисплей lc.clearDisplay(0); } void loop() { //Простейший перебор чисел от 1 до 8 по разрядам for(int i = 0, j = 7; i < 8, j >= 0; i++, j--) { lc.setDigit(0, j, byte(i + 1), false); delay(400); lc.clearDisplay(0); } //Перебор чисел без очистки экрана for(int i = 0, j = 7; i < 8, j >= 0; i++, j--) { lc.setDigit(0, j, byte(i + 1), true); delay(400); } lc.clearDisplay(0); //Отрисовка фразы "Arduino ruLES!!!" int n = 0; for(int i = 0; i < 2; i ++) { for(int j = 7; j >= 0; j --) { if(n > 6 && !(i % 2)) { continue; } else { lc.setRow(0, j, ar[n]); delay(400); n ++; } } lc.clearDisplay(0); } delay(400); lc.clearDisplay(0); }


Пожалуйста, включите javascript для работы комментариев.

Семисегментные светодиодные индикаторы очень популярны среди устройств отображения цифровых значений и находят применение в передних панелях микроволновых печей, стиральных машин, цифровых часах, счетчиках, таймерах и др. По сравнению с ЖК индикаторами, сегменты светодиодного индикатора светятся ярко и различимы на большом расстоянии и при широком угле обзора. Для подключения семисегментного 4-разрядного индикатора к микроконтроллеру потребуется, по крайней мере, 12 линий ввода/вывода. Поэтому использовать данные индикаторы с микроконтроллерами с малым количеством выводов, например серии от компании , практически невозможно. Конечно, можно использовать разные методы мультиплексирования (описание которых можно найти на сайте в разделе "Схемы"), но и в этом случае имеются определенные ограничения для каждого метода, и зачастую в них используются сложные программные алгоритмы.

Мы рассмотрим метод подключения индикатора по интерфейсу SPI, который потребует всего 3 линии ввода/вывода микроконтроллера. При этом сохранится управление всеми сегментами индикатора.

Для подключения 4-разрядного индикатора к микроконтроллеру по SPI шине используется специализированная микросхема-драйвер производства компании . Микросхема способна управлять восемью семисегментными индикаторами с общим катодом и имеет в своем составе BCD-декодер, драйверы сегментов, схему мультиплексирования и статическое ОЗУ для хранения значений цифр.

Ток через сегменты индикаторов устанавливается с помощью лишь одного внешнего резистора. Дополнительно микросхема поддерживает управление яркостью индикаторов (16 уровней яркости) посредством встроенного ШИМ.

Рассматриваемая в статье схема - это схема дисплейного модуля с интерфейсом SPI, который может использоваться в радиолюбительских конструкциях. И нас больше интересует не сама схема, а работа с микросхемой по интерфейсу SPI. Питание модуля +5 В подается на вывод Vcc, сигнальные линии MOSI, CLK и CS предназначены для коммуникации мастер-устройства (микроконтроллер) с ведомым (микросхема MAX7219).

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

Данные передаются в микросхему 16-битными пакетами (по два байта), которые помещаются во встроенный 16-битный регистр сдвига по каждому нарастающему фронту сигнала CLK. 16-битный пакет мы обозначим D0-D15, где биты D0-D7 содержат данные, D8-D11 содержат адрес регистра, биты D12-D15 значения не имеют. Бит D15 - старший значащий бит и является первым принимаемым битом. Хотя микросхема способна управлять восемью индикаторами, мы рассмотрим работу только с четырьмя. Управление ими осуществляется на выходах DIG0 - DIG3, расположенных в последовательности справа налево, 4-битные адреса (D8-D11), которые им соответствуют, это 0×01, 0×02, 0×03 и 0×04 (шестнадцатеричный формат). Регистр цифр реализуется на базе встроенного ОЗУ с организацией 8×8 и адресуются непосредственно, так что каждая отдельная цифра на дисплее может обновляться в любое время. В следующей таблице приведены адресуемые цифры и регистры управления микросхемы MAX7219.

Регистр

Адрес

HEX-значение

Нет операции

Режим декодирования

Количество индикаторов

Выключение

Тест индикатора

Регистры управления

Микросхема MAX1792 имеет 5 регистров управления: режим декодирования (Decode-Mode), управление яркостью индикатора (Intensity), регистр количества подключенных индикаторов (Scan Limit), управление включением и выключением (Shutdown), режим тестирования (Display Test).

Включение и выключение микросхемы

При подаче питания на микросхему все регистры сбрасываются, и она переходит в режим Shutdown (выключение). В этом режиме дисплей отключен. Для перехода в нормальный режим работы необходимо установить бит D0 регистра Shutdown (адрес 0Сh). В любое время этот бит может быть сброшен, чтобы перевести драйвер в выключенное состояние, при это содержимое всех регистров сохраняется неизменным. Этот режим может использоваться для экономии энергии или в режиме сигнализации миганием индикатора (последовательная активация и деактивация режима Shutdown).

Перевод микросхемы в режим Shutdown осуществляется последовательной передачей адреса (0Сh) и данных (00h), а передача 0Ch (адрес) и затем 01h (данные) возвращают в нормальный режим работы.

Режим декодирования

C помощью регистра выбора режима декодирования (адрес 09h) можно использовать BCD code B декодирование (отображаемые символы 0-9, E, H, L, P, -) или же без декодирования для каждой цифры. Каждый бит в регистре соответствует одной цифре, установка логической единицы соответствует включению декодера для данного разряда, установка 0 - декодер исключается. Если используется BCD декодер, то принимается во внимание только младший полубайт данных в регистрах цифр (D3-D0), биты D4-D6 игнорируются, бит D7 не зависит от BCD декодера и отвечает за включение десятичной точки на индикаторе, если D7=1. Например, при последовательной посылке байтов 02h и 05h на индикаторе DIG1 (второй разряд справа) будет отображаться цифра 5. Подобным образом, при посылке 01h и 89h на индикаторе DIG0 будет отображаться цифра 9 с включенной десятичной точкой. В таблице ниже приведен полный список символов, отображаемых при использовании BCD декодера микросхемы.

Символ

Данные в регистрах

Включенные сегменты = 1

Пусто

*Десятичная точка устанавливается битом D7=1

При исключении BCD декодера из работы биты данных D7-D0 соответствуют линиям сегментов (A-G и DP) индикатора.

Управление яркостью индикаторов

Микросхема позволяет программно управлять яркостью индикаторов посредством встроенного ШИМ. Выход ШИМ контролируется младшим полубайтом (D3-D0) регистра Intensity (адрес 0Ah), который позволяет устанавливать один из 16 уровней яркости. При установке всех битов полубайта в 1 выбирается максимальная яркость индикатора.

Количество подключенных индикаторов

В регистре Scan-Limit (адрес 0Bh) устанавливается значение количества разрядов, обслуживаемых микросхемой (1 … 8). Для нашего варианта с 4 разрядами в регистр должно быть записано значение 03h.

Тест индикатора

Регистр, отвечающий за этот режим, находится по адресу 0Fh. Устанавливая бит D0 в регистре, пользователь включает все сегменты индикаторов, при этом содержимое регистров управления и данных не изменяется. Для выключения режима Display-Test бит D0 должен быть равен 0.

Интерфейс с микроконтроллером

Модуль индикатора может быть подключен к любому микроконтроллеру, который имеет три свободные линии ввода/вывода. Если микроконтроллер имеет встроенный аппаратный модуль SPI, то модуль индикатора может подключаться как ведомое устройство на шине. В этом случае сигнальные линии SPI интерфейса SDO (serial data out), SCLK (serial clock) и SS (slave select) микроконтроллера могут быть непосредственно подключены к выводам MOSI, CLK и CS микросхемы MAX7219 (модуля), сигнал CS имеет активный низкий уровень.

В случае если микроконтроллер не имеет аппаратного SPI, то интерфейс можно организовать программно. Общение с микросхемой MAX7219 начинается с установки и удержания низкого уровня на линии CS, после чего последовательно посылаются 16 бит данных (старший значимый бит передается первым) по линии MOSI по нарастающему фронту сигнала CLK. По завершению передачи на линии CS опять устанавливается высокий уровень.

В секции загрузок пользователи могут скачать исходный текст тестовой программы и HEX-файл прошивки, в которой реализуется обычный 4-разрядный счетчик с отображением значений на модуле индикатора с интерфейсом SPI. Используемый микроконтроллер - , интерфейс реализован программно, сигнальные линии CS, MOSI и CLK модуля индикатора подключены к портам GP0, GP1 и GP2, соответственно. Используется компилятор mikroC для PIC микроконтроллеров (mikroElektronika

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

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

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

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

И вот в начале двадцатого века, с появлением электронных ламп появились первые газоразрядные индикаторы

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

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

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

Минусы газоразрядных ламп - кушают много. Про долговечность можно и поспорить. У нас в универе до сих пор в лаборантских кабинетах эксплуатируют частотомеры на газоразрядниках.

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

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

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

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

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

Обратите внимание, что трехзначный частотомер может указывать максимальные частоты 999 Гц при использовании односекундной базы, 99 кГц при использовании 100 мс временной базы, 9 кГц при использовании временной базы 10 мс и 999 кГц при использовании 1 мс временной базы.

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

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

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

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

Если рассмотреть схему одиночного семисегментного индикатора, то она выглядит вот так:

Как мы видим, семисегментный индикатор может быть как с общим анодом (ОА) , так и с общим катодом (ОК) . Грубо говоря, если семисегментник у нас с общим анодом (ОА), то в схеме мы должны на этот вывод вешать "плюс", а если с общим катодом (ОК) - то "минус" или землю. На какой вывод мы подадим напряжение, такой светодиодик у нас и загорится. Давайте все это продемонстрируем на практике.

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

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

У нас имеются в наличии вот такие светодиодные индикаторы:

Как мы видим, семисегментники могут быть одиночные и многоразрядные, то есть две, три, четыре семисегментника в одном корпусе. Для того, чтобы проверить современный семисегментник, нам достаточно мультиметра с функцией прозвонки диодов. Ищем общий вывод - это может быть или ОА или ОК - методом тыка и потом уже смотрим работоспособность всех сегментов индикатора. Проверяем трехразрядный семисегментник:

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

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

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

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

Управление 7-сегментным дисплеем

Поэтому, когда у вас есть 4-значный, мультиплексированный 7 сегмент, общий анод. Во-первых, мы должны знать, какой тип дисплея у нас есть, поскольку есть две возможные формы: общий катод и общий анод. Вещи, которые вам понадобятся для этого урока. Слева: графический вид 7-сегментного дисплея, показывающий одно общее расположение для внутренней проводки и расположения контактов.

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

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

Подсчет в шестнадцатеричном виде на одном 7-сегментном дисплее

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

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

Таким же образом проверяем четырехразрядный семисегментник с китайского радиоприемника

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

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

В тестовой программе последовательно отображаются цифры от 0 до 9 на 7-сегментном дисплее. Выходящий номер сохраняется в регистровом счетчике и увеличивается на 1 в пределах цикла. Если регистр достиг значения 10, он снова сбрасывается на 0. После повышения возникает цикл ожидания, который гарантирует, что определенное время пройдет в следующем выпуске. Обычно вы не делаете таких длинных циклов ожидания, но это не про ожидание, а контроль 7-сегментного дисплея. Использовать таймер для этого - это слишком много усилий.

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

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

Фактическая проблема и, следовательно, интересная в этой статье часть, однако, происходит непосредственно после цикла метки. Обратите внимание, что значение счетчика должно быть удвоено. Это напрямую связано с тем, что флеш-память носит словесный характер, а не байт-мудрый. Во втором примере на этой странице это делается по-другому. Там показано, как посредством другой записи таблицы генерация байтов заполнения может быть предотвращена ассемблером. Интересно также, что для расчета требуется регистр, который содержит значение 0.

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

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

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

К сожалению, есть проблема, потому что для отображения необходимо восемь портов - четыре объявления потребуют 32 порта. Но есть несколько путей. Сдвиговые регистры уже описаны в другом учебнике. Это упростило бы создание требуемых 32 выходных линий только с тремя выводами. Принцип управления не отличается от управления одним 7-сегментным дисплеем, только то, как «выходные выводы» приближаются к их значениям, отличается и определяется использованием сдвиговых регистров. На данный момент, однако, должен быть показан другой вариант управления.



Рис.2.

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

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

Одним из аспектов этого типа управления является частота мультиплексирования, то есть полный цикл перехода с одного дисплея на другой. Он должен быть достаточно высоким, чтобы избежать мерцания дисплея. Человеческий глаз вялый, в кинотеатре 24 кадра в секунду, с телевизором, чтобы быть на безопасной стороне, что также неподвижные изображения спокойны, каждый сегмент должен контролироваться не менее 100 Гц, поэтому он подключается, по крайней мере, каждые 10 мс. В исключительных случаях, однако, даже 100 Гц все еще могут мерцать, Например, когда дисплей перемещается быстро или когда возникают помехи с искусственными источниками света, которые работают с переменным током.

Светодиодные индикаторы бывают двух типов.
В первом из них все катоды, т.е. отрицательные выводы всех светодиодов, объединены вместе и для них выделен соответствующий вывод на корпусе.
Остальные выводы индикатора соединены к аноду каждого из светодиодов (рис.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 Килоома.


Таким же образом проверяем индикатор от китайского приемника


В схемах семисегментные индикаторы соединяются с резисторами на каждом выводе

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

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

В сегодняшней статье поговорим о 7-сегментных индикаторах и о том, как их «подружить» с Ардуино. Есть несколько вариантов. Самый простой, безусловно, это зайти на и купить готовый индикатор с интегрированным шилдом (это платка согласования так называется), но мы не ищем лёгких путей, поэтому пойдем путем чуть более сложным. Новички – не пугайтесь, эта статья, как и предыдущие мои статьи ( и ) именно для вас. Пусть гуру пишут для таких же умудренных опытом гуру, а я новичок – пишу для новичков.

Почему именно 7-сегментный индикатор? Ведь существует столько всяких экранов, с большим количеством символов, строк, разнообразных диагоналей и разрешений, черно-белых и цветных, самые доступные из которых стоят пару долларов… А тут: «старенький», до безобразия простой, но требующий огромного количества пинов 7-сегментный индикатор, но все-таки преимущество есть и у этого «старичка». Дело в том, что пользуясь приведенными здесь скетчами можно оживить не только индикатор с высотой цифр 14 мм, но и более серьезные (правда уже самодельные) проекты, и метровые цифры в данном случае далеко не предел. Жителям столиц это может быть не так интересно, а вот население Новокацапетовки или Нижней Кедровки очень порадуется, если на клубе или сельсовете появятся часы, которые еще могут и дату отображать, и температуру, а о создателе этих часов будут говорить очень долго. Но, подобные часы тема отдельной статьи: будет желание у посетителей – напишу. Всё выше написанное можно считать вступлением. Как и прошлая моя статья эта будет состоять из частей, на этот раз из двух. В первой части мы просто «по управляем» индикатором, а во второй – попробуем приспособить его для чего-то хоть немного полезного. Итак, продолжим:

Часть первая. Экспериментально – познавательная

За основу данного проекта взят нам уже хорошо знакомый по предыдущим статьям ARDUINO UNO. Напомню, что приобрести его легче всего можно здесь: или здесь: , кроме этого понадобится 4-разрядный, 7-сегментный индикатор. У меня, в частности GNQ-5641BG-11. Почему именно этот? Да просто потому, что лет 5 назад купил его по ошибке, идти менять было лень, вот он и валялся все это время, ожидая своего часа. Думаю, что подойдет любой с общим анодом (и с общим катодом можно, но придется данные массива и остальные значения портов инвертировать – т.е. менять на обратные), лишь бы не был слишком мощным, чтобы не сжечь Ардуинку. Кроме этого – 4 токоограничивающих резистора, примерно 100 Ом каждый и кусок шлейфа (мне хватило 10 см) на 12 пин (жил) можно «оторвать» от более широкого, что я и сделал. А можно вообще отдельными проводочками подпаяться, проблем не будет. Еще понадобятся штыри на плату (11 шт.) хотя, если аккуратно можно и без них. Эскиз индикатора можно увидеть на рисунке 1, а его схему на рисунке 2. Также отмечу, что на каждый сегментик этого индикатора лучше подавать не более 2.1В (ограничивается 100-Омными резисторами), и в этом случае он будет потреблять не более 20 мА. В случае, если загорится цифра «8» потребление не превысит 7х20=140 мА, что вполне допустимо для выходов Ардуино. Любознательный читатель задаст вопрос: «Но ведь 4 разряда по 140 мА это уже 4х140=560 мА, а это уже многовато!» Отвечу – останется 140. Каким образом? Читайте дальше! Расположение пинов на индикаторе видно на рисунке 3. А подключение делаем согласно таблице 1.


Рис. 1 - Эскиз индикатора


Рис. 2 - Схема индикатора


Рис. 3 - Расположение пинов

Таблица 1

Пин Ардуино Уно

Пин индикатора

Примечание

Сегмент G

Сегмент F

Сегмент E

Сегмент D

Сегмент C

Сегмент B

Сегмент A

Общий анод сегмента № 1, подключать через резистор 100 Ом.

Общий анод сегмента № 2, подключать через резистор 100 Ом.

Общий анод сегмента № 3, подключать через резистор 100 Ом.

Общий анод сегмента № 6, подключать через резистор 100 Ом.



Заливаем простенький скетч, который представляет собой простенькую «считалочку» от 0 до 9:


А теперь немного пояснений. DDRD это регистр порта D (DDRB – соответственно порта В) за «страшным» словом «регистр» всего лишь «спряталась» функция, которая указывает, будет порт своим пином читать что-то (принимать информацию), либо наоборот туда можно будет что-то писать (отдавать информацию). В данном случае строчка DDRD=B11111111; указывает, что все пины порта D выходные, т.е. информация из них будет выходить. Буквочка «В» обозначает, что в регистр записано двоичное (бинарное) число. Нетерпеливый читатель тут же спросит: «А десятичное можно!?!». Спешу успокоить – можно, но об этом чуть позже. Если бы мы хотели половину порта задействовать на вход, а половину на выход можно было бы указать так: DDRD=B11110000; единицы показывают те пины, которые будут отдавать информацию, а нули – те, которые будут эту самую информацию принимать. Основное удобство регистра заключено еще и в том, что не надо прописывать 8 раз все пины, т.е. мы экономим в программе 7 строк. А теперь разберем следующую строку:

PORTB=B001000; // устанавливаем высокий уровень 11 пина порта В

PORTB это регистр данных порта В, т.е. записав в него какое-либо число мы указываем на каком пине порта будет единица, а на каком – ноль. В добавление к комментарию скажу, если взять Ардуино Уно таким образом, чтобы видеть контроллер и цифровые пины были сверху - будет понятна запись в регистр, т.е. какой «ноль» (или «единица»)отвечает за какой пин, т.е. крайний правый ноль порта В отвечает за 8-й пин, а крайний левый – за 13-й (у которого встроенные светодиод). Для порта D соответственно правый за пин 0, левый за пин 7.
Надеюсь после таких развёрнутых пояснений все понятно, а раз понятно предлагаю вернуться к известной нам и горячо любимой с детства десятичной системе счисления. И еще – скетч в 25 строк вроде и небольшой, но для новичка все-таки несколько громоздок. Будем уменьшать.

Заливаем еще более простой скетч, та же самая «считалочка»:


Видео 1 .
Всего 11 строчек! Вот это по-нашему, «по-новичковски»! Прошу обратить внимание вместо двоичных чисел в регистры записаны десятичные. Естественно, для десятичных чисел никаких букв впереди не нужно. Думаю, не лишним будет свести все числа в таблицы.

Таблица 2. Соответствие отображаемого знака данным порта

Общий анод

Общий катод

Двоичная система

Десятичная система

Двоичная система

Десятичная система

Таблица 3. Соответствие отображаемого разряда данным порта

Общий анод

Общий катод

Двоичная система

Десятичная система

Двоичная система

Десятичная система



Внимание! Данные таблиц 2 и 3 справедливы только при распайке согласно таблице 1.
А теперь зальем скетч со «считалочкой» от 0 до 9999:




Рис. 4 - Считалочка

Работу скетча можно посмотреть на Видео 2 .

В этом скетче комментариев больше, чем самого кода. Вопросов возникнуть не должно…. Кроме одного, что это за «цикл мерцания» такой, что, собственно говоря, там мерцает и для чего? А еще переменная для этого какая-то…
А все дело в том, что одноименные сегменты всех четырех разрядов у нас соединены в одной точке. А1, А2, А3 и А4 имеют общий катод; А1, В1,…..G1 общий анод. Так, что подав одновременно на 4 разрядный индикатор «1234» мы получим «8888» и очень удивимся по этому поводу. Чтобы этого не произошло нужно сначала зажечь «1» в своем разряде, потом отключить её, зажечь «2» в своем и т.д. Если делать это очень быстро, то мерцание цифр сольётся, как кадры на киноплёнке и глаз его практически не будет замечать. А максимальное значение переменной мерцания в данном случае управляет скоростью смены цифр на индикаторе. Кстати, именно благодаря этому «мерцанию» и максимальное потребление тока всего 140 мА, вместо 560. А теперь предлагаю перейти к чему-то более полезному.

Часть вторая. Хоть немного полезная

В этой части мы выведем символы с персонального компьютера на 7-сегментный индикатор при помощи ARDUINO MEGA. Почему вдруг возникла идея «поменять лошадей на переправе»? Причин две: первая – до этого в своих статьях я ни разу не рассматривал ARDUINO MEGA; и вторая – в ARDUINO UNO я так и не разобрался, как мне динамически менять местами СОМ порт и порт D. Но я новичок – мне простительно. Приобрести данный контроллер, естественно можно здесь: . Для реализации задуманного пришлось взять паяльник и перепаять шлейф со стороны Ардуино, а также написать новый скетч. Как перепаян шлейф можно посмотреть на Рисунке 5. Все дело в том, что ARDUINO MEGA и ARDUINO UNO имеют разную распиновку портов, да и в Меге портов гораздо больше. Соответствие использованных пинов видно из Таблицы 4.



Рис. 5 - Новая распайка шлейфа

Таблица 4

Порт Мега


Внимание! Данная таблица справедлива только для данного проекта!

Также следует обратить внимание, что порт С у Ардуино Мега «начинается» с 37 пина и далее по убывающей, а порт А – с 22 пина и далее по возрастающей.



Рис. 6 - Общий вид



Небольшие особенности реализации: выводить будем 4 символа. Символы должны быть цифрами. Если ввели «1234» и увидим «1234», если ввели «123456» все равно увидим «1234», если ввели «йцук», «фыва1234», «отиог485909оапоьм» - не увидим ничего. Если ввели «рр2345мм» увидим « 23» т.е. небольшая, встроенная «защита от дурака».

Собственно скетч:



А как работает данная программа можно посмотреть на Видео 3 .



Обзор подготовил Павел Сергеев


Close