- wbudowany 8-pozycyjny, 14-segmentowy wyświetlacz LCD,
- sterowanie za pośrednictwem kontrolera PCA8551A,
- interfejs: I²C (złącza zgodne ze standardami QWIIC oraz Grove),
- napięcie zasilania: 3,3...5 V,
- częstotliwość odświeżania: 32...128 Hz,
- obsługa trybu automatycznego migania: 0,5...2 Hz.
Zastosowany wyświetlacz VIM-878 używany jest w zestawach uruchomieniowych, szczególnie tych, w których położono nacisk na niski pobór mocy. Dlaczego więc nie mielibyśmy użyć go we własnych aplikacjach? Do tego właśnie służy opisany w artykule ekspander. Osiem cyfr składających się z 14 segmentów pozwala na wyświetlenie nie tylko cyfr, ale i liter oraz znaków specjalnych, a zastosowany w układzie wyspecjalizowany kontroler PCA551A upraszcza sterowanie. Moduł jest zgodny z Raspberry Pi Pico, płytkami na bazie STM32, Arduino i wieloma innymi.
Do sterowania wyświetlaczem zastosowano kontroler PCA8551A, którego strukturę wewnętrzną pokazuje rysunek 1.
PCF8551A zawiera układ drivera i polaryzacji wyświetlacza LCD pracującego w trybie multipleksowym. Umożliwia wysterowanie do 35 segmentów (SEG) z maksymalnie czterema elektrodami wspólnymi (COM). Układ obsługuje tryb statyczny i multipleksowany 1:2/3/4 wraz z generowaniem napięcia zasilającego elektrody wspólne. PCA8551A ma wbudowany generator taktujący, obwody resetu (POR) oraz rejestry pamięci przechowujące kształt wyświetlanego znaku. Nie zabrakło oczywiście kontrolera interfejsu I²C o szybkości transmisji do 400 kHz. Dostępna jest też wersja PCA8551B z łączem SPI.
Schemat układu pokazano na rysunku 2. Układ U2 taktowany jest wbudowanym generatorem. Magistrala I²C doprowadzona została do złączy I²C/I²CA zgodnych ze standardami QWIIC/Grove. PCA8551A widoczny jest na magistrali I²C pod adresem ustalonym na 0x38. Moduł wymaga zasilania w zakresie 3,3...5 V, a wbudowane w U2 obwody resetu POR (aktywowane stanem wysokim wyprowadzenia PORE) zapewniają prawidłowy restart po włączeniu zasilania. Stabilizator U1 doprowadza zasilanie 3 V do wyświetlacza LCD niezależnie od napięcia zasilającego U2, co zapewnia elastyczność aplikacji.
Do wyprowadzeń SEG0..31 podłączone zostały segmenty wyświetlacza LCD, zaś elektrody wspólne współpracują z wyprowadzeniami COM0...3. Warto zauważyć, że nie jest zachowana kolejność połączeń z wyświetlaczem – schemat uwzględnia bowiem możliwie prostą mozaikę obwodu drukowanego, gdyż i tak przypisanie segmentów można uporządkować programowo. Model współpracuje z miniaturowym wyświetlaczem VIM-878-DP-RC-S-LV, który umożliwia wyświetlenie ośmiu znaków czternastosegmentowych o wysokości 7 mm, wraz z przecinkami i separatorem dziesiątek (apostrofem).
Układ zmontowany jest na niewielkiej dwustronnej płytce drukowanej – rozmieszczenie elementów na PCB pokazano na rysunkach 3a i 3b. Montaż jest typowy i nie wymaga dokładniejszego opisu. Podczas montażu należy zachować wymogi ESD, gdyż układ PCF i wyświetlacz mogą zostać uszkodzone przez ładunki statyczne. Przed przylutowaniem wyświetlacza warto ustalić mechanicznie jego położenie za pomocą paska samoprzylepnej dwustronnej taśmy piankowej, unikając przy tym naprężania wyprowadzeń drutowych tego delikatnego komponentu. Zmontowany moduł można zobaczyć na fotografii tytułowej.
Do sterowania konieczna jest konfiguracja układu oraz przypisanie segmentów LCD. Literowe oznaczenia poszczególnych pól wyświetlacza 14-segmentowego zobrazowano na rysunku 5. Znaki ponumerowane są od lewej strony wyświetlacza cyframi 1...8.
Sterowanie wyświetlaczem odbywa się poprzez rejestry układu PCA8551A – ich mapę pokazano na rysunku 6.
Układ udostępnia cztery rejestry sterujące pod adresami 0x00...0x03 i 20 rejestrów przechowujących kształt wyświetlonego znaku przypisanego do elektrody wspólnej (0x04...0x17). W przypadku wyświetlacza typu VIM-878 tryb multipleksowania oraz napięcia elektrod (MUX=1:4, BIAS=1/3) odpowiadają ustawieniom domyślnym PCA8551A. Aby uruchomić wyświetlanie, wystarczy określić częstotliwość odświeżania z zakresu 32 Hz...128 Hz (FF[1:0], domyślnie 64 Hz), załączyć oscylator OSC w rejestrze kontrolnym Device_Ctrl(0x01), skonfigurować tryb pracy podłączonego wyświetlacza: BOOST, MUX[1:0], B(BIAS) w rejestrze kontrolnym Device_Ctrl_1(0x02) oraz aktywować sterownik DE. Dodatkowo można wykorzystać tryb automatycznego migania BL[1:0] z częstotliwością w zakresie 0,5...2 Hz oraz określić tryb sterowania kompensujący składową stałą INV (linia/ramka) w Device_Ctrl_2(0x03). Szczegółowy opis rejestrów zamieszczono w karcie katalogowej PCA8551A dołączonej do materiałów dodatkowych.
Do sterowania segmentami LCD wykorzystane są rejestry COM0..3, w związku z wykorzystaniem wyprowadzeń SEG0..31, aktywne są tylko cztery z pięciu rejestrów każdego zestawu COM pod adresami 0x04-0x07, 0x09-0x0C, 0x0E-0x11 i 0x13-0x16. Przypisanie fizycznych segmentów LCD przedstawiono w tabeli 1.
Po prawidłowym montażu moduł LCD nie wymaga uruchamiania. W celu szybkiego sprawdzenia działania nakładki, zmontowaną płytkę można podłączyć do Raspberry Pi, co pozwoli zweryfikować obecność modułu na magistrali poleceniem:
którego wynik działania widać na rysunku 6.
Jeżeli układ jest dostępny na magistrali, możemy określić parametry wyświetlania (MUX, BIAS, BL) w rejestrach konfiguracyjnych:
i2cset -y 1 0x38 0x02 0x01
i2cset -y 1 0x38 0x03 0x00
oraz wysterować testowo wszystkie segmenty LCD:
..
i2cset -y 1 0x38 0x16 0xFF
można też wypróbować tryb migania:
Wszystkie polecenia można wykonać skryptem pca8551a.sh z listingu 1.
#PCA8551A test 8x14seg
echo "PCA8551 Test – ‘8.’8.’8.’8.’8.’.8.’.8.’8. blink"
i2cset -y 1 0x38 0x01 0x00
i2cset -y 1 0x38 0x02 0x01
i2cset -y 1 0x38 0x03 0x06
i2cset -y 1 0x38 0x04 0xFF
i2cset -y 1 0x38 0x05 0xFF
i2cset -y 1 0x38 0x06 0xFF
i2cset -y 1 0x38 0x07 0xFF
i2cset -y 1 0x38 0x09 0xFF
i2cset -y 1 0x38 0x0A 0xFF
i2cset -y 1 0x38 0x0B 0xFF
i2cset -y 1 0x38 0x0C 0xFF
i2cset -y 1 0x38 0x0E 0xFF
i2cset -y 1 0x38 0x0F 0xFF
i2cset -y 1 0x38 0x10 0xFF
i2cset -y 1 0x38 0x11 0xFF
i2cset -y 1 0x38 0x13 0xFF
i2cset -y 1 0x38 0x14 0xFF
i2cset -y 1 0x38 0x15 0xFF
i2cset -y 1 0x38 0x16 0xFF
sleep 2
echo "PCA8551a Test – LCD14SEG"
i2cset -y 1 0x38 0x03 0x00
i2cset -y 1 0x38 0x04 0x10
i2cset -y 1 0x38 0x05 0x00
i2cset -y 1 0x38 0x06 0x2A
i2cset -y 1 0x38 0x07 0xA8
i2cset -y 1 0x38 0x09 0xA0
i2cset -y 1 0x38 0x0A 0x8A
i2cset -y 1 0x38 0x0B 0x5B
i2cset -y 1 0x38 0x0C 0xA0
i2cset -y 1 0x38 0x0E 0xA0
i2cset -y 1 0x38 0x0F 0x17
i2cset -y 1 0x38 0x10 0xAA
i2cset -y 1 0x38 0x11 0xA1
i2cset -y 1 0x38 0x13 0x28
i2cset -y 1 0x38 0x14 0xA8
i2cset -y 1 0x38 0x15 0x00
i2cset -y 1 0x38 0x16 0x04
echo "Quit"
Listing 1. Skrypt testowy PCA8551A
Efekt działania skryptu pokazano na fotografii tytułowej. W pierwszej kolejności zaświecone (miganie 1 Hz) są wszystkie segmenty, co pozwala skontrolować poprawność montażu. Następnie wyświetlony zostanie tekst „LCD14SEG”.
Podczas testów pobór prądu modułu (zasilanego napięciem 3,3...5 V), w którym wysterowano wszystkie segmenty, wynosił poniżej 5,5 μA przy odświeżaniu 32 Hz i wzrastał do 15,5 μA przy częstotliwości odświeżania 128 Hz. W trybie wyłączonego wyświetlania (DE=0) pobór prądu wynosił poniżej 1 μA, co w praktyce sprowadza się głównie do prądu spoczynkowego stabilizatora U1. Niskie zużycie energii pozwala zasilać wyświetlacz z niewielkiej baterii przez długi czas.
Jeżeli wszystko działa poprawnie, można moduł wykorzystać we własnej aplikacji – powodzenia.
Adam Tatuś, EP
- R1, R2: 10 kΩ
- C1: 100 nF
- C2, C3: 1 μF
- U1: AP2138N-3.0TRG1 (SOT-23)
- U2: PCF8551ATT (TSSOP48_050)
- I2C: złącze JST 1 mm
- I2CA: złącze Grove SMD kątowe
- LCD: wyświetlacz LCD 8×14 segmentów (typ: VIM-878-DP-RC-S-LV)