4 Разрядный 7 сегментный индикатор и arduino

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

Если вы научились пользоваться «световой шкалой», то следующий шаг в освоении нового компонента «7-сегментный индикатор» дастся вам легко. Он попадается практически во всех стартовых наборах.

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

Мы имеем дело опять с набором светодиодов, только на этот раз их 8 (семь полосок и один кружочек) и они расположены не друг за другом, а в определённом порядке, которые позволяют вам выводить цифры от 0 до 9.

Важная отличительная черта — у индикатора имеются общие ножки для катода (ножки 3 и 8). Всего их две и они равноценны. Это удобно, вам не нужно будет от каждого катода вести отдельный провод на землю. Достаточно выбрать один из общих катодов и от неё соединиться с GND. Аноды у всех отдельные.

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

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

Схематично можно изобразить следующим образом.

Собираем на макетной плате. Соединяем провода по порядку, начиная с первой ножки, которая идёт на второй порт. На землю идёт восьмая ножка индикатора.

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

Если мы хотим помигать цифрой 1, то нам надо использовать светодиоды 4 и 6, которые идут на порты 4 и 6 платы микроконтроллера.

Если мы захотим вывести цифру 5, то понадобится работать с пятью светодиодами, цифру 8 — уже семь светодиодов. При сложных проектах работать с таким количеством становится затруднительно. Придётся каждый раз смотреть на схему, что вспомнить, какие светодиоды нужно включить для отображения каждой цифры.

Но можно пойти другим путём. А поможет нам единица информации — байт. Байт в своём двоичном представлении состоит из 8 бит. Каждый бит может принимать значения 0 или 1. А наш светодиодный индикатор как раз и состоит из восьми светодиодов. Таким образом мы можем представить цифру на индикаторе в виде набора байт, где единица будет отвечать за включённый диод, а ноль — за выключенный диод.

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

Первые два символа 0b дают понять, что речь идёт о двоичном счёте. Все нули означают, что все светодиоды будут выключены.

У нас задействованы порты от 2 по 9. Второй порт записывается в самую правую позицию. Чтобы его включить, поставим единицу.

Можно самостоятельно включать по отдельности каждый диод, перемещая единицу в представленном байте. Поняв принцип, можно, например, заметить, что за точку отвечает четвёртый бит справа. Если мы его не будем использовать, то он всегда будет равен 0. За чёрточку посередине индикатора отвечает самый последний байт (или первый слева).

Комбинируя набор нулей и единиц, можно создать нужные нам цифры. Например, цифра 0 будет представлена как 0b01110111.

Давайте напишем пример вывода цифры 0.

Код немного избыточен, переменная mask здесь лишняя, но она нам пригодится в следующем примере. Здесь важно, что мы пробегаемся в цикле по числу светодиодов и устанавливаем у всех режим OUTPUT. Затем также в цикле проходим через все светодиоды и узнаём, комбинацию бит с помощью метода bitRead(). Полученная информация помогает нам подсветить нужные светодиоды и получить цифру 0 на выходе.

Для остальных цифр можно также подготовить нужные наборы бит.

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

Запустив пример, мы получим реальный секундомер. За точность не ручаюсь, но для простых задач подойдёт.

На видео некоторые цифры отображаются коряво, видимо из-за особенностей записи. В реальности все цифры работают как положено.

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

На Амперке есть упоминания о двух компонентах, которые можно использовать для светодиодного индикатора. Я пока ими не пользовался:

Четырёхразрядный 7-сегментный индикатор

У четырёхразрядного 7-сегментного индикатора двенадцать выводов: 8 для каждого разряда с точкой и 4 для выбора нужного разряда. Чтобы разобраться в подключении, желательно иметь картинку перед глазами.

Если индикатор держать точкой вниз, то отсчёт идёт против часовой стрелки от нижнего левого угла.

Выводы 6, 8, 9 и 12 отвечают за конкретные разряды. Это могут быть общие катоды или общие аноды.

Выводы 1, 2, 3, 4, 5, 7, 10, 11 отвечают за конкретные сегменты. Например, самая верхняя полоска обозначена буквой A и имеет номер вывода 11. Таким образом, если подключить выводы 11 и 12 индикатора к выводу 11 и 12 на плате Arduino, то можем управлять этой полоской стандартным способом, например, помигать светодиодом.

Соедините все двенадцать выводов индикатора с выводами на плате. В своих примерах я использовал следующую схему.

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

Включаем букву H на всех разрядах.

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

Библиотека fDigitsSegtPin

К счастью есть библиотека fDigitsSegtPin, которую можно установить через менеджер библиотек. Подключаем библиотеку, указываем все двенадцать выводов по порядку и выводим нужное число.

Модули 7-сегментных дисплеев

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

Схема подключения 7-сегментных индикаторов к Arduino

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

Читать еще:  Remocolor инструмент официальный сайт

Для примера будем выводить на индикаторы количество секунд, прошедших с момента старта работы.

Исходные компоненты

Для эксперимента нам понадобятся:

Принцип работы

Семисегментный индикатор — это просто набор обычных светодиодов в одном корпусе. Просто они выложены восьмёркой и имеют форму палочки-сегмента. Можно подключить его напрямую к Arduino, но тогда будет занято 7 контактов, а в программе будет необходимо реализовать алгоритм преобразования числа из двоичного представления в соответствующие «калькуляторному шрифту» сигналы.

Для упрощения этой задачи существует 7-сегментный драйвер. Это простая микросхема с внутренним счётчиком. У неё есть 7 выходов для подключения всех сегментов (a, b, c, d, e, f, g pins), контакт для сбрасывания счётчика в 0 (reset pin) и контакт для увеличения значения на единицу (clock pin). Значение внутреннего счётчика преобразуется в сигналы (включен / выключен) на контакты a-g так, что мы видим соответствующую арабскую цифру.

На микросхеме есть ещё один выход, обозначенный как «÷10». Его значение всё время LOW за исключением момента переполнения, когда значение счётчика равно 9, а его увеличивают на единицу. В этом случае значением счётчика снова становится 0, но выход «÷10» становится HIGH до момента следующего инкремента. Его можно соединить с clock pin другого драйвера и таким образом получить счётчик для двузначных чисел. Продолжая эту цепочку, можно выводить сколь угодно длинные числа.

Микросхема может работать на частоте до 16 МГц, т.е. она будет фиксировать изменения на clock pin даже если они будут происходить 16 миллионов раз в секунду. На той же частоте работает Arduino, и это удобно: для вывода определённого числа достаточно сбросить счётчик в 0 и быстро инкрементировать значение по единице до заданного. Глазу это не заметно.

Подключение

Сначала установим индикаторы и драйверы на breadboard. У всех них ноги располагаются с двух сторон, поэтому, чтобы не закоротить противоположные контакты, размещать эти компоненты необходимо над центральной канавкой breadboard’а. Канавка разделяет breadboard на 2 несоединённые между собой половины.

Далее, подключим один из драйверов в соответствии с его распиновкой

Контакты 3 и 8 на индикаторе обозначены как «катод», они общие для всех сегментов, и должны быть напрямую соединены с общей землёй.

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

Соединять необходимо сопоставляя распиновку микросхемы (выходы a-g) и распиновку индикатора (входы a-g)

Повторяем процедуру для второго разряда

Теперь вспоминаем о контакте «reset»: нам необходимо соединить их вместе и притянуть к земле через стягивающий резистор. В последствии, мы подведём к ним сигнал с Arduino, чтобы он мог обнулять значение целиком в обоих драйверах.

Также подадим сигнал с «÷10» от правого драйвера на вход «clock» левого. Таким образом мы получим схему, способную отображать числа с двумя разрядами.

Стоит отметить, что «clock» левого драйвера не стоит стягивать резистором к земле, как это делалось для правого: его соединение с «÷10» само по себе сделает сигнал устойчивым, а притяжка к земле может только нарушить стабильность передачи сигнала.

Железо подготовленно, осталось реализовать несложную программу.

Программирование

Подключаем контакт 2 с Arduino к контакту clock младшего (правого) драйвера, контакт 3 — к общему reset’у драйверов; разводим питание; включаем — работает!

Подключение семисегментного индикатора (1 разряд) к Arduino по SPI

Наверняка у многих валяется вот такая светодиодная панелька:

Правильное название: семисегментный индикатор

Он получил такое названия благодаря тому, что в его корпусе находится 7 сегментов — светодиодов (часто добавляют ещё 8-й — точку).

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

Работать с семисегментом надо как со сборкой светодиодов (с общим катодом или анодом). Распиновку можно узнать, прозванивая ножки мультиметром. У меня получилось так: ( общий катод)

Каждый сегмент — это отдельный светодиод (красный или зелёный). Если подключаем к источнику 5V, то последовательно с каждым из них нужно подключить по резистору (150-300 ом) — чтобы не перегорели.

А соединять с Arduino я предлагаю через сдвиговый регистр 74HC595N (интерфейс SPI)

схема на BreadBoard:

Принципиальную схему не смог нарисовать в sPlan (нет 28-пиновой Atmega), так-что сделал в Fritzing:

Описание схемы:

— ноги 15,1,2,3,4.5,6,7 — это выходы регистра. Их подключаем к соответствующим ногам индикатора (A к Q0, B к Q1, C к Q3, ну и т. д.. Главное, чтобы было по порядку — тогда часть программирования будет проще)
— ноги 8 и 16 — это питание микросхемы (подключаем к GND и +5V Arduino)
— 10 ногу к +5V
— 13 ногу к GND
— Ноги 14, 12, 11 — управляющие пины шины SPI .
11 (SH_CP) — тактовая шина (clock) к 13 контакту Arduino (не принципиально)
12 (ST_CP) — защёлка (latch) к 12 контакту Arduino (не принципиально)
14 (DS) — данные (data) к 8 контакту Arduino (не принципиально)

Прошивка

Код очень простой. Мы даже не будем использовать библиотеку SPI. Посылать данные будем функцией shiftOut()

Она будет отправлять регистру 1 байт (8 бит). Каждый сегмент — это 1 бит. ( Если отправить вот такой байт: 0b10000000, то получим такую вот картину: (зажжётся первый сегмент — А)

Суть: Зажигая определённую комбинацию сегментов, мы получаем на экране цифру. Так, например, если зажечь сегменты B и С то загорится единичка. A, B, C — семёрка, и т. д..

Сам код: SevSeg1_SPI.ino

Список радиоэлементов

Прикрепленные файлы:

Оценить статью

  • Техническая грамотность

Средний балл статьи: 0 Проголосовало: 0 чел.

Читать еще:  220 Вольт интернет магазин каменск уральский

Комментарии (4) | Я собрал ( 0 ) | Подписаться

Для добавления Вашей сборки необходима регистрация

#define CLOCK 13 //SH_CP
#define DATA 12 //DS
#define LATCH 8 //ST_CP
int val = 0;

//настраиваем контакты на выход
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(LATCH, OUTPUT);

//отключаем LATCH (чтобы регистр не ждал данных)
digitalWrite(LATCH, HIGH);
>

0b12345678
*/
switch (val) <
case -1: //точка
shiftOut(DATA, CLOCK, LSBFIRST, 0b00000001);
break;
case 0: //0
shiftOut(DATA, CLOCK, LSBFIRST, 0b11111100);
break;
case 1: //1
shiftOut(DATA, CLOCK, LSBFIRST, 0b01100000);
break;
case 2: //2
shiftOut(DATA, CLOCK, LSBFIRST, 0b11011010);
break;
case 3: //3
shiftOut(DATA, CLOCK, LSBFIRST, 0b11110010);
break;
case 4: //4
shiftOut(DATA, CLOCK, LSBFIRST, 0b01100110);
break;
case 5: //5
shiftOut(DATA, CLOCK, LSBFIRST, 0b10110110);
break;
case 6: //6
shiftOut(DATA, CLOCK, LSBFIRST, 0b10111110);
break;
case 7: //7
shiftOut(DATA, CLOCK, LSBFIRST, 0b11100000);
break;
case 8: //8
shiftOut(DATA, CLOCK, LSBFIRST, 0b11111110);
break;
case 9: //9
shiftOut(DATA, CLOCK, LSBFIRST, 0b11110110);
break;
case 10: //A
shiftOut(DATA, CLOCK, LSBFIRST, 0b11101110);
break;
case 11: //b
shiftOut(DATA, CLOCK, LSBFIRST, 0b00111110);
break;
case 12: //C
shiftOut(DATA, CLOCK, LSBFIRST, 0b10011100);
break;
case 13: //d
shiftOut(DATA, CLOCK, LSBFIRST, 0b01111010);
break;
case 14: //E
shiftOut(DATA, CLOCK, LSBFIRST, 0b10011110);
break;
case 15: //F
shiftOut(DATA, CLOCK, LSBFIRST, 0b10001110);
break;
case 16: //G
shiftOut(DATA, CLOCK, LSBFIRST, 0b10111100);
break;
case 17: //H
shiftOut(DATA, CLOCK, LSBFIRST, 0b01101110);
break;
case 18: //I
shiftOut(DATA, CLOCK, LSBFIRST, 0b01100000);
break;
case 19: //J
shiftOut(DATA, CLOCK, LSBFIRST, 0b01110000);
break;
case 20: //L
shiftOut(DATA, CLOCK, LSBFIRST, 0b00011100);
break;
case 21: //n
shiftOut(DATA, CLOCK, LSBFIRST, 0b00101010);
break;
case 22: //O
shiftOut(DATA, CLOCK, LSBFIRST, 0b11111100);
break;
case 23: //P
shiftOut(DATA, CLOCK, LSBFIRST, 0b11001110);
break;
case 24: //q
shiftOut(DATA, CLOCK, LSBFIRST, 0b11100110);
break;
case 25: //S
shiftOut(DATA, CLOCK, LSBFIRST, 0b10110110);
break;
case 26: //U
shiftOut(DATA, CLOCK, LSBFIRST, 0b01111100);
break;
//некоторые буквы невозможно отобразить. их нет в списке
>

//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, HIGH);
if(val==26) <
val=-2;
>
delay(1000);
val=val+1;
>

#define CLOCK 13 //SH_CP 11 74СН
#define DATA 12 //DS 14 74СН
#define LATCH 8 //ST_CP 12 74СН

// — распиновка сегментов
byte numberSegments[10] = <
0b11111101, 0b01100000, 0b11011010, 0b11110010, 0b01100110,
0b10110110, 0b10111110, 0b11100000, 0b11111110, 0b11110110,
>;

//настраиваем контакты на выход
pinMode(CLOCK, OUTPUT);
pinMode(DATA, OUTPUT);
pinMode(LATCH, OUTPUT);

//отключаем LATCH (чтобы регистр не ждал данных)
digitalWrite(LATCH, HIGH);
>

void loop() <
for (int i = 0; i <=9; i++)
<
//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, LOW);
shiftOut(DATA, CLOCK, LSBFIRST, numberSegments[i]);
//включаем LATCH (Начинаем общение)
digitalWrite(LATCH, HIGH);
delay(1000);
>
>

Вывод информации на 4 разрядный 7сегментный индикатор при помощи двух 74hc595

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

Здравствуйте!
Для одного из проектов мне потребовались часы на 7 сегментном 4-х разрядном индикаторе и возможность подключить еще ряд внешних исполнительных устройств.
Вариант с LCD мне не подходит. То что находил в интернете не подходит, т.к. либо индикатором заняты все «ноги» Arduino, либо, при использовании 74hc595, регистр ставили на каждый разряд, что я считаю перерасходом микросхем.
В итоге решил делать на двух регистрах — один для генерации символов, другой для переключения разрядов.
После долгих часов оптимизации чужих скетчей у меня получился представленный ниже. В принципе код рабочий, но напрягает то что «засвечиваются» соседние разряды. В принципе жить с этим можно, но охота чтобы все разряды показывали четко те символы какие мне необходимы.
В данный момент вместо часов я подключил переменный резистор, для наглядности, а так же может кому и такое решение подойдет.

Вопрос у меня в следующем — Подскажите, пожалуйста что нужно переделать или добавить для корректного отображения символов.

Схема подключения:


Скетч:

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

напрягает то что «засвечиваются» соседние разряды

Ну, а почему засвечиваются, выяснили?

Предлагаю, например, сэкономить ардуиноноги, и оставить только один выход Latch, на обе 595-е.
Заодно и засвечивание пропадёт, мне кажется.

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

напрягает то что «засвечиваются» соседние разряды

Ну, а почему засвечиваются, выяснили?

Предлагаю, например, сэкономить ардуиноноги, и оставить только один выход Latch, на обе 595-е.
Заодно и засвечивание пропадёт, мне кажется.

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

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

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

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

Да я же подсказал, осталось попробовать. 🙂

Проблема в том, что цифра на индикаторе меняется в один момент времени — в функции Segment(int x),
а номер разряда в другой момент — в функции Razryad(int r).

Чем эти моменты дальше друг от друга, тем больше рассинхронизация разряда и цифры, и соответственно заметнее засветка.

Можно попробовать изменить программу, чтобы строчки digitalWrite(latchPin, HIGH); и digitalWrite(latchPin2, HIGH); выполнялись подряд, и пауза между ними была как можно меньше.

Но в идеале, всё-таки советую оставить один latchPin, для достижения полной синхронности.
А увеличению разрядности это никак не помешает.

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

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

Я, кстати, параллельное расположение менять не предлагаю. Оно ничем не мешает — пусть остаётся, если удобно.

Нужно только объединить у 595-ых сдвиговые входы, и подключить к одному выходу ардуины.

Upd: Не сдвиговые конечно, а входы защёлкивания. Ошибся, извините — ночью советовал. 🙂

  • Войдите или зарегистрируйтесь, чтобы получить возможность отправлять комментарии
Читать еще:  3M field service vacuum cleaner 497ab

Стало интересно сколько и какие внешние устройства предполагается подключить помимо семисегментника.

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

А вообще вот мой код для работы с семисегментным индикатором напрямую без сдвиговых регистров но его не сложно модифицировать под регистры.

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

Стало интересно сколько и какие внешние устройства предполагается подключить помимо семисегментника.

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

в данном варианте вместо PCF8574 целесообразней поставить драйвер семисегментников типа max7219

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

Для семисегиентников есть прекрасный драйвер stled316.

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

О применении max7219 я думал, но не стал использовать по ряду причин:
1. Работают только с индикаторами с общим катодом, а у меня общий анод на всех имеющихся индикаторах 🙁
2. У нас в городе max7219 не купить, а заказывать с китая только партиями не менее 10 штук. Ради 3-4 проектов заказывать 10 микросхем не охота.
3. Для своих нужд посчитал кощунством использовать max7219. Если уж их грузить, то по полной 🙂
4. max7219 в 3 раза дороже 74hc595. 300 рублей (за 10 штук), конечно, не великие деньги, но тем не менее.
5. 74hc595 считаю более распространенным.
. хотя, касательно цены! В данной схеме используются две 74hc595, а значит разница уже не в 3 раза, а с учетом удобства работы с библиотекой для max7219, может оно и действительно вариант правильнее и проще ;). Но не для меня. Если бы не причина №1, то думаю сделалбы на max7219.

Драйвер stled316 и PCF8574 не стал использовать по тем же причинам — недоступность у нас в городе (думаю не только у меня) да и цена куда выше 74hc595.
Еще, просто хотелось понять как работать с 74hc595 🙂

Скорректированная схема:

Итоговый код:

А еще буду очень благодарен, если мне подскажут как информацию в спойлер прятать.

Схема подключения 7-сегментных индикаторов к Arduino

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

Для примера будем выводить на индикаторы количество секунд, прошедших с момента старта работы.

Исходные компоненты

Для эксперимента нам понадобятся:

Принцип работы

Семисегментный индикатор — это просто набор обычных светодиодов в одном корпусе. Просто они выложены восьмёркой и имеют форму палочки-сегмента. Можно подключить его напрямую к Arduino, но тогда будет занято 7 контактов, а в программе будет необходимо реализовать алгоритм преобразования числа из двоичного представления в соответствующие «калькуляторному шрифту» сигналы.

Для упрощения этой задачи существует 7-сегментный драйвер. Это простая микросхема с внутренним счётчиком. У неё есть 7 выходов для подключения всех сегментов (a, b, c, d, e, f, g pins), контакт для сбрасывания счётчика в 0 (reset pin) и контакт для увеличения значения на единицу (clock pin). Значение внутреннего счётчика преобразуется в сигналы (включен / выключен) на контакты a-g так, что мы видим соответствующую арабскую цифру.

На микросхеме есть ещё один выход, обозначенный как «÷10». Его значение всё время LOW за исключением момента переполнения, когда значение счётчика равно 9, а его увеличивают на единицу. В этом случае значением счётчика снова становится 0, но выход «÷10» становится HIGH до момента следующего инкремента. Его можно соединить с clock pin другого драйвера и таким образом получить счётчик для двузначных чисел. Продолжая эту цепочку, можно выводить сколь угодно длинные числа.

Микросхема может работать на частоте до 16 МГц, т.е. она будет фиксировать изменения на clock pin даже если они будут происходить 16 миллионов раз в секунду. На той же частоте работает Arduino, и это удобно: для вывода определённого числа достаточно сбросить счётчик в 0 и быстро инкрементировать значение по единице до заданного. Глазу это не заметно.

Подключение

Сначала установим индикаторы и драйверы на breadboard. У всех них ноги располагаются с двух сторон, поэтому, чтобы не закоротить противоположные контакты, размещать эти компоненты необходимо над центральной канавкой breadboard’а. Канавка разделяет breadboard на 2 несоединённые между собой половины.

Далее, подключим один из драйверов в соответствии с его распиновкой

Контакты 3 и 8 на индикаторе обозначены как «катод», они общие для всех сегментов, и должны быть напрямую соединены с общей землёй.

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

Соединять необходимо сопоставляя распиновку микросхемы (выходы a-g) и распиновку индикатора (входы a-g)

Повторяем процедуру для второго разряда

Теперь вспоминаем о контакте «reset»: нам необходимо соединить их вместе и притянуть к земле через стягивающий резистор. В последствии, мы подведём к ним сигнал с Arduino, чтобы он мог обнулять значение целиком в обоих драйверах.

Также подадим сигнал с «÷10» от правого драйвера на вход «clock» левого. Таким образом мы получим схему, способную отображать числа с двумя разрядами.

Стоит отметить, что «clock» левого драйвера не стоит стягивать резистором к земле, как это делалось для правого: его соединение с «÷10» само по себе сделает сигнал устойчивым, а притяжка к земле может только нарушить стабильность передачи сигнала.

Железо подготовленно, осталось реализовать несложную программу.

Программирование

Подключаем контакт 2 с Arduino к контакту clock младшего (правого) драйвера, контакт 3 — к общему reset’у драйверов; разводим питание; включаем — работает!

Ссылка на основную публикацию
Adblock
detector