Динамическая индикация в Arduino

7-сегментный индикатор

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

Зрение людей имеет так называемую «инерцию» – после того, как свет погас, ещё некоторое время нам будет казаться, что он светится. Этот интервал измеряется сотыми долями секунды.

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

Схема

Arduino с дисплеем
Arduino с дисплеем

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

Регистр имеет 8 выходов (Q0 … Q7), к которым через резисторы по 330 ом подключены сегменты индикаторов. Старшему разряду Q7 соответствует сегмент A, а младшему разряду Q0 – сегмент H (десятичная точка). К примеру, для цифры 8 в регистр нужно записать число 0B11111110 (в десятичной системе 254), а для буквы «H» – 0B01101110 (в десятичной системе 110). Отмечу, что в нашем случае удобнее оперировать именно с двоичными числами, поскольку единица соответствует включённому сегменту, а ноль – погашенному. Соответственно, для пробела нужно вывести 0B00000000.

Программа

Для начала попробуем вывести приветствие «HELLO», а оставшиеся разряды заполним цифрами от 1 до 3. Готовим массив:

0B01101110 – H,
0B10011110 – E,
0B00011100 – L,
0B00011100 – L,
0B11111100 – O,
0B01100000 – 1,
0B11011010 – 2,
0B11110010 – 3

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

Таймер настроен, исходя из частоты кварца в 16 мегагерц. Для 12 мегагерц делитель составит 29999, а для 8 нужно использовать значение 19999. Полагаем, что частота кварца точно соответствует заявленной и указанной на нём, а возможной небольшой погрешностью частоты в нашем случае можно пренебречь.

Также можно менять яркость свечения индикатора, изменяя значение задержки от 100 микросекунд до примерно 2300. Значение меньше 100 будет давать слишком тусклое свечение, а при использовании значений больше примерно 2300 программа не будет «успевать» всё обрабатывать, и индикация с большой вероятностью будет хаотичной. При желании можете поэкспериментировать с большими значениями самостоятельно, плату и индикатор вы не сожжёте.

Скачать файл скетча

Комментарии:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *