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

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

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

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

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

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

2 Відповіді

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

wiring schematic

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

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

Слід зазначити, що очікування виконується без блокування ЦП, шляхом використовуючи техніку, описану в Blink Without Затримка

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();
}

Павло надав посилання на

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

  • Бібліотека керується перериванням переповнення таймера 2. Це має бути забезпечити дуже стійкий час, за ціною одного таймера присвячений цій роботі.
  • Наведений вище код часто залежить від користувача, який запускає refresh_display() достатньо. Це не вимагає виділених апаратних ресурсів, але це не грає добре з програмами, які забирають занадто довго до loop() : it вам не сподобалося, що ви викликаєте delay() .
6
додано
Ось чому я люблю відкритих джерел. Ви можете поділитися робочим навантаженням з рештою світу і створити щось дуже приємне. Який потім знову поширюється з рештою світу :) Ви можете багато чому навчитися від інших розробників, і ці знання будуть наполегливими, а не просто прихований від усіх інших.
додано Автор dotnetengineer, джерело

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

Світлодіодні підключення

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

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

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

Прикро, як це, це також досить корисно.

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

На традиційному світлодіодному пристрої довгий свинець - це (+), анод. Інший провідний - (-) катод.

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

Source: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

Sparkfun

Базова електропроводка

Я не знаю, чи правильно це, тому що я знімав зображення з Інтернету.

Basic LED wiring

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

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

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

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

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

RGB common cathode/anode

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

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

Мультиплексування (декілька цифр, 7 сегментів)

You should check out the tutorial of parallax: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

Parallax 4digit7seg

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

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

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

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

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

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

Діаграма буде більше такою:

enter image description here

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

5
додано