Как подключить семисегментный индикатор к Arduino

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

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

Семисегментный индикатор — это набор светодиодов, собранных в едином корпусе. Светодиоды образуют сегменты-палочки, путём подсвечивания которых можно формировать цифры. Индикатор можно напрямую подключать к Ардуино (см. Светодиод), но при этом будет задействовано целых 7 выводов контроллера на один дисплей, и придется озаботится добавлением в программу кода, реализующего отображение цифр на индикаторе. Этот способ плох также и тем, что ограничено количество подключенных индикаторов — больше двух разрядов отобразить уже не получится, на контроллере не хватит выводов. Для решения этой проблемы мы предлагаем использовать специальную микросхему, называемую 7-ми сегментным драйвером (CD4026). В статье рассмотрено подключение драйвера к arduino.

Вводная часть

Суть работы микросхемы проста: на вход микросхемы clock (1) подаются импульсы HIGH, каждый импульс соответствует увеличению внутреннего счетчика на единицу. Значение этого счетчика и будет отображаться на индикаторе. Вывод clock (1) рекомендуется снабдить стягивающим резистором для избежания ложных срабатываний. Для сброса счетчика подается импульс на вход reset clock (15). На пины enable display (3) должен подаваться сигнал HIGH, иначе все выводы окажутся выключенными. Если вы не собираетесь включать и выключать отображение цифр на индикаторе — просто подключите этот вывод к рельсе питания. К пину 16 следует подключить питание. Пины disable clock (2) и 0V (8) подключаются к земле. У драйвера 7 выходов (a, b, c, d, e, f, g) для подключения к соответствующим ножкам индикатора через токоограничительные резисторы. Особого внимания заслуживает выход ÷10 output (5). При переполнении внутреннего счетчика (в момент подачи сигнала HIGH на clock (1)  при текущем значении счетчика 9) на него подается сигнал HIGH до момента следующего увеличения счётчика. Это позволяет подключить этот выход ко входу clock (1) следующего драйвера, и получить возможность выводить почти неограниченное количество разрядов за счет всего 3-х выходов Arduino.

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

Распиновка микросхемы CD4026

Распиновка микросхемы CD4026

Схема подключения семисегментного индикатора LD-5161AG

Схема подключения семисегментного индикатора LD-5161AG

Практика подключения

Установите микросхему на макетную плату и подключите выводы микросхемы к выводам контроллера следующим образом:

  • 1 «clock» ко 2 выводу ардуино. Дополнительно, через резистор 10 кОм к земле. Резистор исключит влияние помех на отображение числа.
  • 2 «disable clock» к рельсе земли.
  • 3 «enable display» к рельсе питания.
  • 5 «÷10» можно оставить неподключённым. При увеличении числа драйверов, к этому выводу следует подключить вывод 1 «clock» второго драйвера.
  • 8 «0V» — к рельсе земли.
  • 15 «reset» к 3 выводу ардуино. Дополнительно, через резистор 10 кОм к земле. Резистор исключит возможный сброс значения из-за помех.
  • 16 вывод микросхемы к рельсе питания.

Выводы микросхемы 6,7 и с 9 по 13 соединить с выводами семисегментного индикатора, ориентируясь на буквенный обозначения на схемах выше. Средние выводы индикатора — это общие катоды, их нужно подключить к рельсе земли.
Вот так это должно выглядеть:

Семисегментный драйвер CD4026 установлен на макетную плату

Семисегментный драйвер CD4026 установлен на макетную плату

Семисегментный драйвер CD4026 с подключённым к нему семисегментным индикатором

Семисегментный драйвер CD4026 с подключённым к нему семисегментным индикатором

Теперь загрузите в плату Arduino следующий код:

#define CLOCK_PIN 2
#define RESET_PIN 3

// Обнуляет текущее значение
void resetNumber()
{
// Просто последовательно выдаём HIGH и LOW на вывод reset
digitalWrite(RESET_PIN, HIGH);
digitalWrite(RESET_PIN, LOW);
}

//Выводит на индикаторе переданное в параметрах число
void showNumber(int n)
{
// Обнуляем текущее значение
resetNumber();

// "Помигаем" выводом счётчика до нужного значения
for (byte i=0; i<n; i++) {
digitalWrite(CLOCK_PIN, HIGH);
digitalWrite(CLOCK_PIN, LOW);
}
}

void setup()
{
//Настраиваем выводы на выход
pinMode(RESET_PIN, OUTPUT);
pinMode(CLOCK_PIN, OUTPUT);

// Обнуляем счётчик при старте
resetNumber();
}

void loop()
{
// Получаем количество секунд с момента старта
// и выводим его на индикаторы
showNumber((millis() / 1000) % 60);
delay(1000);
}

Этот код отображает количество целых секунд, прошедших с момента запуска платы. То есть, отображает числа от 0 до 60. При одном подключённом индикаторе, вы увидите, что индикатор отображает только цифры от 0 до 9.

Семисегментный драйвер CD4026 отображает числа от 0 до 9

Семисегментный драйвер CD4026 отображает числа от 0 до 9

Для добавления второго разряда, нам понадобится ещё один семисегментный индикатор и ещё один драйвер к нему.
Установите на макетную плату ещё один индикатор и ещё один драйвер. Подключите второй драйвер к рельсам питания и земли точно так же, как первый. Вывод 1 «clock» не нужно подключать к контроллеру Arduino, просто подключите его к выводу 5 «÷10» первого драйвера. Этого достаточно, чтобы второй драйвер начал отображать десятки на подключённом к нему индикаторе. Выводы 15 «reset» обоих драйверов должны быть соединены между собой.

Семисегментный драйвер CD4026 с двумя подключёнными к нему семисегментными индикатороми

Семисегментный драйвер CD4026 с двумя подключёнными к нему семисегментными индикатороми

Теперь наш счётчик показывает 2 разряда,а вы восхитительны!

http://www.youtube.com/watch?v=qTf4z9HnbA8

P.S. На видео есть небольшая странность. Первый, кто в комментариях предложит правильную причину, почему это произошло, получит бесплатно набор из 2х индикаторов и 2х микросхем CD4026. Подсказка: это не монтаж. Именно так всё и отображалось в реальности. В плату был залит именно тот скетч, что предлагается выше.
В комментариях уже есть правильный ответ.

Таким образом можно множить цепочку индикаторов до бесконечности. Управлять всем этим по прежнему будут всего 2 вывода контроллера.