- moduł na bazie wyświetlacza LCD z kontrolerem SSD1803A,
- programowe sterowanie kontrastem,
- dwa rozmiary znaków do wyboru (2,6 mm, 4,55 mm),
- możliwość zastosowania jednej z kilku wersji kolorystycznych podświetlenia,
- komunikacja z modułem: I²C (wbudowany translator poziomów),
- napięcie zasilania: 3...5 V.
Wyświetlacz przyda się w aplikacjach prezentujących niewielką ilość danych tekstowych – gdy popularne ekrany OLED okazują się zbyt małe, a przez to nieco nieczytelne, natomiast gabaryty typowych modułów z kontrolerem HD44780 – po prostu zbyt duże.
Schemat układu ukazano na rysunku 1. Minimoduł korzysta z wyświetlacza LCD EA DOGS104(x) z wbudowanym kontrolerem SSD1803A. Dzięki rozbudowanemu sterownikowi otrzymujemy do dyspozycji generator znaków, możliwość programowego sterowania kontrastem wyświetlanej informacji, zachowaniem kursora, rotacją wyświetlanego tekstu – oraz elastyczną konfigurację ekranu. DOGS104 umożliwia pokazywanie 4 linii po 10 znaków (o wysokości 2,6 mm) lub 2 linii po 10 znaków (o wysokości 4,55 mm) oraz ich dowolnych kombinacji, np. jednej linii 4,55 mm i dwóch 2,6 mm.
Ten prosty zabieg pozwala akcentować istotne dane większą wysokością czcionki, a znaki o standardowej wysokości zarezerwować dla pozostałych parametrów – i pomimo niewielkich rozmiarów wyświetlacza (wynoszących 36×25,4 mm), znacząco podnosi czytelność prezentowanej informacji. Wyświetlacz wykonany został w formie modułu na szkle (DOG) oraz wyposażony w łatwe do montażu wyprowadzenia szpilkowe w rastrze 2,54 mm. Komponent dostępny jest w kilku wykonaniach:
- EA DOGS104N-A – odbiciowy, bez możliwości zastosowania podświetlania,
- EA DOGS104W-A – transrefleksyjny, z możliwością podświetlania,
- EA DOGS104B-A – transrefleksyjny negatywowy, z możliwością podświetlania.
Iluminację wykonano nieco niestandardowo – żaden typ wyświetlacza nie ma wbudowanego fabrycznie podświetlenia. O zastosowaniu i doborze typu elementu decyduje użytkownik. Dostępne są trzy odmiany modułu EA LED36X28, różniące się kolorami użytych diod świecących:
- EA LED36X28-A – podświetlenie w kolorze bursztynowym,
- EA LED36X28-GR – podświetlenie dwukolorowe, czerwono-żółtozielone,
- EA LED36X28-ERW – podświetlenie trójkolorowe, czerwono-biało-zielone.
Podświetlenie modułu montowane jest metodą „na kanapkę” pod właściwym ekranem. Zaprezentowany w artykule minimoduł współpracuje z wyświetlaczami typu 104N/W i podświetleniami A/GR.
DOGS104x ma wbudowane wszystkie elementy odpowiadające za generowanie napięć niezbędnych dla LCD, co upraszcza aplikację do kilku kondensatorów odsprzęgających. Nie jest wymagany potencjometr kontrastu jak w klasycznym znakowym LCD, gdyż jego regulacja odbywa się programowo. Do komunikacji z LCD wybrano magistralę I²C, przy czym wyprowadzenie SA0 (poprzez odpowiednie zalutowanie zwory ADRD) pozwala na wybór jednego z dwóch adresów 0x3C/0x3D. Za poprawny restart LCD po włączeniu zasilania odpowiada generator impulsu (stan niski) sygnału RES, oparty na bramkach układu U3.
Minimoduł może być zasilany napięciem w zakresie 3...5 V, za generację wewnętrznego napięcia zasilania 2,7 V odpowiada stabilizator LDO U2 typu MCP1700T. Konwersja poziomów pomiędzy współpracującym układem a wyświetlaczem LCD realizowana jest poprzez układ U1 typu ISO1640. Ze względu na wysoką rezystancję wyprowadzeń wyświetlacza – wykonanego w technologii DOG (nawet do kilkuset omów) – niestety nie zachowuje on poziomów logicznych w stanie niskim (offset Vol). W przypadku współpracy z układami magistrali I²C z niskimi wartościami rezystorów polaryzacyjnych rezystancja wewnętrzna tworzy dodatkowy dzielnik, podnoszący poziom stanu niskiego ponad wymogi standardu I²C. Jest to szczególnie istotne, gdyż może skutkować nieprawidłowym odczytaniem stanu sygnału ACK, powodując tym samym problemy z komunikacją. Konwerter poziomów – oprócz dopasowania poziomów napięcia – pełni także funkcje bufora separującego wyświetlacz od obciążenia współpracującą magistralą I²C. Niestety, proste konwertery oparte o kluczowane tranzystory MOS (np. BSS138 lub PCA9603) nie zapewniają poprawnej współpracy, wprowadzając dodatkowy offset napięcia, potęgujący problem oraz wymagają zachowania sporej różnicy napięć zasilania pomiędzy stronami konwertera, co przy założeniach zasilania 3...5 V okazuje się niemożliwe do osiągnięcia. W przypadku zastosowania wyświetlacza z podświetleniem, w minimodule przewidziano możliwość sterowania jego jasnością za pomocą układu generatora PWM U4 typu PCA9632. Układ pozwala na wybór zworą ADRB jednego z dwóch adresów 0x60/0x61 magistrali.
Rezystory RG, RY, RYR ograniczają prąd diod modułu podświetlenia, zwora ZY łączy strony podświetlenia w przypadku wersji bursztynowej. W zależności od typu zastosowanego podświetlenia montowane są odpowiednio elementy ZY, RY, RYR – dla wersji bursztynowej (LED-A) lub RG, RYR – dla wersji czerwono-żółtozielonej (LED-GR). Maksymalny prąd diod ustalony został na 4 mA na każdą sekcję LED, co zapewnia sensowny kompromis pomiędzy poborem mocy a maksymalną jasnością podświetlenia. W przypadku wersji dwukolorowej (LED-GR), poprzez odpowiednie sterowanie PWM – oprócz regulacji jasności – można uzyskać zmianę barwy na pośredni pomiędzy czerwienią i zielenią. Opcję tę warto zastosować w aplikacji do prostej i czytelnej sygnalizacji stanów awaryjnych lub przekroczenia parametrów. Układ zasilany jest napięciem 3...5 V, które wraz z magistralą I²C doprowadzone są do modułu za pomocą złączy I²CA/B w standardzie Grove i QWIIC. Pobór prądu, w zależności od typu wyświetlacza i jasności podświetlenia, zawiera się w zakresie 1...10 mA.
I²C_LCD_DOGS104BL zmontowany został na dwustronnej płytce drukowanej. Rozmieszczenie elementów zaprezentowano na rysunku 2a, b.
Montaż jest typowy i nie wymaga opisu. W zależności od wyboru wyświetlacza i typu podświetlenia należy zamontować odpowiednie elementy RG, RY, RYR, ZY (lub pominąć układ PWM w przypadku wyświetlacza DOGS104N-A). Do montażu ekranu można użyć kielichowych gniazd precyzyjnych, wtedy będzie możliwe łatwe rozłączenie i wymiana współpracującego modułu.
Zmontowane urządzenie ukazano na fotografii 1. Nie wymaga ono uruchamiania, należy skonfigurować tylko adresację oraz połączenie podświetlania. Adres bazowy określa położenie zwór ADRD, ADRB.
Do szybkiego sprawdzenia działania wyświetlacza i podświetlenia z Arduino użyto bibliotek SSD1803A_I²C – przykładowy program testowy zamieszczono na listingu 1.
#include <Arduino.h>
#include <SSD1803A_I²C.h>
#include <Wire.h>
const uint8_t i2cpwm = 0x61; //0x60:0x61
const uint8_t i2caddr = 0x3D; //0x3C:0x3D
const uint8_t resetPin = 3; // not used
SSD1803A_I²C lcd(i2caddr, resetPin);
void setup() {
// pca9632 init
Wire.begin(); // inicjacja I²C
delay(1);
Wire.beginTransmission(i2cpwm);
Wire.write(0x00);
Wire.write(0b10000000); // MODE1
Wire.endTransmission();
Wire.beginTransmission(i2cpwm);
Wire.write(0x01);
Wire.write(0b00000000); // MODE2, dim
Wire.endTransmission();
Wire.beginTransmission(i2cpwm);
Wire.write(0x06);
Wire.write(0xFF);
Wire.endTransmission();
Wire.beginTransmission(i2cpwm);
Wire.write(0x07);
Wire.write(0x00);
Wire.endTransmission();
Wire.beginTransmission(i2cpwm);
Wire.write(0x08);
Wire.write(0b10101010);
Wire.endTransmission();
Wire.beginTransmission(i2cpwm);
Wire.write(0x02);
Wire.write(0x00);
Wire.endTransmission();
Wire.beginTransmission(i2cpwm);
Wire.write(0x03);
Wire.write(0x00);
Wire.endTransmission();
// DOGS104 init
lcd.begin(DOGS104);
lcd.display(LINES_3_1);
delay(10);
lcd.locate(0, 0);
lcd.print("0123456789");
lcd.locate(1, 0);
lcd.print("abcdefghij");
lcd.locate(2, 0);
lcd.print("ABCDEFGHIJ");
lcd.locate(3, 0);
lcd.print("KLMNOPQRST");
lcd.write(0);
lcd.write(1);
lcd.display(CONTRAST);
lcd.display(CURSOR_OFF);
lcd.display(DISPLAY_ON);
}
void loop() {
for (int x = 0; x < 0xFF; x++) {
Wire.beginTransmission(i2cpwm);
Wire.write(0x02);
Wire.write(x); //PWM0/1 GR(Y) red/yellow up
Wire.endTransmission();
delay(10);
Wire.beginTransmission(i2cpwm);
Wire.write(0x03);
Wire.write(~x); //PWM1= ~PWM0 green down
Wire.endTransmission();
delay(10);
}
delay(1000);
}
Listing 1. Program testowy
Przed kompilacją należy zmienić adresy zgodnie z ustawieniami zwór na płytce.
Jeżeli wszystko działa poprawnie, można moduł zastosować we własnej aplikacji.
Adam Tatuś, EP
- R1, R2, R5, R6: 4,7 kΩ
- R3: 51 kΩ
- R4: 22 kΩ
- RG, RY, RYR: 150 Ω (opis)
- ZY: 0 Ω (opis)
- C1, C2, C9, C12: 100 nF
- C3...C7: 1 μF
- C8: 10 nF
- U1: IS1640BD (SO-8)
- U2: MCP1700T-2702E (SOT-23)
- U3: 74LVC2G14GW.125 (SC-88)
- U4: PCA9632DP2 (TSSOP10_050)
- LCD1: wyświetlacz LCD EADOGS104W-A (opis)
- I²CA: złącze Grove SMD kątowe
- I²CB: złącze JST 1 mm kątowe