Wskaźnik 6-cyfrowy, 7-segmentowy. Arduino i czterocyfrowy wskaźnik siedmiosegmentowy. Jak sprawdzić wskaźnik siedmiosegmentowy

Wskaźnik 6-cyfrowy, 7-segmentowy.  Arduino i czterocyfrowy wskaźnik siedmiosegmentowy.  Jak sprawdzić wskaźnik siedmiosegmentowy
Wskaźnik 6-cyfrowy, 7-segmentowy. Arduino i czterocyfrowy wskaźnik siedmiosegmentowy. Jak sprawdzić wskaźnik siedmiosegmentowy


Schemat podłączenia jednocyfrowego wskaźnika siedmiosegmentowego
Schemat podłączenia wielocyfrowego wskaźnika siedmiosegmentowego

Cyfrowe urządzenie wyświetlające informacje. To jest najbardziej prosta implementacja wskaźnik, który może zostać wyświetlony cyfry arabskie. Do wyświetlania liter służą bardziej złożone wskaźniki wielosegmentowe i matrycowe.

Jak sama nazwa wskazuje, składa się z siedmiu elementów wyświetlacza (segmentów), które włączają się i wyłączają oddzielnie. Włącznie z nimi różne kombinacje, z nich możesz tworzyć uproszczone obrazy cyfr arabskich.
Segmenty są oznaczone literami od A do G; ósmy segment - kropka dziesiętna (przecinek dziesiętny, DP), przeznaczony do wyświetlania liczb ułamkowych.
Czasami na wskaźniku siedmiosegmentowym wyświetlane są litery.

Tam są różne kolory, zwykle kolory to biały, czerwony, zielony, żółty i niebieski. Ponadto mogą mieć różne rozmiary.

Ponadto wskaźnik LED może być jednocyfrowy (jak na powyższym rysunku) lub wielocyfrowy. Zasadniczo w praktyce stosuje się jedno-, dwu-, trzy- i czterocyfrowe wskaźniki LED:

Oprócz dziesięciu cyfr wskaźniki siedmiosegmentowe mogą wyświetlać litery. Ale niewiele liter ma intuicyjną reprezentację siedmiosegmentową.
W języku łacińskim: wielkie A, B, C, E, F, G, H, I, J, L, N, O, P, S, U, Y, Z, małe litery a, b, c, d, e, g , h, i, n, o, q, r, t, u.
Cyrylicą: A, B, V, G, g, E, i, N, O, o, P, p, R, S, s, U, Ch, Y (dwie cyfry), b, E/Z.
Dlatego wskaźniki siedmiosegmentowe służą wyłącznie do wyświetlania prostych komunikatów.

Łącznie siedmiosegmentowy wskaźnik LED może wyświetlić 128 znaków:

Typowy wskaźnik LED ma dziewięć przewodów: jeden idzie do katod wszystkich segmentów, a pozostałych osiem do anody każdego segmentu. Ten schemat nazywa się „obwód wspólnej katody”, istnieją również schematy ze wspólną anodą(wtedy jest odwrotnie). Często na różnych końcach podstawy nie wykonuje się jednego, ale dwa wspólne zaciski - upraszcza to okablowanie bez zwiększania wymiarów. Są też tzw. „uniwersalne”, ale ja osobiście z takimi się nie spotkałem. Ponadto istnieją wskaźniki z wbudowanym rejestrem przesuwnym, co znacznie zmniejsza liczbę pinów portu mikrokontrolera, ale są one znacznie droższe i rzadko stosowane w praktyce. A ponieważ ogromu nie da się ogarnąć, na razie nie będziemy rozważać takich wskaźników (ale są też wskaźniki o dużym duża ilość segmenty, macierz).

Wielocyfrowe wskaźniki LED często działają na zasadzie dynamicznej: wyjścia segmentów o tej samej nazwie wszystkich cyfr są ze sobą połączone. Aby wyświetlić informację o takim wskaźniku, układ sterujący musi cyklicznie dostarczać prąd do zacisków wspólnych wszystkich cyfr, natomiast do zacisków segmentów doprowadzany jest prąd w zależności od tego, czy dany segment jest zaświecony w danej cyfrze.

Podłączenie jednocyfrowego wskaźnika siedmiosegmentowego do mikrokontrolera

Poniższy schemat pokazuje, jak to zrobić łączy jednocyfrową siódemkę wskaźnik segmentu do mikrokontrolera.
Należy wziąć pod uwagę, że jeśli wskaźnik z WSPÓLNA KATODA, następnie podłączane jest jego wspólne wyjście "ziemia", a segmenty zapalają się w wyniku zasilania jednostka logiczna do wyjścia portu.
Jeśli wskaźnik jest WSPÓLNA ANODA, następnie jest on dostarczany do wspólnego przewodu "plus" napięciem, a segmenty zapalają się poprzez przełączenie wyjścia portu na stan logiczne zero.

Wskazanie w jednocyfrowym wskaźniku LED odbywa się poprzez nałożenie kodu binarnego na piny portu mikrokontrolera odpowiedniej cyfry odpowiedniego poziomu logicznego (dla wskaźników z OK - logiczne, dla wskaźników z OA - logiczne zera).

Rezystory ograniczające prąd może, ale nie musi, być obecny na schemacie. Wszystko zależy od napięcia zasilania dostarczanego do wskaźnika i właściwości techniczne wskaźniki. Jeśli na przykład napięcie dostarczane do segmentów wynosi 5 woltów i są one przeznaczone napięcie robocze 2 wolty, wówczas należy zainstalować rezystory ograniczające prąd (aby ograniczyć przepływający przez nie prąd w celu zwiększenia napięcia zasilania i nie spalić nie tylko wskaźnika, ale także portu mikrokontrolera).
Bardzo łatwo jest obliczyć wartość rezystorów ograniczających prąd, korzystając ze wzoru dziadka Om.
Na przykład charakterystyka wskaźnika jest następująca (zaczerpnięta z arkusza danych):
— napięcie robocze — 2 wolty
— prąd roboczy — 10 mA (=0,01 A)
— napięcie zasilania 5 woltów
Wzór do obliczeń:
R= U/I (wszystkie wartości w tym wzorze muszą być wyrażone w omach, woltach i amperach)
R= (napięcie zasilania - napięcie robocze)/prąd roboczy
R= (5-2)/0,01 = 300 omów

Schemat podłączenia wielocyfrowego siedmiosegmentowego wskaźnika LED Zasadniczo tak samo jak przy podłączeniu wskaźnika jednocyfrowego. Jedyną rzeczą jest to, że w katodach (anodach) wskaźników dodano tranzystory sterujące:

Nie pokazano tego na schemacie, ale pomiędzy podstawami tranzystorów a pinami portu mikrokontrolera należy uwzględnić rezystory, których rezystancja zależy od rodzaju tranzystora (wartości rezystorów są obliczane, ale możesz także spróbować użyć rezystorów o wartości nominalnej 5-10 kOhm).

Wskazanie poprzez wyładowania odbywa się dynamicznie:
— kod binarny odpowiedniej cyfry jest ustawiany na wyjściach portu PB dla 1. cyfry, następnie poziom logiczny jest przykładany do tranzystora sterującego pierwszej cyfry
— kod binarny odpowiedniej cyfry jest ustawiany na wyjściach portu PB dla drugiej cyfry, następnie poziom logiczny jest przykładany do tranzystora sterującego drugiej cyfry
— kod binarny odpowiedniej cyfry jest ustawiany na wyjściach portu PB dla 3. cyfry, następnie poziom logiczny jest przykładany do tranzystora sterującego trzeciej cyfry
- więc w kręgu
W takim przypadku należy wziąć pod uwagę:
— dla wskaźników z OK Zastosowano strukturę tranzystora sterującego NPN(sterowane przez jednostkę logiczną)
- dla wskaźnika z OA- struktura tranzystora PNP(sterowane przez zero logiczne)

Podłączmy siedmiosegmentowy wskaźnik LED do płytki Arduino i nauczmy się nim sterować korzystając z biblioteki Led4Digits.h.

W poprzedniej lekcji szczegółowo opisano mikrokontrolery. Podłączmy taki wskaźnik do płytki Arduino.

Schemat podłączenia wskaźnika do płytki Arduino wygląda następująco.

Zmontowałem go na płytce drukowanej.

Do zarządzania wskaźnikami napisałem bibliotekę Led4Digits.h:

I zapłać.

Biblioteka umożliwia zarządzanie wskaźnikami siedmiosegmentowymi:

  • do czterech cyfr;
  • z dowolnymi wariantami polaryzacji impulsów sterujących (wszystkie);
  • działa w procesie równoległym;
  • pozwala na wyświetlenie na wskaźniku:
    • segmenty każdej kategorii;
    • cyfra każdej cyfry;
    • liczba całkowita 0 ... 9999;
  • aby wyprowadzić liczbę całkowitą, można określić liczbę cyfr;
  • Istnieje tryb pomijania nieistotnych cyfr.

Bibliotekę Led4Digits.h możesz pobrać pod tym linkiem:

I zapłać. Tylko 40 rubli. miesięcznie za dostęp do wszystkich zasobów serwisu!

Sposób instalacji jest napisany w .

Nie będę podawać tekstów źródłowych. Można je sprawdzić w plikach biblioteki. Jak zwykle nie brakuje tam komentarzy. Opiszę szczegółowo, na przykładach, jak korzystać z biblioteki.

Biblioteka sterowania LED dla Arduino Led4Digits.

Oto opis klasy. Podałem tylko publiczne metody i właściwości.

klasa Led4Digits (
publiczny:
cyfra bajtu; // kody kontrolne segmentu bitowego
nieważna regeneracja(); // regeneracji, metodę należy wywoływać regularnie
void tetradToSegCod(wykop bajtu, tetrad bajtu); // konwersja tetradu na kody segmentowe
wartość logiczna (bez znaku int wartość, bajt cyfraNum, bajt pusty); // wyjście całkowite



} ;

Konstruktor.

Led4Digits (typ bajtuLed, bajt cyfraPin0, bajt cyfraPin1, bajt cyfraPin2, bajt cyfraPin3,
bajt segPinA, bajt segPinB, bajt segPinC, bajt segPinD,
bajt segPinE, bajt segPinF, bajt segPinG, bajt segPinH);

typLed Ustawia polaryzację impulsów sterujących dla sygnałów wyboru bitów i segmentów. Obsługuje dowolne schematy połączeń ().

typLed Wybór kategorii Wybór segmentu Typ obwodu
0 -_- -_- Wspólna anoda z klawiszami wyboru rozładowania
1 _-_ -_- Wspólna anoda
2 -_- _-_ Wspólna katoda
3 _-_ _-_ Wspólna katoda z klawiszami wyboru rozładowania

cyfraPin0...cyfrowaPin3– wyjścia do wyboru cyfr. Jeżeli digitalPin = 255, to cyfra jest wyłączona. Pozwala to na podłączenie wskaźników z mniejszą liczbą cyfr. digitalPin0 – dolna (prawa) cyfra.

segPinA...segPinH– wyjścia sterujące segmentem.

Na przykład,

oznacza: wskaźnik typu 1; wyjścia rozładowania 5,4,3,2; wyjścia segmentów 6,7,8,9,10,11,12,13.

metoda void regen().

Metodę należy wywoływać regularnie w procesie równoległym. Regeneruje obraz na kierunkowskazach. Czas cyklu regeneracji jest równy okresowi wywołania metody pomnożonemu przez liczbę bitów.

Na przykład,

// obsługa przerwań 2 ms
przerwanie licznika czasu() (
disp.regen(); // regeneracja wskaźnika
}

Tablica cyfr bajtów

Zawiera stan segmentów. cyfra jest najmniej znaczącym bitem, najmniej znaczącym bitem cyfry jest segment „A” najmniej znaczącego bitu. Stan bitu równy 1 oznacza, że ​​segment jest zapalony.

Na przykład,

cyfra = B0000101;

oznacza, że ​​w drugiej cyfrze świecą się segmenty „A” i „C”.

Przykład programu, który sekwencyjnie podświetla wszystkie segmenty każdej cyfry.

// segmenty biegowe
#włączać
#włączać

//
Wyświetlacz Led4Cyfr (1, 5,4,3,2, 6,7,8,9,10,11,12,13);

unieważnij konfigurację() (
przerwanie timera 2 ms
MsTimer2::start(); // włączyć przerwanie
}

pusta pętla() (
for (int i = 0; tj< 32; i++) {
if (i == 0) disp.cyfra= 1;
else if (i == 8) disp.cyfra= 1;
else if (i == 16) disp.cyfra= 1;
else if (i == 24) disp.cyfra= 1;
w przeciwnym razie(
disp.cyfra = disp.cyfra<< 1;
disp.cyfra = disp.cyfra<< 1;
disp.cyfra = disp.cyfra<< 1;
disp.cyfra = disp.cyfra<< 1;
}
opóźnienie(250);
}
}

//obsługa przerwań 2 ms
przerwanie licznika czasu() (
disp.regen(); // regeneracja wskaźnika
}

W tablicy cyfr 1 zostaje przesunięta i wskaźniki to pokazują.

Metoda void tetradToSegCod(byte dig, byte tetrad)

Metoda umożliwia wyświetlanie cyfr i liter kodu szesnastkowego w postaci pojedynczych cyfr. Ma argumenty:

  • kop – cyfra numer 0...3;
  • tetrad – kod znaku dziesiętnego. Kod 0 wyświetli cyfrę „0”, kod 1 – cyfrę „1”, kod 14 – literę „E”.

Na przykład,

tetrad(2, 7);

wyświetli cyfrę „7” jako trzecią cyfrę.

Przykład programu zmieniającego po kolei znaki w każdej cyfrze.

// numery jeden po drugim
#włączać
#włączać

// wskaźnik typu 1; wyjścia rozładowania 5,4,3,2; wyjścia segmentu 6,7,8,9,10,11,12,13
Wyświetlacz Led4Cyfr (1, 5,4,3,2, 6,7,8,9,10,11,12,13);

unieważnij konfigurację() (
MsTimer2::set(2, przerwanie timera); // przerwanie timera 2 ms
MsTimer2::start(); // włączyć przerwanie
}

pusta pętla() (
for (int i = 0; tj< 64; i++) {
disp.tetradToSegCod(i>>4, i);
opóźnienie(250);
}
}

// obsługa przerwań 2 ms
przerwanie licznika czasu() (
disp.regen(); // regeneracja wskaźnika
}

Metoda logiczna print(wartość int bez znaku, bajt cyfraNum, bajt pusty)

Metoda wyświetla na wskaźnikach liczbę całkowitą. Konwertuje liczbę binarną na BCD dla każdej cyfry. Ma argumenty:

  • wartość – liczba wyświetlana na wskaźniku.
  • digitalNum – liczba cyfr numeru. Nie należy tego mylić z liczbą cyfr wskaźnikowych. Możesz chcieć wyświetlić liczbę na 2 cyfrach i wyświetlić znaki na pozostałych dwóch za pomocą cyfry.
  • puste – znak pominięcia cyfr nieistotnych. puste=0 oznacza, że ​​liczba powinna być wyświetlana wyłącznie z zerami. Liczba „7” będzie wyglądać jak „0007”. Jeśli wartość pusta jest różna od 0, nieistotne zera zostaną pominięte.

Jeżeli wartość liczby przekroczy dopuszczalną liczbę dla wybranej liczby cyfr (digitNum), wówczas funkcja wyświetli na wskaźniku „---” i zwróci wartość false.

Przykład programu generującego liczby.

// numer wyjściowy
#włączać
#włączać

// wskaźnik typu 1; wyjścia rozładowania 5,4,3,2; wyjścia segmentu 6,7,8,9,10,11,12,13
Wyświetlacz Led4Cyfr (1, 5,4,3,2, 6,7,8,9,10,11,12,13);

unieważnij konfigurację() (
MsTimer2::set(2, przerwanie timera); // przerwanie timera 2 ms
MsTimer2::start(); // włączyć przerwanie
}

pusta pętla() (
for (int i = 0; tj< 12000; i++) {
disp.print(i, 4, 1);
opóźnienie(50);
}
}

// obsługa przerwań 2 ms
przerwanie licznika czasu() (
disp.regen(); // regeneracja wskaźnika
}

Dwie ostatnie metody nie zmieniają stanu segmentu „H” – kropki dziesiętnej. Aby zmienić stan punktu, możesz użyć poleceń:

cyfra |= 0x80; // podświetl przecinek dziesiętny
cyfra &= 0x7f; // zgasić przecinek dziesiętny

Dane wyjściowe do wskaźników liczb ujemnych (int).

Liczby ujemne można wyprowadzać w następujący sposób:

  • Sprawdź znak liczby.
  • Jeśli liczba jest ujemna, wydrukuj znak minus przy najbardziej znaczącej cyfrze i zmień znak liczby na dodatni w funkcji print().
  • Jeśli liczba jest dodatnia, wyłącz bit znaku i wydrukuj liczbę za pomocą funkcji print().

Oto program demonstrujący tę metodę. Wyświetla liczby od -999 do 999.

// wyprowadź liczby ujemne
#włączać
#włączać

// wskaźnik typu 1; wyjścia rozładowania 5,4,3,2; wyjścia segmentu 6,7,8,9,10,11,12,13
Wyświetlacz Led4Cyfr (1, 5,4,3,2, 6,7,8,9,10,11,12,13);

unieważnij konfigurację() (
MsTimer2::set(2, przerwanie timera); // przerwanie timera 2 ms
MsTimer2::start(); // włączyć przerwanie
}

pusta pętla() (

for (int i = -999; tj< 1000; i++) {

Jeśli ja< 0) {
// liczba jest ujemna
disp.cyfra= B01000000; // podpisać -
disp.print(i * -1, 3, 1);
}
w przeciwnym razie(
disp.cyfra= B00000000; // usuń znak
disp.print(i, 3, 1);
}

opóźnienie(50);
}
}

// obsługa przerwań 2 ms
przerwanie licznika czasu() (
disp.regen(); // regeneracja wskaźnika
}

Wyjście na wskaźniki liczb ułamkowych, format zmiennoprzecinkowy.

Istnieje wiele sposobów wyświetlania liczb zmiennoprzecinkowych (zmiennoprzecinkowych) przy użyciu standardowych funkcji języka C. Jest to przede wszystkim funkcja sprint(). Działa bardzo wolno, wymaga dodatkowej konwersji kodów znakowych na binarne kody dziesiętne, trzeba wyodrębnić kropkę ze ciągu znaków. Te same problemy z innymi funkcjami.

Ja stosuję inny sposób wyświetlania wartości zmiennych float na wskaźnikach. Metoda jest prosta, niezawodna i szybka. Sprowadza się do następujących operacji:

  • Liczbę zmiennoprzecinkową mnoży się przez 10 do potęgi odpowiadającej wymaganej liczbie miejsc po przecinku. Jeśli chcesz wyświetlić na wskaźnikach 1 miejsce po przecinku, pomnóż przez 10, jeśli 2, następnie pomnóż przez 100, 3 miejsca po przecinku przez 1000.
  • Następnie liczba zmiennoprzecinkowa jest jawnie konwertowana na liczbę całkowitą (int) i wyświetlana na wskaźnikach za pomocą funkcji print().
  • W żądanej cyfrze umieszczana jest kropka.

Na przykład poniższe linie wyprowadzą zmienną zmiennoprzecinkową z dwoma miejscami po przecinku na siedmiosegmentowe diody LED.

pływak x = 2,12345;

disp.cyfra |= 0x80; //

Mnożymy liczbę przez 100, a stawiając kropkę przy trzeciej cyfrze, wynik dzielimy przez 100.

Oto program, który wyświetla na wskaźnikach liczby zmiennoprzecinkowe od 0,00 do 99,99.

// wyjście zmiennoprzecinkowe
#włączać
#włączać

// wskaźnik typu 1; wyjścia rozładowania 5,4,3,2; wyjścia segmentu 6,7,8,9,10,11,12,13
Wyświetlacz Led4Cyfr (1, 5,4,3,2, 6,7,8,9,10,11,12,13);

unieważnij konfigurację() (
MsTimer2::set(2, przerwanie timera); // przerwanie timera 2 ms
MsTimer2::start(); // włączyć przerwanie
}

pusta pętla() (
pływak x = 0;

for (int i = 0; tj< 10000; i++) {
x += 0,01;

disp.print((int)(x * 100.), 4, 1);
disp.cyfra |= 0x80; // rozświetl punkt trzeciego poziomu

opóźnienie(50);
}
}

//obsługa przerwań 2 ms
przerwanie licznika czasu() (
disp.regen(); // regeneracja wskaźnika
}

Jak widać biblioteka Led4Digits.h znacznie upraszcza pracę z siedmiosegmentowymi wskaźnikami diodowymi (LED) podłączonymi do płytki Arduino. Nie znalazłem analogu takiej biblioteki.

Istnieją biblioteki do pracy z wyświetlaczami LED za pośrednictwem rejestru przesuwnego. Ktoś do mnie napisał, że znalazł bibliotekę współpracującą z wyświetlaczem LED podłączonym bezpośrednio do płytki Arduino. Ale podczas jego używania cyfry wskaźnika świecą nierównomiernie i mrugają.

W przeciwieństwie do swoich odpowiedników, biblioteka Led4Digits.h:

  • Działa jako proces równoległy. W pętli głównej program ładuje dane do określonych zmiennych, które automatycznie wyświetlają się na wyświetlaczu. Wyjście informacyjne i regeneracja wskaźnika następuje w przerwaniu czasowym, niewidocznym dla programu głównego.
  • Cyfry na wyświetlaczu świecą równomiernie, bez mrugania. Właściwość tę zapewnia fakt, że regeneracja następuje w cyklu ściśle określonym przez przerwanie czasowe.
  • Biblioteka ma zwarty kod, wykonuje się szybko i minimalnie ładuje kontroler.

W kolejnej lekcji podłączymy do płytki Arduino jednocześnie wskaźnik LED i matrycę przycisków. Napiszmy bibliotekę dla takiego projektu.

Kategoria: . Możesz dodać go do zakładek.

Od czasu pojawienia się radiotechniki i elektroniki sprzężeniu zwrotnemu z urządzenia elektronicznego i człowieka towarzyszą różne lampki sygnalizacyjne, przyciski, przełączniki i dzwonki (sygnał gotowości kuchenki mikrofalowej – ding!). Niektóre urządzenia elektroniczne dostarczają minimum informacji, bo więcej byłoby niepotrzebne. Na przykład świecąca dioda LED na chińskiej ładowarce do telefonu wskazuje, że ładowarka jest podłączona i otrzymuje zasilanie. Ale są też parametry, w przypadku których wygodniej byłoby podać obiektywną informację. Na przykład temperatura powietrza na zewnątrz lub godzina budzika. Tak, wszystko to można również osiągnąć za pomocą świecących żarówek lub diod LED. Jeden stopień - jedna płonąca dioda lub żarówka. Ile jest stopni, tyle wskaźników się świeci. Liczenie tych świetlików może być rzeczą powszechną, ale znowu, ile takich świateł będzie potrzebnych, aby pokazać temperaturę z dokładnością do jednej dziesiątej stopnia? I ogólnie, jaki obszar zajmą te diody LED i żarówki na urządzeniu elektronicznym?

Praktyczne wyświetlacze siedmiosegmentowe muszą posiadać co najmniej osiem zewnętrznych zacisków przyłączeniowych; siedem z nich zapewnia dostęp do poszczególnych segmentów fotowoltaicznych, a ósmy zapewnia wspólne połączenie wszystkich segmentów. W pierwszym przypadku urządzenie nazywa się siedmiosegmentowym wyświetlaczem ze wspólną anodą; w tym drugim przypadku urządzenie nazywa się siedmiosegmentowym wyświetlaczem ze wspólną katodą.

Aby sterować wyświetlaczem ze wspólną anodą, sterownik musi mieć wyjście o aktywnym niskim poziomie, w którym każdy napęd segmentu jest zwykle wysoki, ale przechodzi w stan niski, aby włączyć segment. Aby sterować wyświetlaczem ze wspólną katodą, sterownik musi mieć aktywne aktywne wyjście.

A na początku XX wieku, wraz z pojawieniem się lamp elektronicznych, pojawiły się pierwsze wskaźniki wyładowania gazu

Za pomocą takich wskaźników możliwe było wyświetlanie informacji cyfrowych cyframi arabskimi. Wcześniej to właśnie te lampy służyły do ​​wykonywania różnych wskazań instrumentów i innych urządzeń elektronicznych. Obecnie elementy wyładowcze prawie nigdy nie są nigdzie używane. Ale retro jest zawsze modne, dlatego wielu radioamatorów kolekcjonuje dla siebie i swoich bliskich wspaniałe zegarki wyładowcze.

Pełne wyjaśnienie tego jest nieco bardziej skomplikowane i wygląda następująco. Gdy napięcie wynosi zero, segment jest faktycznie niewidoczny. Jednakże, gdy napięcie wejściowe jest znacznie dodatnie lub ujemne, segment staje się faktycznie widoczny, ale jeśli napięcie sterujące jest utrzymywane przez dłużej niż kilkaset milisekund, segment może stać się trwale widoczny i nie mieć dalszego znaczenia.

W tych warunkach segment jest wyłączony. Zatem segment objęty jest tymi warunkami. Ta forma napędu jest powszechnie znana jako układ „napędu mostkowego” z podwajaniem napięcia. Kolejność działań schematu jest następująca. Opisany wcześniej prosty system kaskadowy ma poważną wadę polegającą na tym, że wyświetlacz staje się rozmyty w trakcie faktycznego zliczania, stając się stabilny i czytelny dopiero po zakończeniu każdego zliczania i zamknięciu bramki wejściowej. Ten typ wyświetlacza „rozmazany i czytelny” jest bardzo irytujący.

Wady lamp wyładowczych - dużo jedzą. Można dyskutować o trwałości. Na naszej uczelni w dalszym ciągu w pomieszczeniach laboratoryjnych stosujemy mierniki częstotliwości na wyładowarkach gazowych.

Wraz z pojawieniem się diod LED sytuacja uległa radykalnej zmianie. Same diody LED pobierają niewielką ilość prądu. Jeśli umieścisz je w odpowiedniej pozycji, możesz wyświetlić absolutnie każdą informację. Aby podkreślić wszystkie cyfry arabskie, wystarczyło coś siedem (stąd nazwa wskaźnik siedmiosegmentowy) świecące paski LED ułożone w określony sposób:

Rysunek 13 przedstawia ulepszony obwód licznika częstotliwości, który wykorzystuje blokowanie wyświetlacza w celu usunięcia powyższej wady. Ten schemat działa w następujący sposób. Jednocześnie otwiera się bramka wejściowa i liczniki zaczynają zliczać impulsy sygnału wejściowego. Licznik trwa dokładnie jedną sekundę i w tym czasie czterobitowe zatrzaski uniemożliwiają dotarcie sygnału wyjściowego licznika do sterowników wyświetlacza; w tym okresie wyświetlacz pozostaje stabilny.

Po kilku sekundach sekwencja jest powtarzana ponownie, liczniki uruchamiają się ponownie, a następnie zliczają impulsy częstotliwości wejściowej przez jedną sekundę, podczas której wyświetlacz pokazuje w sposób ciągły odczyt poprzedniego zliczenia itp.

Prawie wszystkie takie wskaźniki siedmiosegmentowe dodają również ósmy segment - kropkę, dzięki czemu można pokazać wartość całkowitą i ułamkową dowolnego parametru

Zatem obwód pokazany na rysunku 13 tworzy stabilny wyświetlacz, który jest aktualizowany raz na sekundę; w praktyce rzeczywisty okres zliczania oraz wykres na rysunku 12 można przyjąć w dowolnej dekadzie składającej się z wielu lub części sekund, pod warunkiem, że wyświetlacz wyjściowy jest odpowiednio skalowany.

Należy pamiętać, że trzycyfrowy licznik częstotliwości może wskazywać maksymalne częstotliwości 999 Hz przy zastosowaniu jednosekundowej podstawy czasu, 99 kHz przy zastosowaniu podstawy czasu 100 ms, 9 kHz przy zastosowaniu podstawy czasu 10 ms i 999 kHz przy zastosowaniu podstawy czasu Podstawa czasu 1 ms.

Teoretycznie okazuje się, że jest to wskaźnik ośmiosegmentowy, ale w staromodny sposób nazywany jest także siedmiosegmentowym i nie ma w tym błędu.

W skrócie wskaźnik siedmiosegmentowy to diody LED umieszczone względem siebie w określonej kolejności i zamknięte w jednej obudowie.

Metodę tę można zrozumieć za pomocą rysunków 14 i 15. Przełączniki te są ze sobą połączone i zapewniają rzeczywistą pracę multipleksera i należy je traktować jako szybkie przełączniki elektroniczne, które są wielokrotnie przełączane poprzez pozycje 1, 2 i kolejność operacji obwód jest następujący. Załóżmy najpierw, że przełącznik jest w pozycji.

Po kilku chwilach przełącznik ustawia się w pozycji 3, co powoduje, że po kilku minutach na wyświetlaczu 3 wyświetla się cyfra, cały cykl zaczyna się powtarzać i tak dalej, dodając nieskończoność. W praktyce co sekundę następuje około 50 takich cykli, więc oko nie widzi osobno włączających się i wyłączających wyświetlaczy, ale odbiera je jako pozornie stały wyświetlacz, na którym pojawia się liczba 327, lub inna liczba podyktowana segmentem danych.

Jeśli weźmiemy pod uwagę diagram pojedynczego wskaźnika siedmiosegmentowego, wygląda to następująco:

Jak widzimy, wskaźnik siedmiosegmentowy może być albo z wspólna anoda (CA), więc z wspólna katoda (OC). Z grubsza mówiąc, jeśli mamy siedmiosegmentowy ze wspólną anodą (OA), to w obwodzie powinniśmy zawiesić „plus” na tym pinie, a jeśli ze wspólną katodą (OC), to „minus” lub masa . Na który pin przyłożymy napięcie, ta dioda zaświeci się. Pokażmy to wszystko w praktyce.

W praktycznych multiplekserach szczytowy prąd wyświetlania jest dość wysoki, aby zapewnić wystarczającą jasność wyświetlacza. Na ryc. Rysunek 15 przedstawia przykład ulepszonej metody multipleksowania zastosowanej w trzycyfrowym liczniku częstotliwości. Metoda ta ma dwie główne zalety.

Jeśli te zaciski są aktywne w stanie wysokim, będą miały następujące cechy. Figa. 18 i 19. Rysunek 18 przedstawia technikę tłumienia tętnień stosowaną w celu zapewnienia tłumienia zera wiodącego na czterocyfrowym wyświetlaczu odczytującym ilość.

W magazynie posiadamy następujące wskaźniki LED:

Jak widać urządzenia siedmiosegmentowe mogą być jedno- i wielobitowe, czyli dwa, trzy, cztery urządzenia siedmiosegmentowe w jednym przypadku. Aby sprawdzić nowoczesne urządzenie siedmiosegmentowe wystarczy nam multimetr z funkcją testowania diody. Szukamy ogólnego wniosku – może to być OA lub OK – losowo, a następnie przyglądamy się zachowaniu wszystkich segmentów wskaźnika. Sprawdzamy trzybitowy siedmiosegmentowy:

Tak pokazuje wyświetlacz. Zasadniczo są łatwe w użyciu, zasilają je i świecą. Mogą być denerwujące, ponieważ mają pewną polaryzację, co oznacza, że ​​będą działać tylko wtedy, gdy zostaną prawidłowo podłączone. Jeśli anulujesz napięcie dodatnie i ujemne, w ogóle się nie zaświecą.

Choć jest to denerwujące, jest również całkiem przydatne. Drugi drut to katoda. Katoda jest połączona z masą. W zasadzie do tego dojdzie. W przypadku wspólnej katody przykładasz prąd do pinów, które chcesz włączyć. Multipleksowanie. Istnieją nawet kontrolery wyświetlania, jeśli nie chcesz się martwić przełączaniem oprogramowania.

Ups, zapalił się jeden segment, więc pozostałe segmenty sprawdzamy w ten sam sposób.

Czasami napięcie na kreskówce nie wystarczy do sprawdzenia segmentów wskaźnika. Dlatego bierzemy zasilacz, ustawiamy go na 5 woltów, podłączamy rezystor 1-2 kiloomów do jednego zacisku zasilacza i zaczynamy sprawdzać jednostkę siedmiosegmentową.

Sterowanie wyświetlaczem 7-segmentowym

Więc jeśli masz 4-cyfrową, multipleksowaną 7-segmentową wspólną anodę. Najpierw musimy wiedzieć, jaki typ wyświetlacza mamy, ponieważ istnieją dwa możliwe kształty: wspólna katoda i wspólna anoda. Rzeczy, które będą potrzebne w tym samouczku. Po lewej: Widok graficzny 7-segmentowego wyświetlacza przedstawiającego jeden ogólny układ okablowania wewnętrznego i lokalizacji styków.

W tym momencie zwróć uwagę na początkowe dane wyjściowe, ponieważ będą one potrzebne później podczas ładowania programu. Gdyby wyświetlacz był zwykłą katodą, anulowalibyśmy to. Na dole artykułu znajduje się zdjęcie obwodów, które znajdują się na mojej płytce prototypowej. Udostępniamy również bibliotekę do sterowania więcej niż jednym wyświetlaczem.

Dlaczego potrzebujemy rezystora? Po przyłożeniu napięcia do diody LED zaczyna ona gwałtownie pobierać prąd po włączeniu. Dlatego w tym momencie może się wypalić. Aby ograniczyć prąd, szeregowo z diodą LED łączy się rezystor. Więcej możesz przeczytać w tym artykule.

Liczenie szesnastkowe na jednym wyświetlaczu 7-segmentowym

Wadą jest to, że wymagają dużej ilości zasobów. Ten konkretny wyświetlacz ma cztery cyfry i dwa dwukropki. Urządzenie zapewnia jednak również cyfrową kontrolę jasności wyświetlacza za pośrednictwem wewnętrznego modulatora szerokopasmowego. W takich przypadkach sygnał wyjściowy można wyświetlić na wielu wyświetlaczach 7-segmentowych.

Oszczędza to styki na obudowie, a następnie na sterowaniu. W związku z tym mówi się o wyświetlaczach ze wspólną anodą lub wspólną katodą. Dane wyjściowe odpowiadające segmentowi lub kropce dziesiętnej najlepiej wyodrębnić z arkusza danych w celu wyświetlenia. Wyświetlacz 7-segmentowy o typowym natężeniu 10–20 mA będzie nadal świecił, choć słabo. Nie wymaga to jednak przypisywania kontaktów. Poniższy podział tego segmentu opiera się na.

W ten sam sposób sprawdzamy czterocyfrowy siedmiosegmentowy z chińskiego radia

Myślę, że nie powinno być z tym żadnych szczególnych trudności. W obwodach obwody siedmiosegmentowe są podłączone do rezystorów na każdym pinie. Wynika to również z faktu, że diody LED po przyłożeniu do nich napięcia gorączkowo zużywają prąd i wypalają się.

Jeśli zostanie zastosowany inny cel, jest to w zasadzie możliwe, ale należy to wziąć pod uwagę podczas programowania. Konwertowanie poszczególnych cyfr na określony wzór wyjściowy można wykonać za pomocą czegoś, co nazywa się. Wszystkie pozostałe segmenty powinny być ciemne. Jeśli to pole wyboru jest zaznaczone dla wszystkich cyfr, pojawi się poniższa tabela.

Program testowy wyświetla cyfry od 0 do 9 sekwencyjnie na wyświetlaczu 7-segmentowym. Numer wyjścia jest zapisywany w liczniku rejestru i zwiększany o 1 w ramach cyklu. Jeśli rejestr osiągnie wartość 10, jest ponownie resetowany do 0. Po podniesieniu następuje pętla oczekiwania, która gwarantuje, że minie określona ilość czasu w następnym wydaniu. Zwykle nie wykonywałbyś tak długich cykli oczekiwania, ale tu nie chodzi o czekanie, ale o kontrolowanie wyświetlacza 7-segmentowego. Używanie do tego timera jest zbyt dużym wysiłkiem.

W naszym współczesnym świecie urządzenia siedmiosegmentowe są już zastępowane wskaźnikami LCD, które mogą wyświetlać zupełnie inne informacje

ale aby z nich skorzystać, potrzebne są pewne umiejętności w projektowaniu obwodów takich urządzeń. Jak dotąd nie ma nic prostszego i tańszego niż siedmiosegmentowe kierunkowskazy LED.

Jednak faktyczny problem i dlatego interesująca część tego artykułu pojawia się bezpośrednio po pętli etykiety. Należy pamiętać, że wartość licznika należy podwoić. Jest to bezpośrednio związane z faktem, że pamięć flash działa w oparciu o słowa, a nie bajty. Drugi przykład na tej stronie robi to inaczej. Pokazuje, jak asembler może zapobiec generowaniu bajtów wypełniających, poprzez inny wpis w tabeli. Interesujące jest również to, że do obliczeń potrzebny jest rejestr zawierający wartość 0.

Dlatego tę stałą należy najpierw załadować do rejestru i dopiero wtedy można przystąpić do dodawania za pomocą tego rejestru. Ciekawostką jest to, że fakt ten występuje w wielu programach, a stałymi w zdecydowanej większości przypadków jest stała 0. Dlatego wielu programistów od początku rezerwuje do tego rejestr i nazywa go rejestrem zerowym.

W tym artykule porozmawiamy o wyświetlaczu cyfrowym.
Siedmiosegmentowe wskaźniki LED przeznaczone są do wyświetlania cyfr arabskich od 0 do 9 (rys. 1).

Takie wskaźniki są jednocyfrowe, które wyświetlają tylko jedną liczbę, ale może być więcej grup siedmiosegmentowych połączonych w jedną obudowę (wielocyfrową). W takim przypadku liczby oddziela się przecinkiem dziesiętnym (ryc. 2)

Niestety pojawia się problem, ponieważ wyświetlacz wymaga ośmiu portów - cztery reklamy wymagałyby 32 portów. Ale jest kilka sposobów. Rejestry przesuwne zostały już opisane w innym tutorialu. Ułatwiłoby to utworzenie wymaganych 32 linii wyjściowych za pomocą tylko trzech pinów. Zasada sterowania nie różni się od sterowania pojedynczym wyświetlaczem 7-segmentowym, jedynie sposób podejścia „pinów wyjściowych” do swoich wartości jest inny i jest określany za pomocą rejestrów przesuwnych. W tym miejscu powinna jednak zostać pokazana kolejna opcja sterowania.



Ryc.2.

Wskaźnik nazywany jest siedmiosegmentowym, gdyż wyświetlany symbol zbudowany jest z siedmiu odrębnych segmentów. Wewnątrz obudowy takiego wskaźnika znajdują się diody LED, z których każda oświetla swój własny segment.
Wyświetlanie na takich wskaźnikach liter i innych symboli jest problematyczne, dlatego do tych celów stosuje się wskaźniki 16-segmentowe.

Poniżej ponownie przyjrzymy się multipleksowaniu. Multipleksowanie oznacza, że ​​nie wszystkie cztery wyświetlacze są włączane jednocześnie, a tylko jeden na krótki czas. Jeśli zmiana między wyświetlaczami następuje szybciej, niż jesteśmy w stanie to dostrzec, wszystkie cztery światła wydają się działać jednocześnie, chociaż tylko jedno świeci przez jeden krótki okres czasu. W ten sposób cztery wyświetlacze mogą dzielić poszczególne segmenty, a wszystko, czego potrzeba, to 4 dodatkowe linie sterujące dla 4 wyświetlaczy, z którymi wyświetlacz jest wyposażony.

Jednym z aspektów tego typu sterowania jest częstotliwość multipleksowania, czyli pełny cykl przejścia z jednego wyświetlacza na drugi. Powinien być wystarczająco wysoki, aby zapobiec migotaniu wyświetlacza. Ludzkie oko pracuje ospale, w kinie 24 klatki na sekundę, z telewizorem żeby być pewnym, że także obrazy nieruchome są spokojne, każdy segment musi być kontrolowany przynajmniej na 100 Hz, więc łączy się przynajmniej co 10 ms. Jednak w wyjątkowych przypadkach nawet 100 Hz może nadal migotać, na przykład podczas szybkiego poruszania się wyświetlacza lub w przypadku wystąpienia zakłóceń ze źródłami sztucznego światła zasilanymi prądem przemiennym.

Wskaźniki LED występują w dwóch rodzajach.
W pierwszym z nich wszystkie katody, tj. ujemne zaciski wszystkich diod LED są łączone razem i przydzielany jest dla nich odpowiedni zacisk na obudowie.
Pozostałe zaciski wskaźnika są podłączone do anody każdej diody LED (ryc. 3, a). Obwód ten nazywany jest „obwodem wspólnej katody”.
Istnieją również wskaźniki, w których diody LED każdego segmentu są połączone zgodnie z obwodem ze wspólną anodą (ryc. 3, b).



Ryc.3.

Każdy segment jest oznaczony odpowiednią literą. Rycina 4 pokazuje ich lokalizację.

Ryc.4.

Jako przykład rozważ dwucyfrowy wskaźnik siedmiosegmentowy GND-5622As-21 czerwony. Nawiasem mówiąc, istnieją inne kolory, w zależności od modelu.
Za pomocą baterii trójwoltowej możesz włączać segmenty, a jeśli połączysz grupę pinów w wiązkę i zasilisz je, możesz nawet wyświetlać liczby. Ale ta metoda jest niewygodna, dlatego rejestry przesuwne i dekodery służą do sterowania wskaźnikami siedmiosegmentowymi. Często też piny wskaźników podłączane są bezpośrednio do wyjść mikrokontrolera, ale tylko wtedy, gdy stosowane są wskaźniki o niskim poborze prądu. Rysunek 5 przedstawia fragment obwodu wykorzystującego PIC16F876A.



Ryc.5.

Do sterowania wskaźnikiem siedmiosegmentowym często stosuje się dekoder K176ID2.
Układ ten potrafi konwertować kod binarny składający się z zer i jedynek na cyfry dziesiętne od 0 do 9.

Aby zrozumieć, jak to wszystko działa, musisz złożyć prosty obwód (ryc. 6). Dekoder K176ID2 umieszczony jest w obudowie DIP16. Posiada 7 pinów wyjściowych (piny 9 - 15), każdy dedykowany konkretnemu segmentowi. Sterowanie punktowe nie jest tu zapewnione. Mikroukład posiada również 4 wejścia (piny 2 - 5) do zasilania kodu binarnego. Piny 16. i 8. są zasilane odpowiednio mocą dodatnią i ujemną. Pozostałe trzy wnioski mają charakter pomocniczy, opowiem o nich nieco później.



Ryc.6.

DD1-K176ID2
R1 - R4 (10 - 100 kOhm)
HG1 - GND-5622As-21

W obwodzie są 4 przełączniki (przyciski są możliwe), po ich naciśnięciu z zasilacza plus na wejścia dekodera zostaje doprowadzony logiczny. Nawiasem mówiąc, sam mikroukład zasilany jest napięciem od 3 do 15 woltów. W tym przykładzie cały obwód jest zasilany z zasilacza o napięciu 9 V.

W obwodzie znajdują się również 4 rezystory. Są to tak zwane rezystory podciągające. Są one potrzebne, aby zapewnić stan niski na wejściu logicznym w przypadku braku sygnału. Bez nich odczyty na wskaźniku mogą nie być wyświetlane poprawnie. Zaleca się stosowanie tego samegorezystancja od 10 kOhm do 100 kOhm.

Na schemacie piny 2 i 7 wskaźnika HG1 nie są połączone. Jeśli podłączysz pin DP do ujemnego źródła zasilania, zaświeci się przecinek dziesiętny. A jeśli dodasz minus do wyjścia Dig.2, wówczas zaświeci się także druga grupa segmentów (będzie wyświetlać ten sam symbol).

Wejścia dekodera zostały zaprojektowane w taki sposób, aby wyświetlić na wskaźniku cyfry 1, 2, 4 i 8 wystarczy wcisnąć jeden przycisk (układ posiada przełączniki odpowiadające wejściom D0, D1, D2 i D3). W przypadku braku sygnału wyświetlana jest cyfra zero. Po podaniu sygnału na wejście D0 wyświetlana jest cyfra 1 i tak dalej. Aby wyświetlić inne liczby, należy nacisnąć kombinację przełączników. Tabela 1 powie nam, które z nich musimy nacisnąć.


Tabela 1.

Aby wyświetlić liczbę „3”, należy zastosować liczbę logiczną na wejściach D0 i D1. Jeśli podasz sygnał do D0 i D2, wyświetli się cyfra „5”.(ryc. 6).



Ryc.6.

Oto rozszerzona tabela, w której widzimy nie tylko oczekiwaną liczbę, ale także te segmenty (a - g), które będą się na nią składać.



Tabela 2.

Piny 1., 6. i 7. mikroukładu są pomocnicze (odpowiednio S, M, K).

Na schemacie (ryc. 6) 6. pin „M” jest uziemiony (do minusa zasilania), a na wyjściu mikroukładu występuje napięcie dodatnie do pracy ze wskaźnikiem ze wspólną katodą. W przypadku zastosowania wskaźnika ze wspólną anodą należy go przyłożyć do 6-go pinu.

Jeśli na 7. pin „K” zostanie przyłożona logiczna jedynka, wówczas znak wskaźnika gaśnie, zero pozwala na wskazanie. W obwodzie ten pin jest uziemiony (do minusa zasilania).

Na pierwsze wyjście dekodera doprowadzona jest jednostka logiczna (plus zasilanie), która umożliwia wyświetlenie przekonwertowanego kodu na wskaźniku. Ale jeśli zastosujesz logiczne zero do tego pinu (S), wejścia przestaną odbierać sygnał, a aktualnie wyświetlany znak zamarznie na wskaźniku.

Ciekawostką wartą odnotowania jest to, że wiemy, że przełącznik D0 włącza cyfrę „1”, a przełącznik D1 włącza cyfrę „2”. Jeśli naciśniesz oba przełączniki, wyświetli się cyfra 3 (1+2=3). W innych przypadkach wskaźnik wyświetla sumę liczb tworzących tę kombinację. Dochodzimy do wniosku, że wejścia dekodera są rozmieszczone przemyślanie i mają bardzo logiczne kombinacje.

Możesz także obejrzeć wideo do tego artykułu.

Siedmiosegmentowe wskaźniki LED są bardzo popularne wśród cyfrowych urządzeń wyświetlających wartości i są stosowane na przednich panelach kuchenek mikrofalowych, pralek, zegarów cyfrowych, liczników, timerów itp. W porównaniu ze wskaźnikami LCD, segmenty wskaźników LED świecą jasno i są widoczne przez ponad na duże odległości i przy szerokim kącie widzenia. Aby podłączyć siedmiosegmentowy 4-bitowy wskaźnik do mikrokontrolera, potrzeba co najmniej 12 linii I/O. Dlatego prawie niemożliwe jest użycie tych wskaźników z mikrokontrolerami z małą liczbą pinów, na przykład serią firmy. Można oczywiście zastosować różne metody multipleksowania (ich opis można znaleźć na stronie w dziale „Schematy”), jednak i w tym przypadku każda z metod ma pewne ograniczenia i często wykorzystują one skomplikowane algorytmy programowe.

Przyjrzymy się sposobowi podłączenia wskaźnika poprzez interfejs SPI, który będzie wymagał jedynie 3 linii I/O mikrokontrolera. Jednocześnie zachowana zostanie kontrola nad wszystkimi segmentami wskaźników.

Do podłączenia 4-bitowego wskaźnika do mikrokontrolera poprzez magistralę SPI wykorzystywany jest specjalizowany układ sterownika produkowany przez firmę. Mikroukład może sterować ośmioma siedmiosegmentowymi wskaźnikami ze wspólną katodą i zawiera dekoder BCD, sterowniki segmentowe, obwód multipleksujący i statyczną pamięć RAM do przechowywania wartości cyfrowych.

Prąd płynący przez segmenty wskaźnika ustawia się za pomocą tylko jednego zewnętrznego rezystora. Dodatkowo chip umożliwia kontrolę jasności wskaźników (16 poziomów jasności) za pomocą wbudowanego PWM.

Obwód omawiany w artykule to obwód modułu wyświetlacza z interfejsem SPI, który może być zastosowany w konstrukcjach radioamatorskich. Bardziej interesuje nas nie sam obwód, ale praca z mikroukładem za pośrednictwem interfejsu SPI. Zasilanie modułu +5 V podawane jest na pin Vcc, linie sygnałowe MOSI, CLK i CS przeznaczone są do komunikacji pomiędzy urządzeniem master (mikrokontrolerem) i slave (chipem MAX7219).

Mikroukład jest używany w standardowym połączeniu; jedyne potrzebne elementy zewnętrzne to rezystor ustawiający prąd w segmentach, dioda ochronna zasilacza i kondensator filtrujący zasilacza.

Dane przesyłane są do chipa w 16-bitowych pakietach (dwa bajty), które umieszczane są we wbudowanym 16-bitowym rejestrze przesuwnym na każdym zboczu narastającym sygnału CLK. Pakiet 16-bitowy będziemy oznaczać jako D0-D15, gdzie bity D0-D7 zawierają dane, D8-D11 zawierają adres rejestru, bity D12-D15 nie mają znaczenia. Bit D15 jest najbardziej znaczącym bitem i jest pierwszym otrzymanym bitem. Chociaż chip jest w stanie kontrolować osiem wskaźników, rozważymy pracę tylko z czterema. Sterują nimi wyjścia DIG0 - DIG3, rozmieszczone w kolejności od prawej do lewej, odpowiadające im 4-bitowe adresy (D8-D11) to 0x01, 0x02, 0x03 i 0x04 (format szesnastkowy). Rejestr cyfr jest realizowany przy użyciu wbudowanej pamięci RAM w organizacji 8x8 i jest bezpośrednio adresowalny, dzięki czemu każda pojedyncza cyfra na wyświetlaczu może być aktualizowana w dowolnym momencie. Poniższa tabela przedstawia adresowalne cyfry i rejestry kontrolne układu MAX7219.

Rejestr

Adres

Wartość szesnastkowa

Bez operacji

Tryb dekodowania

Liczba wskaźników

Zamknięcie

Test wskaźników

Rejestry kontrolne

Układ MAX1792 posiada 5 rejestrów kontrolnych: tryb dekodowania (Decode-Mode), kontrola jasności wskaźnika (Intensity), rejestr liczby podłączonych wskaźników (Scan Limit), kontrola włączania/wyłączania (Shutdown), tryb testowy (Display Test).

Włączanie i wyłączanie chipa

Po podłączeniu zasilania do układu wszystkie rejestry zostają zresetowane i układ przechodzi w tryb wyłączenia. W tym trybie wyświetlacz jest wyłączony. Aby przejść do trybu normalnej pracy, należy ustawić bit D0 rejestru Shutdown (adres 0Сh). Bit ten można w każdej chwili skasować, co wymusi wyłączenie sterownika, pozostawiając zawartość wszystkich rejestrów bez zmian. Tego trybu można używać do oszczędzania energii lub w trybie alarmowym poprzez miganie wskaźnika (sekwencyjne włączanie i wyłączanie trybu wyłączenia).

Mikroukład zostaje przełączony w tryb wyłączenia poprzez sekwencyjne przesłanie adresu (0Сh) i danych (00h), przesłanie 0Ch (adres), a następnie 01h (dane) przywraca go do normalnej pracy.

Tryb dekodowania

Korzystając z rejestru wyboru trybu dekodowania (adres 09h), można zastosować dekodowanie kodu BCD B (wyświetlanie znaków 0-9, E, H, L, P, -) lub bez dekodowania dla każdej cyfry. Każdy bit w rejestrze odpowiada jednej cyfrze, ustawienie logicznego oznacza włączenie dekodera dla danego bitu, ustawienie 0 oznacza wyłączenie dekodera. Jeżeli używany jest dekoder BCD to pod uwagę brany jest tylko najniższy półbajt danych w rejestrach cyfr (D3-D0), bity D4-D6 są ignorowane, bit D7 nie zależy od dekodera BCD i odpowiada za włączenie kropka dziesiętna na wskaźniku, jeśli D7 = 1. Przykładowo, jeśli bajty 02h i 05h zostaną wysłane sekwencyjnie, wskaźnik DIG1 (druga cyfra od prawej) wyświetli liczbę 5. Podobnie przy wysyłaniu 01h i 89h wskaźnik DIG0 wyświetli liczbę 9 z kropką dziesiętną . Poniższa tabela przedstawia pełną listę znaków wyświetlanych podczas korzystania z dekodera BCD układu scalonego.

Symbol

Dane w rejestrach

Włączone segmenty = 1

Pusty

*Punkt dziesiętny jest ustawiany bitem D7=1

Gdy dekoder BCD jest wyłączony z działania, bity danych D7-D0 odpowiadają liniom segmentowym (A-G i DP) wskaźnika.

Regulacja jasności kierunkowskazów

Układ umożliwia programowe sterowanie jasnością wskaźników za pomocą wbudowanego PWM. Wyjście PWM jest kontrolowane przez półbajt niskiego rzędu (D3-D0) rejestru Intensity (adres 0Ah), który pozwala ustawić jeden z 16 poziomów jasności. Gdy wszystkie bity półbajtu są ustawione na 1, wybierana jest maksymalna jasność wskaźnika.

Liczba podłączonych wskaźników

Rejestr Scan-Limit (adres 0Bh) ustawia wartość liczby bitów obsługiwanych przez mikroukład (1 ... 8). Dla naszej wersji 4-bitowej do rejestru należy zapisać wartość 03h.

Test wskaźników

Rejestr odpowiedzialny za ten tryb znajduje się pod adresem 0Fh. Ustawiając w rejestrze bit D0, użytkownik włącza wszystkie segmenty wskaźnikowe, natomiast zawartość rejestrów sterujących i danych nie ulega zmianie. Aby wyłączyć tryb testu wyświetlacza, bit D0 musi mieć wartość 0.

Interfejs z mikrokontrolerem

Moduł wskaźnika można podłączyć do dowolnego mikrokontrolera posiadającego trzy wolne linie I/O. Jeżeli mikrokontroler posiada wbudowany moduł sprzętowy SPI, to moduł wskaźnika można podłączyć do magistrali jako urządzenie podrzędne. W tym przypadku linie sygnałowe SPI SDO (wyjście danych szeregowych), SCLK (zegar szeregowy) i SS (wybór urządzenia podrzędnego) mikrokontrolera można bezpośrednio podłączyć do pinów MOSI, CLK i CS układu (modułu) MAX7219, Sygnał CS jest aktywny na niskim poziomie.

Jeśli mikrokontroler nie ma sprzętowego SPI, interfejs można zorganizować programowo. Komunikacja z MAX7219 rozpoczyna się od pociągnięcia i przytrzymania linii CS w stanie niskim, a następnie przesłania sekwencyjnie 16 bitów danych (najpierw MSB) linią MOSI po narastającym zboczu sygnału CLK. Po zakończeniu transmisji linia CS ponownie przechodzi w stan wysoki.

W sekcji pobierania użytkownicy mogą pobrać tekst źródłowy programu testowego oraz plik HEX oprogramowania sprzętowego, które implementuje konwencjonalny 4-bitowy licznik z wyświetlaniem wartości na module wskaźnika z interfejsem SPI. Wykorzystany mikrokontroler to interfejs zaimplementowany programowo, linie sygnałowe CS, MOSI i CLK modułu wskaźnika podłączone są odpowiednio do portów GP0, GP1 i GP2. Wykorzystano kompilator mikroC dla mikrokontrolerów PIC (mikroElektronika

Aby komentować materiały znajdujące się w serwisie i uzyskać pełny dostęp do naszego forum, potrzebujesz rejestr .

Tym razem w artykule omówiony zostanie jeden z najciekawszych modułów, a mianowicie - wielocyfrowy wskaźnik siedmiosegmentowy oparty na chipie MAX7219. Dlaczego wielobitowy? Odpowiedź jest prosta - liczba cyfr to liczba cyfr, które moduł może wyświetlić. Na przykład na poniższym zdjęciu pokazano trzy rodzaje wskaźników wielocyfrowych, od lewej do prawej - 4-cyfrowe, 6-cyfrowe, 8-cyfrowe. Co więcej, to pierwsze 4-cyfrowy czujnik zegarowy. Różnica między czujnikiem zegarowym a zwykłym polega na tym, że ma znak dwukropki, podczas gdy w każdym zwykłym wskaźniku znak ten zastępuje się kropką na dole, obok liczby.

W tym artykule omawiane moduły działają w oparciu o mikroukład MAX7219. Ten układ jest sterownikiem siedmiosegmentowych wskaźników LED, a także matryc LED 8x8 i nie będziemy brać pod uwagę schematów połączeń do podłączenia tego sterownika. Jako podstawę przyjmuje się po prostu gotowy moduł; zostaną podane przykłady podłączenia do płytki Arduino UNO i pracował z funkcjami bibliotecznymi Sterowanie diodami. Swoją drogą, jak już wspomniano, matryce LED 8x8 również działają w oparciu o sterownik MAX7219, a jeśli ktoś jest zainteresowany to zapraszam do artykułów:

A więc zaczynajmy... Myślę, że podano dobry opis wielobitowości, ale oto dlaczego siedmiosegmentowy? Odpowiedź też nie jest taka skomplikowana – bo siedem diod LED, indeksowanych literami, służy do tworzenia symbolu lub wyświetlania cyfry A, B, C, D, E, F, G, Poniższa tabela pokazuje, jak to jest sygnalizowane:

Jak widać z tabeli jest też ósma dioda LED - D.P. Możesz całkowicie zakodować znak lub cyfrę w 1 bajcie, ustawiając lub usuwając określony bit, jak pokazano na przykładzie kodowania znaków J. W przykładzie bity są ustawione B, C, D, E, który umożliwia wyświetlenie określonego znaku na wskaźniku siedmiosegmentowym.

Od teorii do praktyki - podłączmy 8-bitowy moduł do płytki Arduino Uno według poniższego schematu:

Do wyświetlania symboli wykorzystuje się kilka funkcji z biblioteki wtyczek LedControl.h. Przyjrzyjmy się kolejno każdej z tych funkcji, zaczynając od funkcji setDigit().

Prototyp deklaracji funkcji wyświetlającej liczbę i argumenty przekazane do funkcji:

setDigit(adres int, cyfra int, wartość bajtu, wartość logiczna dp);

Gdzie -

Iadres bez adresu -adres modułu na magistraliSPI 0 SPI zaczyna od zera)

cyfra int - 0 , 7

wartość bajtu -wartość (liczba od 0 do 9), która ma zostać wyświetlona w cyfrze, której liczba jest podana w parametrze int cyfra

wartość logiczna dp - cyfra int. Jeżeli parametrem jest PRAWDA wtedy punkt zostanie wyświetlony jeśli FAŁSZ wtedy punkt nie będzie wyświetlany.

Prototyp deklaracji funkcji wyświetlającej symbol i argumenty przekazywane do funkcji:

setChar(int adres, int cyfra, wartość char, wartość logiczna dp);

Iadres bez adresu - adres modułu na magistraliSPI dla którego wywoływana jest funkcja, jeśli jest tylko jeden moduł, to parametr ten jest równy0 (domyślne adresowanie urządzeń na magistraliSPI zaczyna od zera)

cyfra int - numer seryjny cyfry w module wyświetlacza; domyślnie dla wskaźników wielocyfrowych numeracja cyfr rozpoczyna się odpowiednio od cyfry skrajnej na prawo, numer cyfry skrajnej na prawo jest równy0 , a liczba skrajnej lewej cyfry w naszym przypadku jest równa7

wartość znaku - znak, który powinien być wyświetlany w cyfrze, której numer jest określony przez parametrcyfra int

wartość logiczna dp - parametr ten odpowiada za wyświetlenie kropki przy cyfrze, której numer jest podany w parametrze cyfra int. Jeżeli parametrem jest PRAWDA wtedy punkt zostanie wyświetlony jeśli FAŁSZ wtedy punkt nie będzie wyświetlany.

Osobną kwestią, o której warto wspomnieć, jest funkcja ustawChar() może wyświetlać tylko ograniczony zestaw znaków, taki jak:

  • 0 1 2 3 4 5 6 7 8 9 cyfra jest wyświetlana jako symbol
  • A
  • B b
  • z z znak będzie wyświetlany małymi literami
  • D znak będzie wyświetlany małymi literami
  • E mi znak będzie pisany wielkimi literami
  • F znak będzie pisany wielkimi literami
  • H godz znak będzie wyświetlany małymi literami
  • Ll znak będzie pisany wielkimi literami
  • P. str znak będzie pisany wielkimi literami
  • - minus"
  • . , wyświetlacz punktowy
  • _ podkreślać
  • <Пробел> ustaw znak spacji

W szkicu testowym możesz ustawić takie zadanie:

  1. Wyświetlaj liczby od 1 do 8 jedna po drugiej, bez kropki
  2. Wypełnij wszystkie cyfry modułu wyświetlacza liczbami od 1 do 8, plus wyświetl wszystkie punkty wskazanych cyfr
  3. Narysuj tablicę bitową ze znakami wstępnie zakodowanymi w kodzie binarnym, wynikiem powinno być „Reguły Arduino!!!”

Ze względu na ograniczony zestaw znaków, funkcja ustawChar() nie nadaje się do szkicu testowego, ponieważ nie będzie w stanie normalnie narysować frazy określonej w punkcie 3. Zamiast tej funkcji skorzystamy z funkcji setRow(). A więc... funkcja setRow() został już przez nas przetestowany w artykułach na temat badania matryc LED 8x8, opiszemy jeszcze raz prototyp wywołania i parametry tej funkcji.

Prototyp deklaracji funkcji setRow() oraz argumenty przekazane do funkcji:

setRow(int adres, int wiersz, wartość bajtu);

Iadres bez adresu - adres modułu na magistraliSPI dla którego wywoływana jest funkcja, jeśli jest tylko jeden moduł, to parametr ten jest równy0 (domyślne adresowanie urządzeń na magistraliSPI zaczyna od zera)

rząd wewnętrzny - numer seryjny cyfry w module wyświetlacza; domyślnie dla wskaźników wielocyfrowych numeracja cyfr rozpoczyna się odpowiednio od cyfry skrajnej na prawo, numer cyfry skrajnej na prawo jest równy0 , a liczba skrajnej lewej cyfry w naszym przypadku jest równa7

wartość bajtu- wartość w formacie binarnym (przykład B00000000, możliwe są również alternatywy w formacie dziesiętnym i szesnastkowym), która koduje wymagany znak. Tabela kodowania znaków pomoże Ci poprawnie zakodować żądany znak.

Cóż, na końcu artykułu szkic testowy i film pokazujący, jak to działa:

#include "LedControl.h" /* * Dołącz bibliotekę LedControl.h * i utwórz obiekt klasy LedControl * w tym przypadku wyświetlacz 7-segmentowy ze sterownikiem MAX72xx * należy podłączyć do płytki Arduino w następujący sposób: * Arduino -> Moduł wyświetlacza MAX72xx * Arduino -> Moduł wyświetlacza MAX72xx * Arduino -> Moduł wyświetlacza MAX72xx * Arduino -> Moduł wyświetlacza MAX72xx * Arduino -> Moduł wyświetlacza MAX72xx * */ LedControl lc = LedControl(12, 11, 10, 1 ); //Tablica z zakodowanymi znakami, //Wyrażenie „Zasady Arduino!!!” Bajt AR = (b0111101111, // A b00000101, // R B001111101, // D B00011100, // U B00010000, // I B00010101, // N B000111101, // O B00000101, // R B000111110 0, // U B00001100 , //l B01001111, //E B01011011, //S B10110000, //B10110000, //! void setup() ( //Urządzenie (wyświetlacz 7-segmentowy) zostało wyprowadzone z trybu uśpienia lc.shutdown(0, false); //Ustaw jasność wyświetlacza na 8 //Łączna liczba możliwych trybów jasności od 0 do 15 lc. setIntensity(0 ,8); //Wyczyść wyświetlacz lc.clearDisplay(0); void pętli() ( //Najprostsza iteracja liczb od 1 do 8 cyframi for(int i = 0, j = 7; i< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, byte(i + 1), false); opóźnienie(400); lc.clearDisplay(0); ) //Iteruj po liczbach bez czyszczenia ekranu dla (int ja = 0, j = 7;< 8, j >= 0; i++, j--) ( lc.setDigit(0, j, bajt(i + 1), true); opóźnienie(400); ) lc.clearDisplay(0); //Renderowanie frazy „Arduino rządzi!!!” int n = 0; for(int i = 0; tj< 2; i ++) { for(int j = 7; j >= 0; j --) ( if(n > 6 && !(i % 2)) (kontynuuj; ) else ( lc.setRow(0, j, ar[n]); opóźnienie(400); n ++; ) ) lc .clearDisplay(0); ) opóźnienie (400); lc.clearDisplay(0); )


Aby komentarze mogły działać, włącz JavaScript.