Wyświetlacze SCD55100 firmy OSRAM to rodzina 10-znakowych wyświetlaczy LED o wielkości znaku 5×5 punktów, dostępnych w różnych kolorach. W przedstawionym projekcie użyty został wyświetlacz SCD55104A (kolor zielony, LED o podwyższonej jasności). W ofercie firmy OSRAM dostępne są również wyświetlacze z inną liczbą znaków oraz ze znakami wielkości 5×7 punktów. 



Rozmieszczenie wyprowadzeń wyświetlacza zostało przedstawione na rysunku 1. Funkcje poszczególnych wyprowadzeń są następujące:



  • SDCLK – linia zegarowa interfejsu szeregowego,

  • LOAD – stan niski na linii odblokowuje interfejs szeregowy wyświetlacza,

  • RST – stan niski na linii spowoduje wyzerowanie pamięci układu sterującego wyświetlaczem,

  • CLK I/O – w zależności od stanu CKSEL wejście lub wyjście sygnału zegarowego interfejsu szeregowego,

  • CKSEL – stan niski na linii oznacza, że interfejs szeregowy taktowany będzie sygnałem zegarowym generowanym przez wyświetlacz, linia CLK I/O będzie wyjściem sygnału zegarowego. W innym przypadku CLK I/O jest wejściem sygnału zegarowego,

  • DATA – linia danych interfejsu szeregowego (stan linii odczytywany jest na narastającym zboczu zegara),

  • VCC – zasilanie wyświetlacza,

  • GND – masa.


Rys. 1. Rozmieszczenie wyprowadzeń wyświetlacza OSRAM SCD5510XA


Transmisja danych do wyświetlacza realizowana jest przez wysyłanie ramek długości 8 bitów, na rysunku 2 została przedstawiona taka ramka. Kolejne ramki powinny być wysyłane w odstępach co najmniej 600 ns, a okres sygnału zegarowego musi być większy bądź równy 200 ns, co odpowiada częstotliwości linii zegarowej 5 MHz. W celu wyświetlenia znaku na wyświetlaczu należy wysłać komendę Load Character Address z odpowiednim parametrem, który informuje wyświetlacz o tym, którym segmentem chcemy sterować. Budowa rozkazu  Load Character Address, z przykładowymi wartościami, została przedstawiona w tabeli 1.



Rys. 2. Ramka danych


Tab. 1. Komenda Load Character Address































































































































Komenda Parametr Szesnastkowo Operacja
bit D7 bit D6 bit D5 bit D4 bit D3 bit D2 bit D1 bit D0
1 0 1 1 0 0 0 0 0xB0 Znak 0
1 0 1 1 0 0 0 1 0xB1 Znak 1
1 0 1 1 0 0 1 0 0xB2 Znak 2
1 0 1 1 0 0 1 1 0xB3 Znak 3
1 0 1 1 0 1 0 0 0xB4 Znak 4
1 0 1 1 0 1 0 1 0xB5 Znak 5
1 0 1 1 0 1 1 0 0xB6 Znak 6
1 0 1 1 0 1 1 1 0xB7 Znak 7
1 0 1 1 1 0 0 0 0xB8 Znak 8
1 0 1 1 1 0 0 1 0xB9 Znak 9

 W następnym kroku należy wysłać pięć bajtów. Każdy z wysyłanych bajtów zawiera informacje o jednym wierszu dla wskazanego segmentu. Przy czym trzy najstarsze bity służą do wyboru wiersza, a pięć młodszych bitów zawiera informację o tym, które piksele chcemy zapalić. Bit o wartości „1” oznacza zapalony piksel, a bit o wartości „0” – zgaszony. W tabeli 2 zostały rozpisane transmitowane dane dla kolejnych wierszy jednego segmentu.


Tab. 2. Ładowanie danych znaku


































































Wybór wiersza Dane Numer wiersza
bit D7 bit D6 bit D5 bit D4 bit D3 bit D2 bit D1 bit D0
0 0 0 C0 C1 C2 C3 C4 0
0 0 1 C0 C1 C2 C3 C4 1
0 1 0 C0 C1 C2 C3 C4 2
0 1 1 C0 C1 C2 C3 C4 3
1 0 0 C0 C1 C2 C3 C4 4


Rys. 3. Sposób wyliczenia wartości bajtów dla znaku “D”


Wyświetlacz ma możliwość wyboru jasności świecenia pikseli, dostępnych jest sześć zdefiniowanych wartości: 100%, 53%, 40%, 27%, 20%, 13% i 6,6%. Mimo dużej różnicy w wartościach skoku między poziomami jasności (od 47% do 6,4%) zmiany przez oko ludzkie odbierane są jako równomierne. Komendy służące do wyboru jasności zostały przedstawione w tabeli 3. Domyślna jasność świecenia wyświetlacza to 100%. Przy czym producent zaznacza, że dla jasności 100% nie powinno się zapalać więcej niż 128 pikseli jednocześnie.


Tab. 3. Komendy wyboru jasności świecenia wyświetlacza



























Komenda Jasność świecenia wyświetlacza
0xF0 100%
0xF1 53%
0xF2 40%
0xF3 27%
0xF4 20%
0xF5 13%
0xF6 6,60%

Wyświetlacz można przełączyć w tryb Power-Down wysyłając bajt 0xFF. W trybie tym pobór prądu spada do 50 uA. Aby wyzerować pamięć wyświetlacza (czyli również zgasić wszystkie piksele) należy wysłać komendę Software Clear, czyli bajt o wartości 0xC0.


W przedstawionej aplikacji wykorzystane zostały dwa wyświetlacze, które są sterowane przez mikrokontroler STM32F103, a konkretnie przez wbudowany w mikrokontroler interfejs SPI1. Ponieważ komunikacja odbywa się w jedną stronę (od mikrokontrolera do wyświetlaczy) wystarczy skonfigurować interfejs do pracy jednokierunkowej, z wykorzystaniem dwóch linii: zegarowej SCLK (PA5) dołączoną do wejść SDCLK wyświetlaczy oraz linii MOSI (PA7) dołączone do wejść DATA wyświetlacza. Linia PA4 dołączona jest do wejścia RST wyświetlacza. Linie PA8 i PA9 dołączone są do wejść LOAD kolejnych wyświetlaczy, służą one do wyboru wyświetlacza do którego chcemy wysłać dane. Aby transmitowane dane trafiły do pierwszego wyświetlacza trzeba podczas transmisji ustawiać stan niski na wyjściu PA8 i wysoki na PA9, dla wyświetlacza drugiego odwrotnie. Wejścia CKSEL wyświetlacza dołączone jest do VCC, wynika to z faktu iż sygnał zegarowy podawany będzie z interfejsu SPI1 mikrokontrolera. Połączenia te zostały przedstawione na rysunku poniżej.



Rys. 4. Schemat połączeń


 Aby ułatwić czytelnikom zastosowanie wyświetlacza SCD5510XA we własnych aplikacjach przygotowana została  biblioteka, w języku C, do obsługi tego wyświetlacza. Funkcje w bibliotece są podzielone na dwie grupy: funkcje zależne od platformy sprzętowej oraz funkcje od niej niezależne. Funkcja SCD5510XA_InitDisplay służy do inicjalizacji peryferii mikrokontrolera. Działanie funkcji sprowadza się do włączenia zegarów dla portu A oraz interfejsu SPI1, konfiguracji linii PA5 i PA7 jako Alternate-function push-pull (dla interfejsu SPI1), oraz linii PA4 (linia RST), PA8 i PA9 (linie LOAD) jako wyjścia push-pull. W następnym kroku przeprowadzana jest konfiguracja SPI1, na końcu działania funkcji podawany jest na chwilę stan niski na linię RST aby wyzerować pamięć wyświetlaczy i, zgodnie z zaleceniem z dokumentacji SCD5510XA, wysyłana jest komenda Software Clear do obu wyświetlaczy. Poniżej przedstawiono kod funkcji SCD5510XA_InitDisplay.


Listing 1. Kod funkcji inicjalizującej peryferia używane w komunikacji z wyświetlaczem SCD5510XA

Kolejną funkcją jest DispDelay, służy ona do wywoływania, między transmisjami kolejnych bajtów przez SPI, opóźnienia. Czas wykonania tej funkcji powinien wynosić co najmniej 600 ns.


Listing 2. Funkcja opóźniająca

Funkcja SCD5510XA_SelectDisplay służy do wyboru wyświetlacza, do którego przeprowadzana będzie transmisja danych. Wybór wyświetlacza zależny jest od wartości parametru dispNum. Natomiast wskaźniki nLOAD_High i nLOAD_Low zawierają adresy funkcji sterujących linią PA8 lub PA9.


Listing 3. Definicje sterowania liniami PA8 i PA9 oraz funkcja realizująca proces wyboru wyświetlacza

Ostatnią funkcją jest SPI_Transmit, służy ona do wysyłania bajta danych do wybranego wyświetlacza. Pętla while w kodzie funkcji służy do odczekania na wyzerowanie flagi BSY rejestru SR. Zapobiega to wywołaniu funkcji, na którą wskazuje wskaźnik nLOAD_High, przed zakończeniem transmisji. Jeśli mikrokontroler nie czekałby na wyzerowanie tej flagi to stan wysoki podany na linię LOAD wybranego wyświetlacza zbyt wcześnie i transmisja nie zostałaby przeprowadzona poprawnie.


Listing 5. Funkcja SPI_Transmit wysyłająca dane przez magistralę SPI

 W przypadku potrzeby przeniesienia biblioteki na inną platformę sprzętową wymagane jest tylko dostosowania powyższych funkcji do wykorzystywanego mikrokontrolera. Aby dodać kolejne wyświetlacze należy rozszerzyć funkcję SCD5510XA_SelectDisplay, służącą do wyboru wyświetlacza. Natomiast pozostałe funkcje są niezależne od sprzętu, są to:



  • SCD5510XA_DisplayPowerDown – przełącza wyświetlacz w tryb Power-Down przez wysłanie komendy 0xFF,

  • SCD5510XA_ClearDisplay – zeruje pamięć wyświetlacza przez wysłanie komendy 0xC0,

  • SCD5510XA_SetDisplayBrightness (unsigned char brightnessLevel) – ustawia jasność świecenia wyświetlacza w zależności od wartości parametru: 0 – 100%, 1 – 53%, 2 – 40%, 3 – 27%, 4 – 20%, 5-13%, 6 – 6,6%,

  • SCD5510XA_WriteChar (char col, char character) – wyświetla znak o kodzie ASCII równym wartości parametru character w kolumnie zdefiniowanej przez col,

  • SCD5510XA_WriteString(char * s) – wyświetla na wyświetlaczu łańcuch znaków.

Ponieważ wyświetlacz nie ma wbudowanej pamięci z czcionką, to w pliku font.h umieszczona została tablica font zawierającą definicję znaków wielkości 5×5. Wzór każdego znaku jest zdefiniowany przez 5 kolejnych bajtów, każdy znak jest umieszczony w osobnym wierszu i jest opatrzony komentarzem. Na listingu poniżej przedstawiono fragment definicje tej tablicy. Czcionka jest wzorowana na przedstawionej w dokumentacji wyświetlacza SCD5510XA. Przy czym tablica w pliku font.h nie definiuje wszystkich znaków (m.in. polskich liter).


Listing 6. Fragment deklaracji tablicy prezentacji znaków

Przykładowy projekt przygotowany został dla środowiska Keil uVision. Funkcja main przedstawiona została na listingu 7. W pierwszym kroku wywołana zostaje funkcja System_Config, która dokonuje konfiguracji mikrokontrolera, oprócz standardowej konfiguracji (praca z HSE, zegar 72 MHz, konfiguracja PLL itp.) konfigurowany jest SysTick. Służy onwykorzystany do odmierzenia sekundowych opóźnień. Następnie wywołana jest przedstawiona wcześniej funkcja SCD5510XA_InitDisplay, oraz wybierany jest pierwszy wyświetlacz (SCD5510XA_SelectDisplay(1)) i wyświetlany jest na nim napis „SCD5510XA”. Potem wybierany jest drugi wyświetlacz i w pętli wyświetlane są kolejne niepuste znaki z tablicy font wraz z przeprowadzaną zmianą jasności świecenia wyświetlacza.


Listing 7. Funkcja main przedstawionego programu