Як використовувати загальний 7-сегментний 4-значний дисплей анода?


9

Будь ласка, візьміть це питання як приклад до (власної) відповіді нижче.

У мене є 7-сегментний, 4-значний світлодіодний дисплей, але я не маю уявлення про те, як його провести.

Я не розумію різниці між загальним анодом / катодом, і у мене немає 2-х контактів на світлодіод, що дивно. Зовсім недавно питання про "7-сегментний 4-значний загальний анод" видалено. В той самий момент я набирав відповідь.

Хоча я все одно хочу поділитися своєю відповіддю з вами, або людиною, яка її запитала. Будь ласка, підтвердьте / оновіть мою відповідь, щоб отримати більше інформації. Зокрема, хтось може додати робочий код, я зараз не можу.


Просто цікаво. Ви розмістили запитання, щоб відповісти на нього?
PhillyNJ

Насправді є варіант для цього. Однак коментарі до мого запитання також розповідають про "фонову історію". Я відповідав на запитання, яке видалили. І я відчув потребу опублікувати свою відповідь ніколи. Так так, я зробив. Але це дійсний метод, і я мав відповідь перед питанням. Тож це мало сенс для мене. Якщо у вас справді хороший запитання (і відповідь), я можу лише заохотити вас зробити те саме, оскільки це може бути корисним для когось у якийсь момент.
Павло

Відповіді:


7

Як додаток до відповіді Павла, я написав коротку програму, щоб показати, як керувати 7-сегментним 4-значним відображенням його фігури:

електропроводка схематична

Це насправді загальний катодний дисплей, тому програма передбачає це, як і особливу проводку фігури. Цікава частина - це refresh_display()функція, яку слід періодично називати. Алгоритм такий:

  • навести 7 анодів з відповідними сигналами для однієї з цифр, яку ми хочемо показати
  • встановити HIGHвихід, який керує катодом цієї цифри через транзистор NPN
  • зачекайте 2,5 мс (для частоти оновлення 100 Гц)
  • встановити LOWкатодний керуючий вихід
  • перейти до наступної цифри.

Слід зазначити, що очікування відбувається без блокування процесора, використовуючи методику, описану в підручнику Blink Without Delay Arduino. Ось програма:

const int NB_DIGITS     = 4;  // 4-digit display
const int FIRST_ANODE   = 2;  // anodes a..g on pins 2..8
const int FIRST_CATHODE = 9;  // cathodes, right to left, on pins 9..12

// Digits to display, from right to left.
uint8_t digits[NB_DIGITS];

// Set all the used pins as outputs.
void init_display()
{
    for (int i = 0; i < 7; i++)
        pinMode(FIRST_ANODE + i, OUTPUT);
    for (int i = 0; i < NB_DIGITS; i++)
        pinMode(FIRST_CATHODE + i, OUTPUT);
}

// This should be called periodically.
void refresh_display()
{
    // Our 7-segment "font".
    static const uint8_t font[10] = {
        //abcdefg
        0b1111110, // 0
        0b0110000, // 1
        0b1101101, // 2
        0b1111001, // 3
        0b0110011, // 4
        0b1011011, // 5
        0b1011111, // 6
        0b1110000, // 7
        0b1111111, // 8
        0b1111011  // 9
    };

    // Wait for 2.5 ms before switching digits.
    static uint32_t last_switch;
    uint32_t now = micros();
    if (now - last_switch < 2500) return;
    last_switch = now;

    // Switch off the current digit.
    static uint8_t pos;
    digitalWrite(FIRST_CATHODE + pos, LOW);

    // Set the anodes for the next digit.
    pos = (pos + 1) % NB_DIGITS;
    uint8_t glyph = font[digits[pos]];
    for (int i = 0; i < 7; i++)
        digitalWrite(FIRST_ANODE + i, glyph & 1 << (6-i));

    // Switch digit on.
    digitalWrite(FIRST_CATHODE + pos, HIGH);
}

/***********************************************************************
 * Example usage.
 */

void setup()
{
    init_display();
}

void loop()
{
    uint32_t now = millis();

    // Change the number displayed every second.
    static uint32_t last_change;
    if (now - last_change >= 1000) {
        digits[3] = digits[2];
        digits[2] = digits[1];
        digits[1] = digits[0];
        digits[0] = (digits[0] + 1) % 10;
        last_change = now;
    }

    refresh_display();
}

Пол надав посилання на підручник з Parallax, який пропонує використовувати бібліотеку Multiplex7Seg Arduino. Ця бібліотека є більш загальною, ніж наведений вище приклад, оскільки вона не робить припущень щодо використаних штифтів. Але велика різниця між бібліотекою та цим кодом полягає в тому, як керуються таймінгами:

  • Бібліотека керується переривкою переповнення Timer 2. Це повинно забезпечити дуже стійкий термін, за рахунок того, щоб один таймер був присвячений цій роботі.
  • Код, описаний вище, покладається на те, що користувач дзвонить refresh_display()досить часто. Для цього не потрібні спеціальні апаратні ресурси, але він не дуже добре грає з програмами, які займають занадто багато часу loop(): вам не сподобається дзвінок delay().

Ось чому мені подобаються речі з відкритим кодом. Ви можете поділитися навантаженням з іншим світом і створити щось справді приємне. Що потім знову ділиться з рештою світу :) Ви можете багато чого навчитися у інших розробників, і що знання будуть стійкими, а не просто прихованими від усіх інших.
Пол

У мене є питання щодо значення базового резистора Транністора. У мене велика проблема з розрахунком значення резистора. У чому причина використання резистора 4,7K в чотирьох транзисторах 2N2222? Якщо один сегмент споживає 10 мА, то для всіх сегментів, включаючи DP, буде мати максимальний струм 80mA. Якщо V (BE * sat) = 1,3v і I (B) = 15mA, то 300ohm буде достатньо. Чи є щось неправильно з моїм розрахунком?
маруф

@maruf: Мінімальний необхідний I_B - очікуваний I_C, поділений на мінімальний коефіцієнт посилення транзистора. Якщо ви хочете 80 мА на колекторі і очікуєте коефіцієнт посилення принаймні 100 (це може бути оптимістично, я не перевіряв таблицю даних), тоді вам потрібно щонайменше 80/100 = 0,8 мА на базі. Тоді максимальне значення базового резистора - це падіння напруги на ньому (приблизно 5 В - 0,7 В), поділене на цей струм, або приблизно 5,3 кОм.
Едгар Бонет

5

Я спробую ознайомитись з усіма основними показниками світлодіодів тощо. Оскільки 4-значний 7-сегментний дисплей - це комбінація декількох "світлодіодних методів".

Світлодіодні електропроводки

Світлодіоди або світлодіоди - одна з цікавих речей Arduino.

По суті, вони прості у використанні, живлять їх, і вони загоряться.

Вони можуть бути роздратованими, тому що вони мають певну полярність, тобто вони працюватимуть лише тоді, коли ви їх правильно підключите. Якщо повернути позитивну та негативну напругу, вони взагалі не загоряться.

Як це дратує, це теж досить корисно.

Катод проти анода

У традиційного світлодіода довгим відведенням є (+), анод. Інший ведучий - катод (-).

"Або, якщо у когось обрізані ноги, спробуйте знайти плоскі кромки на зовнішньому корпусі світлодіода. Штифтом, найближчим до плоского краю, буде негативний катодний штифт." - Спаркфун

Джерело: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

Sparkfun

Основна електропроводка

Я не впевнений, чи правильно це, оскільки я вирвав зображення з Інтернету.

Основна світлодіодна проводка

Підключити світлодіод досить просто, анод (+) підключається до позитивної напруги, бажано через резистор, що обмежує струм. Катод (-) підключається до землі (за допомогою обмежувального струму резистора, якщо у вас його не було на позитивній стороні).

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

Кілька світлодіодів, матриць, RGB світлодіодів

З декількома світлодіодами у вас часто є підключена позитивна сторона (+), "загальний анод" або всі підключені до (-) "загального катода".

В основному це зводиться до цього.

RGB загальний катод / анод

Для загального катода ви подаєте струм на штирі, які ви хочете мати.

Для загального анода ви пропускаєте струм через світлодіод.

Мультиплексування (багатозначний, 7-сегментний)

Слід переглянути підручник паралакса: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

Паралакс 4дигіт7сег

Коли у вас багато світлодіодів, їх часто розумно "мультиплексувати". Зазвичай ви швидко проходите через "групи" світлодіодів, щоб виглядати, що вони все одночасно.

Зазвичай ви занурюєте струм зі стовпця світлодіодів та подаєте струм на окремі світлодіодні ряди.

Або ви подаєте струм на стовпчик світлодіодів та потоковий струм від окремих світлодіодів ряду.

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

Для цього навіть є контролери дисплея, якщо ви не хочете піклуватися про перемикання програмного забезпечення.

Отже, коли у вас є 4-значний, мультиплексований 7 сегмент, загальний анод

Діаграма буде приблизно такою:

введіть тут опис зображення

http://www.mytutorialcafe.com/Microcontroller%20Application%20C%207segmen.htm

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.