Prezentowany w artykule projekt wykonano z użyciem bezpłatnego oprogramowania narzędziowego Intel Quartus Prime, które można pobrać ze strony internetowej https://goo.gl/kuHmWj. Moduł z kolorowym wyświetlaczem OLED-RGB dołączono do maXimatora zgodnie ze schematem pokazanym na rysunku 1 i opisem umieszczonym w tabeli 1. Dodatkowo, wyprowadzenie D14 maXimatora jest używany jako wejście zerujące o aktywnym poziomie wysokim – podczas normalnej pracy ta linia musi być dołączona do masy zasilania.
Jednostka TOP LEVEL
Pokazana na rysunku 2 jednostkaTOP LEVEL składa się z następujących elementów:
- Bloku OLED, który jest odpowiedzialny za inicjalizację oraz przesyłanie komend i danych do kontrolera wyświetlacza.
- Bloku EXAMPLE_OLED_Logic, w którym pokazano użycie przykładowych komponentów do sterowania wyświetlaczem:
- CLS_Command – czyści wyświetlacz,
- SetPixel_Commmand – ustawia wybrany piksel wyświetlacza na wybrany kolor,
- DrawImageFull_Commmand – rysuje cały obrazek uprzednio pobierając go z pamięci.
- Bloku Flash, który implementuje blok pamięci typu Flash zainicjalizowanej plikiem onchip_flash.dat. Przechowane są w niej mapy bitowe dwóch obrazów, które będą przesłane do wyświetlacza.
Oprócz wyżej wymienionych, na schemacie blokowym możemy znaleźć jeszcze blok odpowiedzialny za debouncing przycisku zerowania oraz blok generatora pętli PLL, na którego na wyjściu występuje przebieg o częstotliwości 50 MHz.
Moduł OLED
Moduł OLED (rysunek 2) jest głównym elementem projektu. Odpowiada on za komunikację za pomocą interfejsu SPI, inicjalizację wyświetlacza oraz późniejsze przekazywanie komend i danych. Sygnały modułu OLED opisano w tabeli 2.
Moduł OLED zawiera w sobie następujące bloki (rysunek 3):
- spi_master będący sprzętową implementacją sterownika SPI, komunikującego się bezpośrednio z kontrolerem wyświetlacza OLED. Funkcje jego wyprowadzeń zebrano w tabeli 3.
- LPM_ROM to gotowy IP będący pamięcią ROM. Zapisany w nim plik .mif (SD1331_INIT.mif) zawiera sekwencję komend służących do inicjalizacji wyświetlacza. Dokładne znaczenie poszczególnych bajtów znajduje się w dokumentacji kontrolera SSD1331. Zawartość pamięci bloku LMP_ROM opisano w tabeli 4.
- main_controller to blok ten jest odpowiedzialny za odczyt sekwencji inicjalizującej z bloku LPM_ROM, a także sterowaniem blokiem spi_master. Funkcje jego wyprowadzeń opisano w tabeli 5.
- clk_gen jest dzielnikiem sygnału taktującego, na wyjściu main_clk występuje wejściowy sygnał zegarowy o częstotliwości dzielonej przez 2, a na wyjściu us_clk – sygnał zegarowy o częstotliwości dzielonej przez 6.
Moduł Example_OLED_Logic
Moduł wykonano, aby pokazać, jak należy sterować modułem OLED poprzez odpowiednie komendy. W jego architekturze zawarto trzy komponenty:
- CLS_Command, który ma za zadanie wyczyścić wyświetlacz, tzn. wypełnić go zadanym kolorem. Funkcje jego wyprowadzeń pokazano w tabeli 6.
- SetPixel_Command, którego zadaniem jest zaświecenie w zadanym kolorze pojedynczego piksela o ustalonym adresie. Funkcje jego wyprowadzeń pokazano w tabeli 7.
- DrawImageFull_Command, który pobiera zapisany w pamięci Flash obraz w celu wyświetlenia go na ekranie. Funkcje jego wyprowadzeń pokazano w tabeli 8.
Moduł Flash
Ten moduł służy do implementacji pamięci Flash (UFM), która może być zainicjalizowana odpowiednio przygotowanym plikiem hex lub mif (memory initialization file). Na rysunku 4 pokazano przebiegi sygnałów podczas odczytu. Pojemność pamięci w układzie MAX10 znajdującym się w zestawie MAXimator pozwala na zapamiętanie dwóch obrazków o rozdzielczości 96×64 pikseli w formacie RGB565. Aby wybrać plik, który ma zostać wgrany należy w pliku Flash.vhd w linii 93 (rysunek 5) podać ścieżkę bezwzględną np: INIT_FILENAME => „D:/Projekty/Maximator/OLED/Test.mif”.
Dodatkowe oprogramowanie
W ramach projektu utworzono aplikację Konwerter_RGB565, której zadaniem jest wygenerowanie pliku .mif z wybranych przez użytkownika obrazków w formacie .bmp i wymiarach 96×64 piksele (odpowiada matrycy OLED użytego wyświetlacza). Skompilowana aplikacja jest dostępna w portalu https://goo.gl/HxTqGr.
Po uruchomieniu programu (rysunek 6) należy kliknąć przycisk Wczytaj obraz(y), po czym zostanie wyświetlone okno wyboru plików do wczytania. Należy zaznaczyć jeden lub dwa obrazy (mając dwa obrazy trzeba je zaznaczyć jednocześnie, np. za pomocą klawisza CTRL). Obrazy powinny mieć format BMP, 24-bity, RGB, wymiary 94×64 piksele, 96 DPI).
Po wybraniu i otwarciu obrazków są wyświetlane ich miniaturki. Przycisk „Zapisz plik .mif” jest aktywny. Po jego kliknięciu program zapyta się, gdzie zapisać wygenerowany plik .mif. Na fotografii 7 pokazano przykładowy efekt działania projektu: wyświetlenie obrazka, miniaturowej fotografii zestawu maXimator na wyświetlaczu OLED.
Mateusz Mamala, AGH
Więcej informacji:
Projekt powstał w Katedrze Elektroniki Wydziału Informatyki, Elektroniki i Telekomunikacji AGH, pod kierunkiem dr inż. Pawła Rajdy i dr inż. Jerzego Kasperka.