- czteropozycyjny wyświetlacz matrycowy o organizacji 5×7 pikseli,
- zasilanie: 3,3...5 V/200 mA (min.),
- interfejs: I²C,
- programowe sterowanie zawartością wyświetlacza, jasnością oraz trybem migania,
- cztery wersje kolorystyczne do wyboru: czerwona, pomarańczowa, żółta, zielona.
W opisywanym module użyto czteroznakowego, alfanumerycznego wyświetlacza LED o organizacji matrycy 5×7 punktów. Zintegrowane ze sterownikiem wyświetlacze (H)DLx-3416 lub ich zamienniki były spotykane powszechnie w sprzęcie wojskowym lub wyższej klasy przyrządach pomiarowych. Co ciekawe, niektóre modele są dalej produkowane i dostępne u większych dystrybutorów. Decydując się na ten (dosyć spory) wydatek, możemy uatrakcyjnić interfejs użytkownika konstruowanego urządzenia, wyróżniający się niespotykanym wyglądem i kolorem świecenia, a przy okazji uniknąć obcowania z wysokim napięciem, co było konieczne w przypadku wyświetlaczy Nixie. W wersji oszczędnościowej i przy poświęceniu kilku chwil na wyszukanie stosownej oferty, można zastosować wyświetlacze z demontażu, dostępne czasem na aukcjach internetowych. Aby moduł dostosować do współczesnych wymogów, dodano możliwość regulacji natężenia świecenia matrycy LED oraz funkcję migania z określonym współczynnikiem wypełnienia. Dzięki zastosowaniu magistrali I²C oraz uniwersalnego zasilania 3,3...5 V moduł działa poprawnie z Raspberry Pi, STM32, Arduino i wieloma innymi platformami.
Schemat układu zaprezentowano na rysunku 1. Minimoduł bazuje na wyświetlaczu typu DLx-3416, gdzie x oznacza kolor świecenia matrycy LED. Dostępne wykonania to: O – czerwony, A – pomarańczowy, Y – żółty, G – zielony. Wyświetlacze z rodzin HDLx oraz DLx są wzajemnie kompatybilne pod względem wyprowadzeń, różnią się natomiast realizacją dodatkowych funkcji, np. możliwościami regulacji jasności czy sterowania kursorem. Wyświetlacze z serii HDLx mają dodatkowo uproszczony dekoder adresowy, co w prezentowanym module nie ma jednak znaczenia. Budowę wewnętrzną wyświetlacza pokazano na rysunku 2.
DLx-3416x ma wbudowane wszystkie elementy odpowiadające za wyświetlanie multipleksowe czterech znaków ASCII. Komunikacja odbywa się poprzez magistralę równoległą: szyna danych D0...D6 odpowiada za przesyłanie kodu znaku do wyświetlenia, sygnały A0, A1 wybierają aktywne pole wyświetlacza 3..0 (A1=A0=0 wybiera skrajnie prawą pozycję wyświetlacza), sygnał !WR aktywuje zapis danych z magistrali do kontrolera wyświetlacza, !CLR kasuje wyświetlaną zawartość i resetuje kontroler, sygnały CEx/!CEx aktywują wybór wyświetlacza w trybie adresowanym, przy jednoczesnej pracy kilku wyświetlaczy na jednej magistrali, ułatwiając budowę pól odczytowych o liczbie znaków większej niż cztery. Możliwe jest niezależne sterowanie kursorem za pomocą sygnałów CU/CUE. Sterownik wyświetlacza umożliwia wygaszanie lub – po dodaniu zewnętrznego generatora – regulację jasności, przy użyciu wyprowadzenia BL. Wszystkie sygnały aktywowane są poziomem logicznym. Wbudowane bloki generatora znaków i sterownika multipleksującego upraszczają oprogramowanie modułu.
Wyświetlacz DLx-3416 wymaga źródła zasilania 5 V o obciążalności co najmniej 200 mA (przy świecących 80 pikselach). Za dostarczenie zasilania 5 V do elementów układu odpowiada przetwornica U4 typu TPS63061, pracująca w zakresie napięć 3,3...5 V. Płytka umożliwia zamienne stosowanie układów TPS63061 o ustalonym na 5 V napięciu wyjściowym (w tym przypadku w miejsce rezystora R7 należy wlutować zworę) oraz TPS63060 o regulowanym dzielnikiem R6, R7 napięciu wyjściowym (w tym przypadku lutujemy elementy R6, R7 o wartościach podanych na schemacie).
Interfejs równoległy wyświetlacza połączony jest z GPIO ekspandera magistrali I²C U1 typu MCP23017 (adres 0x22). Sygnały danych podłączono do portu GPB, a sygnały sterujące – do portu GPA. Sterownik wyświetlacza umożliwia tylko zapis, więc oba rejestry odpowiedzialne za kierunek transmisji portów GPA, GPB ustawione są jako wyjścia. Układ U2 pełni funkcję konwertera poziomów magistrali I²C. Jeżeli nie przewidujemy konieczności uniwersalnego zasilania 3,3...5 V, a tylko 5 V (np. w przypadku współpracy z Arduino), możemy elementy przetwornicy U4 i konwertera poziomów U2 pominąć, montując odpowiednio zwory VCC, SDA, SCL. Ostatnim elementem jest układ generatora PWM (U3 typu PCA9633, adres 0x62), służący do programowej regulacji jasności wyświetlacza z użyciem sygnału wygaszania BL. PCA9633, oprócz generowania przebiegu PWM, ma możliwość wytwarzania sygnału o niskiej częstotliwości w celu realizacji programowej funkcji migania wyświetlacza (BLINK). Jeżeli sterowanie jasnością nie będzie wykorzystywane, można układ U3 pominąć, a dwustanowe sterowanie sygnałem BL, poprzez wlutowaną zaworę o tej samej nazwie, doprowadzić do GPA7 układu ekspandera U1. Zwory CE1, CE2 montowane są w zależności od wybranego typu wyświetlacza, zgodnie z kartą katalogową – w przypadku DLx-3416 powinny być wlutowane, zaś przy użyciu HDLx-3416 mogą być pominięte, gdyż wyświetlacz nie ma aktywnej adresacji na wyprowadzeniach 1,2.
Moduł zmontowany jest na dwustronnej płytce drukowanej (rysunek 3). Montaż jest typowy i nie wymaga opisu. W zależności od wyboru wyświetlacza i dodatkowych funkcji należy zamontować odpowiednie elementy, zgodnie z opisem. Do montażu wyświetlacza warto użyć kielichowych gniazd precyzyjnych, wtedy będzie możliwe łatwe rozłączenie i wymiana współpracującego wyświetlacza.
Gotowy moduł, współpracujący z minikomputerem Raspberry Pi, pokazano na fotografii otwierającej, która niestety nie jest w stanie oddać rzeczywistej czytelności i jakości wyświetlacza.
Zmontowany moduł nie wymaga uruchamiania, należy tylko sprawdzić obecność napięcia zasilania 5 V. Dla szybkiego sprawdzenia działania modułu i podświetlenia, za pomocą płytki Raspberry Pi, przygotowano odpowiedni skrypt testowy (listing 1).
echo "(H)DLx-3416 5x7 display test ADR=0x22/62"
i2cset -y 1 0x22 0x00 0x00
i2cset -y 1 0x22 0x01 0x00
i2cset -y 1 0x22 0x14 0x00
i2cset -y 1 0x22 0x15 0x20
i2cset -y 1 0x62 0x00 0x00
i2cset -y 1 0x62 0x01 0x34
i2cset -y 1 0x62 0x02 0x34
i2cset -y 1 0x62 0x06 0x7f
i2cset -y 1 0x62 0x07 0x1f
i2cset -y 1 0x62 0x08 0xff
i2cset -y 1 0x22 0x15 0x74
sleep 0.5
i2cset -y 1 0x22 0x14 0xa8
i2cset -y 1 0x22 0x14 0xac
i2cset -y 1 0x22 0x15 0x73
sleep 0.5
i2cset -y 1 0x22 0x14 0xa9
i2cset -y 1 0x22 0x14 0xad
i2cset -y 1 0x22 0x15 0x65
sleep 0.5
i2cset -y 1 0x22 0x14 0xaa
i2cset -y 1 0x22 0x14 0xae
i2cset -y 1 0x22 0x15 0x54
sleep 0.5
i2cset -y 1 0x22 0x14 0xab
i2cset -y 1 0x22 0x14 0xaf
i2cset -y 1 0x22 0x14 0xbf
echo "Quit"
Listing 1. Skrypt testowy
Pierwsze cztery polecenia konfigurują MCP23017 (adres 0x22) jako porty wyjściowe, kolejne sześć ustawia PCA9633 (adres 0x62) w tryb globalnego PWM+BLINK. Ostatnie cztery sekcje odpowiadają za zapis sekwencji znaków „tseT”, wyświetlanej jako „Test”. Wartość zapisywana do rejestru 0x02 PCA9633 odpowiada za jasność świecenia wyświetlacza, zaś zawartość rejestru 0x07 – za częstotliwość migania. Po szczegółowe informacje, niezbędne do implementacji sterowania wyświetlaczem, a także związane ze szczegółową konfiguracją układów MCP/PCA, odsyłam do odpowiednich not katalogowych. Aby oszczędzić dosyć drogi wyświetlacz i maksymalnie wydłużyć czas pracy, warto ograniczyć maksymalną jasność wyświetlania, przy okazji redukując nieco zużycie energii.
Po uruchomieniu skryptu testowego HDLx-3416.sh na wyświetlaczu powinien się pojawić przyciemniony i migający napis „Test”. Jeżeli wszystko działa poprawnie, można moduł zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1...R5: 4,7 kΩ (SMD 0402, 5%)
- R6: 100 kΩ (SMD 0402, 1% – patrz opis)
- R7: 910 kΩ (SMD 0402, 1% – patrz opis)
- C1...C4, C6: 100 nF (SMD 0402, 16 V)
- C5: 22 μF (SMD 0805, 16 V)
- C7...C9: 22 μF (SMD 0603, 10 V)
- DISP: wyświetlacz matrycowy (OSRAM HDLx-3416)
- U1: MCP23017-E/SS (SSOP28_065)
- U2: ISO1641BDR (SO8)
- U3: PCA9633DP1 (TSSOP8_065)
- U4: TPS63061DSC (WSON10)
- I²C: złącze Grove SMD kątowe (HY2.0-4P)
- L1: dławik SMD (typ: HPI0420-1R0)