Jak korzystać ze wspólnego 7-segmentowego, 4-cyfrowego wyświetlacza anodowego?

9

Weź to pytanie jako przykład (mojej) odpowiedzi poniżej.

Mam 7-segmentowy, 4-cyfrowy wyświetlacz LED, ale nie mam pojęcia, jak go podłączyć.

Nie rozumiem różnicy między wspólną anodą / katodą i nie mam 2 pinów na diodę LED, co jest dziwne. Całkiem niedawno pytanie o „7-segmentową 4-cyfrową wspólną anodę” zostało usunięte. W tym momencie pisałem odpowiedź.

Mimo to nadal chcę udostępnić moją odpowiedź tobie lub osobie, która go zadała. Sprawdź / zaktualizuj moją odpowiedź, podając więcej informacji. W szczególności, czy ktoś może dodać działający kod, nie mogę w tej chwili.

Paweł
źródło
Po prostu ciekawy. Czy opublikowałeś pytanie, abyś mógł na nie odpowiedzieć?
PhillyNJ,
W rzeczywistości istnieje na to opcja. Jednak komentarze w moim pytaniu opowiadają również o „historii tła”. Odpowiadałem na pytanie, które zostało usunięte. I czułem potrzebę opublikowania mojej odpowiedzi mimo wszystko. Więc tak zrobiłem. Ale to ważna metoda i miałem odpowiedź przed pytaniem. To miało dla mnie sens. Jeśli masz naprawdę dobre pytanie (i odpowiedź), mogę tylko zachęcić cię do zrobienia tego samego, ponieważ może to przydać się komuś w pewnym momencie.
Paul

Odpowiedzi:

7

Jako uzupełnienie odpowiedzi Paula napisałem krótki program pokazujący, jak prowadzić 7-segmentowy 4-cyfrowy wyświetlacz jego postaci:

schemat okablowania

Jest to w rzeczywistości powszechny wyświetlacz katodowy, więc program zakłada, że ​​podobnie jak szczególne okablowanie figury. Interesującą częścią jest refresh_display()funkcja, którą należy okresowo wywoływać. Algorytm wygląda następująco:

  • napędzaj 7 anod odpowiednimi sygnałami dla jednej z cyfr, które chcemy pokazać
  • ustaw HIGHwyjście sterujące katodą tej cyfry przez tranzystor NPN
  • poczekaj 2,5 ms (dla częstotliwości odświeżania 100 Hz)
  • ustawić LOWwyjście sterujące katodą
  • przejdź do następnej cyfry.

Należy zauważyć, że czekanie odbywa się bez blokowania procesora, przy użyciu techniki opisanej w samouczku Arduino Blink Without Delay . Oto program:

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

Paul podał link do samouczka na temat Paralaksy, który sugeruje użycie biblioteki Multiplex7Seg Arduino. Ta biblioteka jest bardziej ogólna niż powyższy przykładowy kod, ponieważ nie przyjmuje założeń dotyczących używanych pinów. Ale duża różnica między biblioteką a tym kodem polega na sposobie zarządzania taktowaniem:

  • Biblioteka jest sterowana przez przerwanie przepełnienia Timera 2. Powinno to zapewnić bardzo stały czas, kosztem poświęcenia jednego timera na to zadanie.
  • Powyższy kod polega na tym, że użytkownik dzwoni refresh_display()wystarczająco często. Nie wymaga dedykowanych zasobów sprzętowych, ale nie działa dobrze z programami, które trwają zbyt długo loop(): nie spodoba ci się dzwonienie delay().
Edgar Bonet
źródło
Dlatego lubię rzeczy typu open source. Możesz dzielić obciążenie pracą z resztą świata i stworzyć coś naprawdę fajnego. Który następnie jest ponownie udostępniany reszcie świata :) Możesz się wiele nauczyć od innych programistów, a ta wiedza będzie trwała i nie tylko ukryta przed wszystkimi innymi.
Paul
Mam na myśli pytanie dotyczące wartości rezystora podstawowego Tranzystora. Mam wielki problem z obliczaniem wartości rezystora. Jaki jest powód zastosowania rezystora 4,7K w czterech tranzystorach 2N2222? Jeśli pojedynczy segment zużywa 10 mA, wówczas maksymalny pobór prądu wynosi 80 mA dla wszystkich segmentów, w tym DP. Jeśli V (BE * sat) = 1,3 V, a I (B) = 15 mA, wystarczy 300 omów. Czy coś jest nie tak z moimi obliczeniami?
maruf
@maruf: Minimalne wymagane I_B to oczekiwane I_C podzielone przez minimalne wzmocnienie tranzystora. Jeśli chcesz 80 mA na kolektorze i oczekujesz wzmocnienia co najmniej 100 (może być optymistyczne, nie sprawdziłem arkusza danych), to potrzebujesz co najmniej 80/100 = 0,8 mA na podstawie. Zatem maksymalną wartością rezystora bazowego jest spadek napięcia na nim (około 5 V - 0,7 V) podzielony przez ten prąd lub około 5,3 kΩ.
Edgar Bonet
5

Spróbuję przeprowadzić Cię przez wszystkie podstawowe diody LED itp. Ponieważ 4-cyfrowe 7-segmentowe wyświetlacze są kombinacją wielu „technik LED”.

Okablowanie diod LED

Diody LED lub diody elektroluminescencyjne to jedna z zabawnych rzeczy Arduino.

Zasadniczo są łatwe w użyciu, zasilają je i zapalą się.

Mogą być denerwujące, ponieważ mają pewną polaryzację, co oznacza, że ​​będą działać tylko wtedy, gdy dobrze je okablujesz. Jeśli odwrócisz napięcie dodatnie i ujemne, nie zaświecą się wcale.

Irytujące, ale jest również bardzo przydatne.

Katoda vs anoda

Na tradycyjnej diodzie LED długim przewodem jest (+), anoda. Drugim tropem jest (-) katoda.

„Lub, jeśli ktoś obetnie nogi, spróbuj znaleźć płaską krawędź na zewnętrznej obudowie diody LED. Pin najbliżej płaskiej krawędzi będzie ujemnym, katodowym pinem.” - Sparkfun

Źródło: https://learn.sparkfun.com/tutorials/polarity/diode-and-led-polarity

Sparkfun

Podstawowe okablowanie

Nie jestem pewien, czy jest to poprawne, ponieważ zgrałem obraz z Internetu.

Podstawowe okablowanie LED

Okablowanie diody LED jest dość łatwe, anoda (+) łączy się z napięciem dodatnim, najlepiej przez rezystor ograniczający prąd. Katoda (-) łączy się z masą (z rezystorem ograniczającym prąd, jeśli nie było go po stronie dodatniej).

Rezystor ograniczający prąd pozwoli uniknąć zwarcia diody LED, uszkadzając diodę LED lub mikrokontroler / Arduino.

Wiele diod LED, matryc, diod RGB

W przypadku wielu diod LED często masz je z dodatnią stroną podłączoną (+), „wspólną anodą” lub wszystkie podłączone do (-) „wspólnej katody”.

Zasadniczo wszystko sprowadza się do tego.

Wspólna katoda / anoda RGB

W przypadku wspólnej katody dostarczasz prąd do pinów, które chcesz mieć.

W przypadku wspólnej anody prąd zatapia się w diodzie LED.

Multipleksowanie (wielocyfrowy, 7-segmentowy)

Powinieneś sprawdzić samouczek paralaksy: http://learn.parallax.com/4-digit-7-segment-led-display-arduino-demo

Parallax 4digit7seg

Kiedy masz dużo diod LED, często mądrze jest je „multipleksować”. Zazwyczaj przechodzisz szybko przez „grupy” diod LED, aby wyglądało na to, że wszystkie świecą jednocześnie.

Zwykle toniesz prąd z kolumny diod LED i doprowadzasz prąd do poszczególnych diod LED z rzędu.

Lub dostarczasz prąd do kolumny diod LED i pochłaniasz prąd z poszczególnych diod LED rzędu.

Abyś mógł wybrać, która kolumna ma zostać aktywowana i które diody LED tej kolumny mają się zaświecić. Szybka zmiana tych kolumn / wierszy umożliwi sterowanie wieloma diodami LED za pomocą znacznie mniejszej liczby pinów.

Są nawet do tego kontrolery wyświetlania, jeśli nie chcesz zajmować się przełączaniem oprogramowania.

Kiedy masz 4-cyfrową, zmultipleksowaną 7-segmentową, wspólną anodę

Schemat będzie mniej więcej taki:

wprowadź opis zdjęcia tutaj

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

Paweł
źródło