Универсальный внешний накопитель для всех iOS-устройств, совместим с PC/Mac, Android
Header Banner
8 800 100 5771 | +7 495 540 4266
c 9:00 до 24:00 пн-пт | c 10:00 до 18:00 сб
0 Comments

Содержание

Управление семисегментными индикаторами по одному проводу

Часто бывает ситуация, когда надо выполнить простую задачу с которой справится даже грошовый контроллер вроде ATTiny12, но вот незадача — нужна индикация, а под какой нибудь семисегментный индикатор придется убить дофига выводов, а их всего восемь, из которых два питание, а один Reset. Можно, конечно, взять просто МК потолще, но мне больше по душе разные схемотехнические извраты. Вот и тут камрад Kalobyte подкинул ссылку на прикольную схему управления тройным (а в перспективе хоть десятерным) семисегментным индикатором по одному проводу.

Индикатор зажигается посредством сдвигового регистра 74HC164, всего таких регистров можно навесить очень много, просто соединив по цепи несколько регистров. Если отбросить RESET, то для проталкивания данных в регистр нужны две линии — Data и Clock. Путем небольшого изврата можно эти две линии обьединить в одну.

Для начала немного теории
Обычная RC цепочка. Отличается тем, что напряжение на конденсаторе не может измениться мгновенно. Время заряда и разряда зависит от емкости кондера и сопротивления резистора. Оценить его можно по постоянной времени

T=R*C , это время за которое заряд изменится примерно втрое (в е=2.7 раз).


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

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

Правильно!
У нас у регистра есть линия данных (Data) и линия строба (Clock). Когда уровень на Clock меняется с нуля на единицу (передний фронт) с линии Data считывается текущий уровень. Их можно разнести по разные стороны RC фильтра. И одни сигналы передавать узкими, другие широкими импульсами.

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

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

Получается вот такая схема:


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

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


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

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

А вот так выглядит осциллограмма реальной передачи

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

Ссылки по теме:

easyelectronics.ru

Пример 9. Четырехразрядный 7-сегментный индикатор [База знаний]

#include <TimerOne.h>

//заняты все цифровые пины от 2 до 13

int a = 7;

int b = 3;

int c = 4;

int d = 5;

int e = 6;

int f = 2;

int g = 8;

int p = 9;

int d4 = 10;

int d3 = 11;

int d2 = 12;

int d1 = 13;

long n = 0;

int x = 100;

int del = 5;

int count = 0;

void setup()

{

  //пины на вывод

  pinMode(d1, OUTPUT);

  pinMode(d2, OUTPUT);

  pinMode(d3, OUTPUT);

  pinMode(d4, OUTPUT);

  pinMode(a, OUTPUT);

  pinMode(b, OUTPUT);

  pinMode(c, OUTPUT);

  pinMode(d, OUTPUT);

  pinMode(e, OUTPUT);

  pinMode(f, OUTPUT);

  pinMode(g, OUTPUT);

  pinMode(p, OUTPUT);

 

  Timer1.initialize(100000);

  Timer1.attachInterrupt( add );

}

 

void loop()

{

  clearLEDs();

  pickDigit(0); //включаем первую цифру

  pickNumber((n/1000)); //значение тысячи

  delay(del); //пауза 5мс

 

  clearLEDs();

  pickDigit(1); //включаем вторую цифру

  pickNumber((n%1000)/100); //значение сотни

  delay(del); //пауза 5мс

 

  clearLEDs();

  pickDigit(2); //включаем третью цифру

  pickNumber(n%100/10); //значение десятки

  delay(del); //пауза 5мс

 

  clearLEDs();

  pickDigit(3); //включаем четвертую цифру

  pickNumber(n%10); //значение единицы

  delay(del); //пауза 5мс

}

 

// определение разряда

void pickDigit(int x)

{  

  digitalWrite(d1, HIGH);

  digitalWrite(d2, HIGH);

  digitalWrite(d3, HIGH);

  digitalWrite(d4, HIGH);

 

  switch(x)

  {

    case 0:

    digitalWrite(d1, LOW); //включаем d1

    break;

    case 1:

    digitalWrite(d2, LOW); //включаем d2

    break;

    case 2:

    digitalWrite(d3, LOW); //включаем d3

    break;

    default:

    digitalWrite(d4, LOW); //включаем d4

    break;

  }

}

 

// определение символа (цифры)

void pickNumber(int x)

{

  switch(x)

  {

    default:

    zero();

    break;

    case 1:

    one();

    break;

    case 2:

    two();

    break;

    case 3:

    three();

    break;

    case 4:

    four();

    break;

    case 5:

    five();

    break;

    case 6:

    six();

    break;

    case 7:

    seven();

    break;

    case 8:

    eight();

    break;

    case 9:

    nine();

    break;

  }

}

// очистка

void clearLEDs()

{

  digitalWrite(a, LOW);

  digitalWrite(b, LOW);

  digitalWrite(c, LOW);

  digitalWrite(d, LOW);

  digitalWrite(e, LOW);

  digitalWrite(f, LOW);

  digitalWrite(g, LOW);

  digitalWrite(p, LOW);

}

 

// вывод 0

void zero()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, HIGH);

  digitalWrite(e, HIGH);

  digitalWrite(f, HIGH);

  digitalWrite(g, LOW);

}

 

// вывод 1

void one()

{

  digitalWrite(a, LOW);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, LOW);

  digitalWrite(e, LOW);

  digitalWrite(f, LOW);

  digitalWrite(g, LOW);

}

 

// вывод 2

void two()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, HIGH);

  digitalWrite(c, LOW);

  digitalWrite(d, HIGH);

  digitalWrite(e, HIGH);

  digitalWrite(f, LOW);

  digitalWrite(g, HIGH);

}

// вывод 3

void three()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, HIGH);

  digitalWrite(e, LOW);

  digitalWrite(f, LOW);

  digitalWrite(g, HIGH);

}

 

// вывод 4

void four()

{

  digitalWrite(a, LOW);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, LOW);

  digitalWrite(e, LOW);

  digitalWrite(f, HIGH);

  digitalWrite(g, HIGH);

}

 

// вывод 5

void five()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, LOW);

  digitalWrite(c, HIGH);

  digitalWrite(d, HIGH);

  digitalWrite(e, LOW);

  digitalWrite(f, HIGH);

  digitalWrite(g, HIGH);

}

// вывод 6

void six()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, LOW);

  digitalWrite(c, HIGH);

  digitalWrite(d, HIGH);

  digitalWrite(e, HIGH);

  digitalWrite(f, HIGH);

  digitalWrite(g, HIGH);

}

 

// вывод 7

void seven()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, LOW);

  digitalWrite(e, LOW);

  digitalWrite(f, LOW);

  digitalWrite(g, LOW);

}

 

// вывод 8

void eight()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, HIGH);

  digitalWrite(e, HIGH);

  digitalWrite(f, HIGH);

  digitalWrite(g, HIGH);

}

 

// вывод 9

void nine()

{

  digitalWrite(a, HIGH);

  digitalWrite(b, HIGH);

  digitalWrite(c, HIGH);

  digitalWrite(d, HIGH);

  digitalWrite(e, LOW);

  digitalWrite(f, HIGH);

  digitalWrite(g, HIGH);

}

 

// счетчик

void add()

{

  count ++;

  if(count == 10)

  {

    count = 0;

    n++;

    if(n == 10000)

    {

      n = 0;

    }

  }

}

ampermarket.kz

Схема подключения 7-сегментных индикаторов к 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 несоединённые между собой половины.

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

  • 16 — к рельсе питания: это питание для микросхемы

  • 2 «disable clock» — к рельсе земли: мы его не используем

  • 3 «enable display» — к рельсе питания: это питание для индикатора

  • 8 «0V» — к рельсе земли: это общая земля

  • 1 «clock» — через стягивающий резистор к земле. К этому контакту мы позже подведём сигнал с Arduino. Наличие резистора полезно, чтобы избежать ложного срабатывания из-за окружающих помех пока вход ни к чему не подключен. Подходящим номиналом является 10 кОм. Когда мы соединим этот контакт с выходом Arduino, резистор не будет играть роли: сигнал притянет к земле микроконтроллер. Поэтому если вы знаете, что драйвер при работе всегда будет соединён с Arduino, можете не использовать резистор вовсе.
  • 15 «reset» и 5 «÷10» пока оставим неподключенными, но возьмём на заметку — нам они понадобятся в дальнейшем

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

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

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

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

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

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

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

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

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

7segment.pde
#define CLOCK_PIN 2
#define RESET_PIN 3
 
/*
 * Функция resetNumber обнуляет текущее значение
 * на счётчике
 */
void resetNumber()
{
    // Для сброса на мгновение ставим контакт
    // reset в HIGH и возвращаем обратно в LOW
    digitalWrite(RESET_PIN, HIGH);
    digitalWrite(RESET_PIN, LOW);
}
 
/*
 * Функция showNumber устанавливает показания индикаторов
 * в заданное неотрицательное число `n` вне зависимости
 * от предыдущего значения
 */
void showNumber(int n)
{
    // Первым делом обнуляем текущее значение
    resetNumber();
 
    // Далее быстро «прокликиваем» счётчик до нужного
    // значения
    while (n--) {
        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);
}

Результат

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

wiki.amperka.ru

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

Их конструкция и особенности

Наверняка вы уже видели индикаторы – "восьмёрки". Это и есть семисегментный светодиодный индикатор, который служит для отображения цифр от 0 до 9, а также децимальной точки (DP – Decimal point) или запятой.

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

В зависимости от модели сборка может состоять из 1 – 4 семисегментных групп. Например, индикатор АЛС333Б1 состоит из одной семисегментной группы, которая способна отображать всего лишь одну цифру от 0 до 9.

А вот светодиодный индикатор KEM-5162AS уже имеет две семисегментных группы. Он является двухразрядным. Далее на фото показаны разные светодиодные семисегментные индикаторы.

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

Также существуют индикаторы с 4-мя семисегментными группами – четырёхразрядные (на фото – FYQ-5641BSR-11). Их можно использовать в самодельных электронных часах.

Четырёхразрядный индикатор

Как обозначаются семисегментные индикаторы на схемах?

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

Обозначение семисегментного индикатора на принципиальных схемах

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

Особенности семисегментных индикаторов.

Несмотря на кажущуюся простоту этой детали и у неё есть особенности.

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

Вот, например, цоколёвка уже знакомого нам 4-ёх разрядного индикатора FYQ-5641BSR-11.

Цоколёвка семисегментного индикатора FYQ-5641BSR

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

Кроме небольших индикаторов есть большие и даже очень большие. Их можно увидеть в общественных местах, обычно в виде настенных часов, термометров, информеров.

Чтобы увеличить размеры цифр на табло и одновременно сохранить достаточную яркость каждого сегмента, используется несколько светодиодов, включенных последовательно. Вот пример такого индикатора – он умещается на ладони. Это FYS-23011-BUB-21.

Индикатор FYS-23011-BUB-21

Один его сегмент состоит из 4 светодиодов, включенных последовательно.

Цоколёвка индикатора FYS-23011

Чтобы засветить один из сегментов (A, B, C, D, E, F или G), нужно подать на него напряжение в 11,2 вольта (2,8V на каждый светодиод). Можно и меньше, например, 10V, но яркость тоже уменьшится. Исключение составляет децимальная точка (DP), её сегмент состоит из двух светодиодов. Для неё нужно всего 5 - 5,6 вольт.

Работа семисегментного индикатора на светодиодах

Также в природе встречаются двухцветные индикаторы. В них встраиваются, например, красные и зелёные светодиоды. Получается, что в корпус встроено как бы два индикатора, но со светодиодами разного цвета свечения. Если подать напряжение на обе цепи светодиодов, то можно получить жёлтый цвет свечения сегментов. Вот схема соединений одного из таких двухцветных индикаторов (SBA-15-11EGWA).

Двухцветный семисегментный индикатор

Если коммутировать выводы 1 (RED) и 5 (GREEN) на "+" питания через ключевые транзисторы, то можно менять цвет свечения отображаемых чисел с красного на зелёный. А если же одновременно подключить выводы 1 и 5, то цвет cвечения будет оранжевым. Вот так можно баловаться с индикаторами Двухцветный семисегментный индикатор.

Управление семисегментными индикаторами.

Для управления семисегментными индикаторами в цифровых устройствах используют регистры сдвига и дешифраторы. Например, широко распространённый дешифратор для управления индикаторами серии АЛС333 и АЛС324 – микросхема К514ИД2 или К176ИД2. Вот пример.

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

Для управления большими семисегментными индикаторами, такими как, FYS-23011-BUB-21 применяются специализированные драйверы, например, микросхема MBI5026.

Что внутри семисегментного индикатора?

Ну и немного вкусненького. Любой электронщик не был бы таковым, если бы не интересовался "внутренностями" радиодеталей. Вот что внутри индикатора АЛС324Б1.

Индикатор АЛС324 в разобранном виде

Чёрные квадратики на основании – это кристаллы светодиодов. Тут же можно разглядеть золотые перемычки, которые соединяют кристалл с одним из выводов. К сожалению, этот индикатор уже работать не будет, так как были оборваны как раз эти самые перемычки Индикатор АЛС324 в разобранном виде. Но зато мы можем посмотреть, что скрывается за декоративной панелькой табло.

Главная &raquo Радиоэлектроника для начинающих &raquo Текущая страница

Также Вам будет интересно узнать:

 

go-radio.ru

Семисегментный индикатор | Принцип работы, виды, как проверить

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

Как все начиналось

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

Nixie2

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

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

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

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

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

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

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

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

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

Что получается в итоге? Каждая полоска на семисегментном индикаторе засвечивается светодиодом или группой светодиодов. В результате, засветив определенные сегменты, мы можем вывести цифру от 0 и до 9, а также буквы и символы.

Виды и обозначение на схеме

Существуют одноразрядные, двухразрядные, трехразрядные и четырехразрядные семисегментные индикаторы. Более четырех разрядов я не встречал.

семисегментный индикатор одноразрядныйсемисегментный индикатор двухразрядный

семисегментный индикатор трехразрядныйсемисегментный индикатор четырехразрядный

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

семисегментный индикатор обозначение на схемах

В действительности же, помимо основных выводов, каждый семисегментный индикатор также имеет общий вывод с общим анодом (ОА) или общим катодом (ОК)

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

Внутренняя схема семисегментного индикатора с общим анодом будет выглядеть вот так:

семисегментный индикатор внутреннее строение с общим анодом

а с общим катодом вот так:

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

Если семисегментный индикатор у нас с общим анодом (ОА), то в схеме мы должны на этот вывод подавать “плюс” питания, а если с общим катодом (ОК) – то “минус”  или землю.

Как проверить семисегментный индикатор

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

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

Как вы видите ниже на фото, у нас загорелся проверяемый сегмент. Таким же образом проверяем и другие сегменты. Если все сегменты горят, то такой индикатор целый и его можно использовать в своих разработках.

 

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

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

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

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

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

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

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

www.ruselectronic.com

Программирование Arduino урок 12 — семисегментный индикатор часть 1

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

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

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

Еще одно существенное отличие, что выделяет данный индикатор на фоне простых светодиодов. У него общий катод (вернее две равноценные ножки 3 и 8, на который заведен катод). Достаточно всего лишь соединить один из катодов с землей (GND). Аноды у всех элементов индикатора индивидуальные.

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

Кроме отличий между простыми светодиодами и 7-сегментными индикаторами, есть и общие черты. Например: индикаторы, как и светодиоды, можно смонтировать в ряд (последовательность) для отображения двух-, трёх-, четырехзначных чисел (разрядов). Однако не советую сильно заморачиваться по поводу самостоятельной сборки сегментных наборов. В продаже «рядом» с одноразрядными индикаторами, продаются и многоразрядные.

Надеюсь, вы не забыли об необходимости использования токоограничивающих резисторов при подключении светодиодов. Это же относится и к индикаторам: на каждый элемент индикатора должен быть подключен свой резистор. 8 элементов ( 7 + 1) – 8 резисторов.

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

Принципиальная схема

Как говорил ранее, для того, чтобы включить сегмент «А» подключим к любому общему контакту (3 или 8) «землю», а на вывод 7 подадим 5В питания. Если индикатор с общим анодом, то на анод подаём 5В, а на вывод сегмента «землю»!

Соберём тестовый стенд. Соединяем провода по порядку, начиная с первой ножки, которая идёт на 2-й вывод платы Ардуино. Землю подключим к 8 выводу индикатора.

После того, как стенд собран можно приступать к написанию прошивки.

Для проверки индикатора запустим написанную программу. Выберем элемент «А» и помигаем им.


Теперь помигаем цифрой 2. Для этого включим еще несколько элементов.

Чтобы вывести одну цифру, нужно написать n-число строчек кода. Затруднительно, не находите.

Есть другой путь. Для того, чтобы вывести любую цифру на индикаторе, сначала её нужно представить в виде определенной последовательности бит.

Таблица соответствия.

 

Если у дисплея общий анод, то 1 нужно заменить на 0, а 0 – на 1!

Столбец hex – представление цифры в байтовом виде (более детально поговорим об этом во второй части).

Число в двоичной системе счисления записывается следующим образом: 0b00000000. 0b – двоичная система. Нули означают, что все светодиоды выключены.

При подключении мы задействовали выводы с 2 по 9. Чтобы включить 2 вывод записываем в него единицу = 0b00000001. За точку отвечает четвёртый бит справа. За чёрточку посередине индикатора отвечает самый последний бит.

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

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

Примечание: функция bitRead() считывает состояние указанного бита и возвращает значение состояния (0 или 1). bitRead(x, n) где, x — число, бит которого необходимо считать; n — номер бита, состояние которого необходимо считать. Нумерация начинается с младшего значащего бита (крайнего правого) с номером 0.

И в завершении первой части напишем небольшой счетчик.

lesson_14_0

На этом всё! Продолжении следует!


ПОДЕЛИТЕСЬ С ДРУЗЬЯМИ!

About alexlevchenko
Ценю в людях честность и открытость. Люблю мастерить разные самоделки. Нравится переводить статьи, ведь кроме того, что узнаешь что-то новое - ещё и даришь другим возможность окунуться в мир самоделок.

mozgochiny.ru

7-сегментный индикатор + драйвер MAX7219 = минимальный дисплей для Arduino

Что-то давно не было обзоров про Arduino-мелочевку.
Сегодня дошли руки до этих деталек и решил их «обозреть»

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

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

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

Если подключать такой индикатор напрямую к микроконтроллеру — тратится очень много дискретных выходов. Для подключения семисегментных и матричных индикаторов по 3-м проводам компания MAXIM разработала контроллеры MAX7219/MAX7221. Вот об этой связке будет мой обзор.

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


Я такой тоже использовал в одном из своих проектов, но мне не понравились большие габариты дисплея (особенно по высоте).

Для создания универсального контроллера для своего «Умного дома» приобрел индикаторы и микросхемы россыпью.

Итак были приобретены
7-сегментный четырех-разрядные LED индикаторы с общим катодом и высотой цифр 0.4"

Контроллер 8-сегментного индикатора MAX7219 в корпусе DIP24

Индикаторы приехали в Пермь за 33 дня. Были упакованы в простой мягкий пакет. Ножки воткнуты в кусок пенопласта. Почта России их пощадила:

Размеры 40x16. Размер цифры около 10мм


Количество ножек — 12: 7 сегментов/анодов + точка-анод + 4 общих катода по числу разрядов
Шаг между ножками 2.54мм

Даташит нашел только на аналогичный индикатор

Распиновка ножек индикатора

Драйвера MAX7219 приехали за 35 дней тоже в мелком пакете, наколотые на паролонину.

Даташит на MAX7219/7221
Данные микросхемы работают с индикаторами, имеющими общий катод. К одной микросхеме можно подцепить 8 разрядов. Сами микросхемы 7219 можно цеплять друг к другу каскадом. Еще драйвера MAX7219 можно использовать для работы с матричными светодиодными индикаторами 8x8 С микроконтроллером соединяются по 3-х проводному SPI интерфейсу.

Пора теперь собрать вместе индикатор и его драйвер

Так как я делал только прототип микроконтроллера — то собрал все навесным монтажом на макетной плате.

На той же макетке установлен микроконтроллер ATMEGA 328P-PU из этого обзора и NRF24L01 mini из другого моего обзора.

Миниатюрный блок питания и корпус тоже были приобретены ранее на ТАОБАО

Для монтажа мне очень понравился китайский тефлоновый провод сечением 0.1мм. Разделывается он лучше, чем советский МГТФ и изоляция практически не плавится от паяльника.

Монтаж, конечно, не очень аккуратный, но для отладки прототипа сойдет

Плату подключил через переходник USB/RS232, который ранее использовал при программировании Arduino Pro Mini

Готовый прототип контроллера

Следующий шаг — изготовление контроллера на печатной плате.

Выводы:
Связка индикаторы + драйверы вполне рабочая.

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

Прочитать про мой «Умный дом» можно в моем блоге

mysku.ru

Отправить ответ

avatar
  Подписаться  
Уведомление о