Семисегментные светодиодные индикаторы очень популярны среди устройств отображения цифровых значений и находят применение в передних панелях микроволновых печей, стиральных машин, цифровых часах, счетчиках, таймерах и др. По сравнению с ЖК индикаторами, сегменты светодиодного индикатора светятся ярко и различимы на большом расстоянии и при широком угле обзора. Для подключения семисегментного 4-разрядного индикатора к микроконтроллеру потребуется, по крайней мере, 12 линий ввода/вывода. Поэтому использовать данные индикаторы с микроконтроллерами с малым количеством выводов, например серии PIC12F от компании Microchip, практически невозможно. Конечно, можно использовать разные методы мультиплексирования (описание которых можно найти на сайте Радиолоцман в разделе "Схемы"), но и в этом случае имеются определенные ограничения для каждого метода, и зачастую в них используются сложные программные алгоритмы.
Мы рассмотрим метод подключения индикатора по интерфейсу SPI, который потребует всего 3 линии ввода/вывода микроконтроллера. При этом сохранится управление всеми сегментами индикатора.
Для подключения 4-разрядного индикатора к микроконтроллеру по SPI шине используется специализированная микросхема-драйвер MAX7219 производства компании Maxim. Микросхема способна управлять восемью семисегментными индикаторами с общим катодом и имеет в своем составе 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-значение
|
||||
D15-D12
|
D11
|
D10
|
D9
|
D8
|
||
Нет операции
|
Х
|
0
|
0
|
0
|
0
|
0хХ0
|
Разряд 0
|
Х
|
0
|
0
|
0
|
1
|
0хХ1
|
Разряд 1
|
Х
|
0
|
0
|
1
|
0
|
0хХ2
|
Разряд 2
|
Х
|
0
|
0
|
1
|
1
|
0хХ3
|
Разряд 3
|
Х
|
0
|
1
|
0
|
0
|
0хХ4
|
Разряд 4
|
Х
|
0
|
1
|
0
|
1
|
0хХ5
|
Разряд 5
|
Х
|
0
|
1
|
1
|
0
|
0хХ6
|
Разряд 6
|
Х
|
0
|
1
|
1
|
1
|
0хХ7
|
Разряд 7
|
Х
|
1
|
0
|
0
|
0
|
0хХ8
|
Режим декодирования
|
Х
|
1
|
0
|
0
|
1
|
0хХ9
|
Яркость
|
Х
|
1
|
0
|
1
|
0
|
0хХA
|
Количество индикаторов
|
Х
|
1
|
0
|
1
|
1
|
0хХB
|
Выключение
|
Х
|
1
|
1
|
0
|
0
|
0хХC
|
Тест индикатора
|
Х
|
1
|
1
|
1
|
1
|
0хХF
|
Регистры управления
Микросхема 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*
|
D6-D4
|
D3
|
D2
|
D1
|
D0
|
DP*
|
A
|
B
|
C
|
D
|
E
|
F
|
G
|
|
0
|
X
|
0
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
||
1
|
X
|
0
|
0
|
0
|
1
|
0
|
1
|
1
|
0
|
0
|
0
|
0
|
||
2
|
X
|
0
|
0
|
1
|
0
|
1
|
1
|
0
|
1
|
1
|
0
|
1
|
||
3
|
X
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
0
|
1
|
||
4
|
X
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
||
5
|
X
|
0
|
1
|
0
|
1
|
1
|
0
|
1
|
1
|
0
|
1
|
1
|
||
6
|
X
|
0
|
1
|
1
|
0
|
1
|
0
|
1
|
1
|
1
|
1
|
1
|
||
7
|
X
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
||
8
|
X
|
1
|
0
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
1
|
1
|
||
9
|
X
|
1
|
0
|
0
|
1
|
1
|
1
|
1
|
1
|
0
|
1
|
1
|
||
— |
X
|
1
|
0
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
1
|
||
E
|
X
|
1
|
0
|
1
|
1
|
1
|
0
|
0
|
1
|
1
|
1
|
1
|
||
H
|
X
|
1
|
1
|
0
|
0
|
0
|
1
|
1
|
0
|
1
|
1
|
1
|
||
L
|
X
|
1
|
1
|
0
|
1
|
0
|
0
|
0
|
1
|
1
|
1
|
0
|
||
P
|
X
|
1
|
1
|
1
|
0
|
1
|
1
|
0
|
0
|
1
|
1
|
1
|
||
Пусто
|
X
|
1
|
1
|
1
|
1
|
0
|
0
|
0
|
0
|
0
|
0
|
0
|
||
*Десятичная точка устанавливается битом 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. Используемый микроконтроллер – PIC12F683, интерфейс реализован программно, сигнальные линии CS, MOSI и CLK модуля индикатора подключены к портам GP0, GP1 и GP2, соответственно. Используется компилятор mikroC для PIC микроконтроллеров (mikroElektronika), однако код может быть модифицирован под другие высокоуровневые компиляторы. Микроконтроллер работает на тактовой частоте 4 МГц от встроенного RC осциллятора, выход MCLR отключен.
Данный модуль можно подключать и к платформе Arduino. Для работы с ним потребуется библиотека LedControl, доступная для скачивания на сайте Arduino.
Загрузки
Исходный код тестовой программы и HEX-файл для прошивки микроконтроллера – скачать