Arduino uno 4-cyfrowy 7-segmentowy wskaźnik. Wskaźnik siedmiosegmentowy. Liczba podłączonych wskaźników

Arduino uno 4-cyfrowy 7-segmentowy wskaźnik.  Wskaźnik siedmiosegmentowy.  Liczba podłączonych wskaźników
Arduino uno 4-cyfrowy 7-segmentowy wskaźnik. Wskaźnik siedmiosegmentowy. Liczba podłączonych wskaźników

Wskaźniki siedmiosegmentowe LED są bardzo popularne wśród cyfrowych urządzeń wyświetlających wartości i stosowane są w panelach przednich kuchenka mikrofalowa, pralki, zegarek cyfrowy, liczniki, timery itp. W porównaniu do wskaźników LCD, segmenty wskaźnika LED świecą jasno i są widoczne na długi dystans i pod szerokim kątem 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. Oczywiście, że możesz skorzystać różne metody multipleksowanie (którego opis można znaleźć na stronie w dziale „Schematy”), ale i w tym przypadku każda metoda ma pewne ograniczenia i często wykorzystuje skomplikowane algorytmy oprogramowania.

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 jest obwodem modułu wyświetlacza z interfejsem SPI, który można zastosować projekty radioamatorskie. 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 układu 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 oznaczamy 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) powraca 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 odpowiada włączeniu dekodera dla tego 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 pokazuje pełna lista znaki wyświetlane podczas korzystania z dekodera BCD chipa.

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 chipem MAX7219 rozpoczyna się od włożenia i utrzymania niski poziom na linii CS, po czym przesyłanych jest sekwencyjnie 16 bitów danych (najpierw wysyłany jest najbardziej znaczący bit) linią MOSI na zboczu narastającym 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 .

Dobry dzień! Po mojej długiej i wymuszonej przerwie będziemy dalej doskonalić kurs programowania Arduino. Na jednej z poprzednich lekcji pracowaliśmy już z sekwencją diod LED, teraz czas przejść do kolejnego etapu szkolenia. Tematem dzisiejszego artykułu będzie - 7- wskaźnik segmentu.

Zapoznanie się ze wskaźnikiem 7-segmentowym będzie składać się z dwóch części. W pierwszej części krótko omówimy część teoretyczną, popracujemy ze sprzętem i napiszemy proste programy.

Ostatnim razem, gdy pracowaliśmy z sekwencją 8 diod LED, dzisiaj będzie ich również 8 (7 pasków LED i 1 kropka). W odróżnieniu od poprzedniej sekwencji elementy tego zestawu nie są ułożone w kolejności (jeden po drugim), lecz ułożone w określonej kolejności. Dzięki temu za pomocą tylko jednego elementu można wyświetlić 10 cyfr (od 0 do 9).

Kolejna znacząca różnica, która odróżnia ten wskaźnik od prostych diod LED. Ma wspólną katodę (a raczej dwie równoważne nogi 3 i 8, na których podłączona jest katoda). Wystarczy podłączyć jedną z katod do masy ( GND). Wszystkie elementy wskaźnikowe posiadają indywidualne anody.

Mała dygresja. Wszystko powyższe dotyczy wskaźników 7-segmentowych ze wspólną katodą. Istnieją jednak wskaźniki ze wspólną anodą. Łączenie takich wskaźników różni się znacznie, dlatego proszę nie mylić „grzesznego z sprawiedliwym”. Musisz jasno zrozumieć, jaki rodzaj urządzenia siedmiosegmentowego masz w rękach!

Oprócz różnic między prostymi diodami LED a wskaźnikami 7-segmentowymi istnieją również wspólne cechy. Na przykład: wskaźniki, podobnie jak diody LED, można zamontować w rzędzie (sekwencja), aby wyświetlać liczby dwu-, trzy-, czterocyfrowe (cyfry). Jednak nie radzę Ci się zbytnio przejmować samodzielny montaż zestawy segmentowe. W sprzedaży „obok” wskaźników jednocyfrowych sprzedawane są również wskaźniki wielocyfrowe.

Mam nadzieję, że nie zapomniałeś o konieczności stosowania rezystorów ograniczających prąd przy podłączaniu diod LED. To samo dotyczy wskaźników: każdy element wskaźnika musi mieć podłączony własny rezystor. 8 elementów (7 + 1) – 8 rezystorów.

Miałem pod ręką jednostkę siedmiosegmentową oznaczoną 5161AS (wspólna katoda). Pinout:



Schemat

Jak mówiłem wcześniej, aby załączyć segment „A”, podłączamy masę do dowolnego wspólnego pinu (3 lub 8), a na pin 7 dostarczamy napięcie 5V. Jeśli wskaźnik ma wspólną anodę, to do anody przykładamy 5 V i masę do wyjścia segmentu!

Złóżmy stanowisko testowe. Łączymy przewody w kolejności zaczynając od pierwszej nóżki, która prowadzi do 2-go pinu płytki Arduino. Masę podłączamy do pinu 8 wskaźnika.

Po złożeniu stojaka można przystąpić do pisania oprogramowania.

Aby sprawdzić wskaźnik, uruchommy napisany program. Wybierzmy element „A” i flashujmy go.


Teraz sflashujmy cyfrę 2. Aby to zrobić, włączmy jeszcze kilka elementów.

Aby wyprowadzić jedną cyfrę, musisz napisać n-liczbę linii kodu. To trudne, nie sądzisz?

Jest inny sposób. Aby wyświetlić na wskaźniku dowolną liczbę, należy ją najpierw przedstawić jako określony ciąg bitów.

Tabela korespondencji.

Jeśli wyświetlacz ma wspólną anodę, to 1 należy zastąpić 0, a 0 1!

Kolumna szesnastkowa jest reprezentacją liczby w postaci bajtowej (porozmawiamy o tym bardziej szczegółowo w drugiej części).

Liczbę w systemie binarnym zapisuje się w następujący sposób: 0b00000000. 0b- system binarny. Zero oznacza, że ​​wszystkie diody LED są wyłączone.

Podczas podłączania użyliśmy pinów od 2 do 9. Aby włączyć pin 2, wpisz do niego jeden = 0b00000001. Czwarty bit od prawej strony odpowiada za kropkę. Ostatni bit odpowiada linii na środku wskaźnika.

Napiszmy przykład wyprowadzenia liczby 0.

Aby zmniejszyć liczbę wpisywanych linii, użyjemy pętli, która pozwala „iterować” wszystkie 8 bitów. Zmienny Włącz_segment przypisana jest wartość odczytywanego bitu. Następnie wyjście prądowe zostaje ustawione na odpowiedni tryb ( obecność lub brak sygnału).

Uwaga: Funkcja bitRead() odczytuje stan określonego bitu i zwraca wartość stanu (0 lub 1).bitOdczyt(x, n)gdzie x jest liczbą, której bity należy odczytać; n jest numerem bitu, którego stan należy odczytać. Numerowanie rozpoczyna się od najmniej znaczącego (skrajnego na prawo) bitu o numerze 0.

A na koniec pierwszej części napiszemy mały licznik.

Podłączenie wyświetlacza siedmiosegmentowego do Arduino to świetny projekt poziom wejścia, pozwalające lepiej poznać płytkę Arduino. Ale jest to całkiem łatwe. Dlatego nieco skomplikujemy zadanie i podłączymy czterocyfrowy wskaźnik siedmiosegmentowy.



W w tym przypadku Zastosujemy czterocyfrowy moduł wskaźników LED ze wspólną katodą.


Każdy segment modułu wskaźnika jest multipleksowany, co oznacza, że ​​dzieli jedno miejsce podłączenia anody z innymi segmentami wyładowania. A każdy z czterech bitów modułu ma swój własny punkt połączenia ze wspólną katodą. Dzięki temu każdą cyfrę można włączać i wyłączać niezależnie. Dodatkowo ta metoda multipleksowania pozwala mikrokontrolerowi używać tylko jedenastu lub dwunastu pinów zamiast trzydziestu dwóch.



Segmenty LED wskaźnika wymagają podłączenia rezystorów ograniczających prąd przy zasilaniu od 5 V do logiczny wniosek. Wartość rezystora przyjmuje się zwykle w przedziale od 330 do 470 omów. Zaleca się również zastosowanie tranzystorów w celu zapewnienia dodatkowego prądu, ponieważ każdy pin mikrokontrolera może dostarczyć maksymalnie 40 mA. Jeśli włączysz wszystkie segmenty rozładowania (numer 8), pobór prądu przekroczy ten limit. Poniższy rysunek pokazuje schemat połączeń czterocyfrowego siedmiosegmentowego wskaźnika wykorzystującego tranzystory rezystorowe ograniczające prąd.



Poniżej znajdują się schematy podłączenia wskaźnika do pinów Arduino. Zastosowano tu tranzystory bipolarne npn BC547. Potencjometr 10 KOhm podłączony do wejścia płytki A0 pozwala na zmianę wartości wyświetlanej na wskaźniku od 0 do 1023.




Na płycie Arduino wyjścia cyfrowe D2-D8 służą w tym przypadku do sterowania segmentami „a” do „g”, a wyjścia cyfrowe D9-D12 służą do sterowania bitami D0 do D3. Należy zauważyć, że w tym przykładzie kropka nie jest używana, ale na poniższym szkicu jest możliwe jej użycie. Pin D13 płytki Arduino jest zarezerwowany do sterowania segmentem punktowym.



Poniżej znajduje się kod umożliwiający sterowanie czterocyfrowym wskaźnikiem segmentowym za pomocą płytki Arduino. W nim tablica liczbowa określa kody liczb od 0 do 9 w formie binarnej. Ten szkic obsługuje zarówno wskaźniki ze wspólną katodą (domyślnie), jak i wskaźniki ze wspólną anodą (w tym celu należy odkomentować jedną linię na końcu szkicu).


// bity reprezentujące segmenty od A do G (i kropki), dla liczb 0-9 const int numeral = ( //ABCDEFG /dp B11111100, // 0 B01100000, // 1 B11011010, // 2 B11110010, // 3 B01100110, // 4 B10110110, // 5 B00111110, // 6 B11100000, // 7 B11111110, // 8 B11100110, // 9 ); // piny dla punktu i każdego segmentu // DP,G,F,E,D,C,B,A const int segmentPins = ( 13,8,7,6,5,4,3,2 ); const int nbrDigits= 4; // liczba cyfr wskaźnika LED // cyfry 0 1 2 3 const int digitalPins = ( 9,10,11,12 ); void setup() ( for(int i=0; tj< 8; i++) { pinMode(segmentPins[i], OUTPUT); // устанавливаем выводы для сегментов и точки на выход } for(int i=0; i < nbrDigits; i++) { pinMode(digitPins[i], OUTPUT); } } void loop() { int value = analogRead(0); showNumber(value); } void showNumber(int number) { if(number == 0) { showDigit(0, nbrDigits-1) ; // отображаем 0 в правом разряде } else { // отображаем значение, соответствующее каждой цифре // крайняя левая цифра 0, правая на единицу меньше, чем число позиций for(int digit = nbrDigits-1; digit >= 0; cyfra--) ( if(liczba > 0) ( showDigit(liczba % 10, cyfra) ; liczba = liczba / 10; ) ) ) ) // Wyświetl podaną liczbę na tę kategorię Wskaźnik 7-segmentowy void showDigit(int liczba, int cyfra) ( digitalWrite(digitPins, HIGH); for(int segment = 1; segment< 8; segment++) { boolean isBitSet = bitRead(numeral, segment); // isBitSet будет истинным, если данный бит будет 1 // isBitSet = ! isBitSet; // опционально // раскомментируйте опциональную строчку выше для индикатора с общим анодом digitalWrite(segmentPins, isBitSet); } delay(5); digitalWrite(digitPins, LOW); }


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 (kropka dziesiętna, DP), przeznaczona 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, są jednak 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ć podłączony jest jednocyfrowy wskaźnik siedmiosegmentowy 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)

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 dla siedmiosegmentowych wskaźników LED, a także matryc LED 8x8 i nie będziemy brać pod uwagę schematy obwodów podłączenie tego sterownika. Po prostu wzięte jako podstawa gotowy moduł zostaną podane przykłady podłączenia do płytki Arduino UNO i pracował z funkcjami bibliotecznymi Sterowanie Ledami. 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 było tam mowa o wielobitowości dobry opis, i oto dlaczego siedmiosegmentowy? Odpowiedź też nie jest taka skomplikowana - bo siedem diod LED, indeksowanych literami, służy do tworzenia symbolu lub wyświetlania liczby 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śli 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śli 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 wyświetlany wielkimi literami
  • F znak będzie wyświetlany wielkimi literami
  • H godz znak będzie wyświetlany małymi literami
  • Ll znak będzie wyświetlany wielkimi literami
  • P. str znak będzie wyświetlany 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 o studiowaniu Matryce diodowe 8x8, opiszmy 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" /* * Podłączamy bibliotekę LedControl.h * i tworzymy 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.