Wszechobecne diody LED po ułożeniu ich w odpowiednie układy geometryczne mogą posłużyć do wyświelania danych liczbowych - czasu, parametrów różnych urządzeń elektronicznych i innych. Z tym prostym pomyslem związana jest popularność tzw wyświetlaczy 7-segmentowych (Fig. 1).
Typowe moduły wyświetlaczy 7-segmentowych (SevSeg) składają się z siedmiu diod LED ułożonych w kształt litery "B" (Fig. 2). Dodatkowo najczęściej umieszczana jest jeszcze jedna dioda tzw. DP (ang. Decimal Point) umożliwiająca wyświetlenie kropki tworzącej znak dzisiętny. Siedem diod LED tworzy segmenty o standardowych nazwach: a, b, c, d, e, f, g.
Wyświetlacze 7-segmentowe LED są produkowane w różnych rozmiarach i kolorach świecenia diod. W celu ograniczenia liczby pinów są one produkowane w dwóch wariantach - ze wspólną anodą (ang. Common Anode (CA)) lub wspólną katodą (ang. Common Cathode (CC)) (Fig. 3). W odmianie ze wspólną anodą każda z diod LED wyświetlacza ma jedną wspólną anodę i osobne wyprowadzenia katod, a w układach ze wspólną katodą jest odwrotnie. Konsekwencją różnej budowy wyświetlaczy jest odmienne sterowanie wyświetlaniem segmentów. W wyświetlaczach ze wspólną anodą, w związku z tym, że na wszystkie anody diod LED podawany jest potencjał wysoki - zaświecanie diod odbywa się przez podanie na odpowiednią katodę potencjału masy (poprzez rezystor ograniczający napięcie i prąd). Z kolei w wyświetlaczach ze wspólną katodą na katodach mamy na stałe podłączony potencjał masy, a diodami sterujemy podając na stosowne anody potencjał dodatni.
Wyświetlanie znaków alfanumerycznych polega na wprowadzeniu w stan przewodzenia diod LED odpowiednich segmentów. Jak już wspomniano, wyświetlaczami ze wspólna anodą sterujemy podając na katody niskie stany logiczne "0
", a wyświetlaczami ze wspólna katodą podając na anody wysokie stany logiczne "1
" (Tab. 1).
Znak | Wyświetlacz | Segment (zob. Fig. 2) | Liczba dziesiętna | |||||||
---|---|---|---|---|---|---|---|---|---|---|
a | b | c | d | e | f | g | DP | |||
CA | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | 3 | |
CC | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 0 | 252 | |
CA | 1 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 159 | |
CC | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 96 | |
CA | 0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 37 | |
CC | 1 | 1 | 0 | 1 | 1 | 0 | 1 | 0 | 218 | |
CA | 0 | 0 | 0 | 0 | 1 | 1 | 0 | 1 | 13 | |
CC | 1 | 1 | 1 | 1 | 0 | 0 | 1 | 0 | 242 | |
CA | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 153 | |
CC | 0 | 1 | 1 | 0 | 0 | 1 | 1 | 0 | 102 | |
CA | 0 | 1 | 0 | 0 | 1 | 0 | 0 | 1 | 73 | |
CC | 1 | 0 | 1 | 1 | 0 | 1 | 1 | 0 | 182 | |
CA | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 1 | 65 | |
CC | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 0 | 190 | |
CA | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 31 | |
CC | 1 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 224 | |
CA | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 1 | |
CC | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 0 | 254 | |
CA | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 9 | |
CC | 1 | 1 | 1 | 1 | 0 | 1 | 1 | 0 | 246 |
Podczas pracy z wyświetlaczami 7-segmentowymi LED oraz układami mikrokontrolerów np. Arduino należy zwrócić uwagę na podstawowe parametry prądowo-napięciowe. Układy Arduino korzystają z logiki 5-Voltowej i posiadają ograniczenie prądowe pinów cyfrowych (GPIO) 20mA. Umożliwienie przepływu większego prądu może spowodować zniszczenie układu mikrokontrolera. Sterowanie wyświetlaczami za pomoca pinów cyfrowych Arduino będzie więc zasilało je napięciem 5V z ograniczeniem prądowym 20mA. Należy obliczyć wielkość rezystorów, które będą podłączone do diod wyświetlaczy i które ograniczą prąd i obniżą napięcie zasilania do odpowiedniego dla danego typu diod użytych w wyświetlaczu. Dla prezentowanego wyświetlacza 7-segmentowego SA15-11SRWA nota katalogowa informuje, że napięcia przewodzenia są inne dla diod segmentów a-g (3,6-4,6V), a inne dla diody DP (1,8-2,3V). Dla uproszczenia przyjmijmy, że dla wszystkich diod wyświetlacza zastosujemy jedną wartość napięcia przewodzenia 1,85V. Aby obniżyć napięcie zasilania 5V do oczekiwanego 1,85V musimy je obniżyć o 5V - 1,85V = 3,15V. Musimy więc użyć takiego rezystora aby przy znanym ograniczeniu prądowym 20mA utworzył on spadek napięcia 3,15V. Z prawa Ohma R = U / I, możemy obliczyć jego wartość. Podstawiając do wzoru R = 3,15V / 0,02A otrzymujemy rezystancję 157Ω. Teraz możemy przystąpić do budowy pierwszego układu.
Pierwszy układ aplikacyjny wyświetlacza 7-segmentowego wykonano przy użyciu wyświetlacza ze wspólną anodą SA15-11SRWA, układu mikrokontrolera i przy założeniu braku dodatkowych urządzeń sterujących (Fig. 4). Jego zadaniem będzie wyświetlanie w pętli cyfr od 0 do 9.
Do zasilania układu będzie wykorzystane złącze USB mikrokontrolera. Anody segmentów wyświetlacza SA15-11SRWA podłączono do +5V zasilania (Fig. 2, 5, 6). Będą poprzez rezystory ograniczające prąd 160Ω sterowane niskim stanem podawanym na piny cyfrowe układu Arduino D2-D9 (Tab. 2).
Wyświetlacz | Arduino | |
---|---|---|
pin | segment | pin |
1 | Anoda | +5V |
2 | e | D6 |
3 | d | D5 |
4 | c | D4 |
5 | Anoda | +5V |
6 | b | D3 |
7 | a | D2 |
8 | DP | D9 |
9 | f | D7 |
10 | g | D8 |
W szkicu zdefiniowano funkcje wyświetlające cyfry 1-9 (number_one(), number_two(),..., number_nine()). Korzystając z Tab. 1, dla każdej wyświetlanej cyfry, zdefiniowano w nich, które z segmentów mają zostać zaświecone, a które wygaszone. W pętli loop() funkcje te są kolejno wykonywane z półsekundowymi przerwami.
Podobnie jak w projekcie pierwszym do sterowania wyświetlaczem 7-segmentowym wykorzystamy mirokontroler Arduino NANO. Tym razem jednak, zamiast sterować każdym segmentem LED za pomocą osobnego pinu GPIO, wykorzystamy rejestr przesuwny 74HC595 i transmisję równoległą.
rejestr przesuwny | wyświetlacz | ||
---|---|---|---|
wyjście | pin | segment | pin |
QA | 15 | a | 7 |
QB | 1 | b | 6 |
QC | 2 | c | 4 |
QD | 3 | d | 3 |
QE | 4 | e | 2 |
QF | 5 | f | 9 |
QG | 6 | g | 10 |
QH | 7 | DP | 8 |
Szkic wysyła do rejestru przesuwnego 74HC595 w pętli kolejne elementy zdefiniowanej tablicy digits[]
. Elementy tablicy to liczby w układzie dziesiętnym, które w rzeczywistości są zakodowanymi sygnałami sterującymi wyświetlaczem (zob. Tab. 1). W związku z tym, że korzystamy z wyświetlacza ze wspólną anodą, w tabeli interesują nas wyłącznie kody wierszy CA. Funkcja shiftOut()
w kolejnych taktach sygnału zegarowego, szeregowo, po jednym bicie, wysyła na pin cyfrowy 4 mikrokontrolera (wyjście danych) bajt danych. Atrybut LSBFIRST
funkcji odpowiada za to aby do rejestru przesuwnego przesyłać bity elementów tablicy w kolejności od najmłodszego (LSB - skrajnie lewy) do najstarszego (MSB - (najbardziej prawy).