W artykule omówiono podłączenie i obsługę modułu projektora DLP LightCrafter Display 2000 produkcji Texas Instruments, do komputera jednopłytkowego Raspberry Pi 3. Moduł ten został pierwotnie zaprojektowany do łatwej współpracy z komputerami jednopłytkowymi BeagleBone. Niestety, pod kątem wydajności, zwłaszcza w aplikacjach multimedialnych, BeagleBone znacznie ustępuje konkurencyjnemu rozwiązaniu, jakim jest Raspberry Pi 3. Jak jednak zostanie to przedstawione w artykule, konfiguracja Raspberry Pi do pracy z modułem LightCrafter Display 2000 jest stosunkowo prosta a radość z samodzielnej budowy bezgłośnego i energooszczędnego projektora multimedialnego – bezcenna.
W świecie elektroniki użytkowej od lat obserwujemy toczące się wojny standardów i rozwiązań technologicznych, jak np. rozstrzygnięte już starcia formatów Blue-ray i HD-DVD czy technologii plazmowej i LCD. W segmencie projektorów multimedialnych klienci wciąż zadają pytanie – wybrać projektor LCD bazujący na panelach ciekłokrystalicznych, czy jednak zdecydować się na technologię mikroluster zastosowaną w projektorach DLP? Nie podejmując się tutaj żadnych prób rozstrzygnięcia tego sporu, warto podkreślić jedno – w świecie projektorów DLP niepodzielny prym wiedzie firma Texas Instruments, która jest autorem i właścicielem patentów z zakresu technologii DLP. Choć przywykło się mówić, że wszystkie wojny technologiczne wygrywa końcowy klient – otrzymujący tańsze i lepsze rozwiązanie – nie mniejsze zwycięstwo odnoszą również… konstruktorzy i programiści.
Firma Texas Instruments swoją przewagę rynkową próbuje wypracować nie tylko na poziomie czysto technicznym (projektory DLP to wyższy kontrast obrazu, głębokie czernie i niższy pobór mocy), ale również w wykorzystywanym modelu biznesowym – dostarczając konstruktorom i producentom urządzeń końcowych kompleksowy zestaw układów, zestawów deweloperskich i narzędzi do szybkiego i łatwego zaadaptowania technologi DLP w konstruowanych projektorach. Przykładem takich działań jest zestaw DLP LightCrafter Display 2000 (DLPDLCR2000EVM) – rysunek 1.
Raspberry Pi – interfejs DPI oraz schemat przyłączenia projektora
Wszystkie komputery Raspberry Pi zostały wyposażone w kontroler DPI (z ang. Display Parallel Interface) umożliwiający bezpośrednie podłączenie wyświetlaczy LCD/projektorów z interfejsem równoległym RGB, do wyprowadzeń GPIO. W zależności od wybranej konfiguracji, kontroler DPI umożliwia wysterowanie wyświetlaczy pracujących w formacie RGB888/RGB24 (po 8 bitów na kolor), RGB666 (po 6 bitów na kolor) oraz RGB565 (5 linii dla koloru czerwonego i niebieskiego oraz 6 linii dla koloru zielonego). Wszystkie sygnały kontrolera (sygnały R, G, B, HSYNC, VSYNC, CLK oraz DE) zostały wyprowadzone na 40-pinowe złącze rozszerzeń, po uprzedniej konfiguracji wyprowadzeń GPIO do pełnienia alternatywnej funkcji ALT2. Przypisanie poszczególnych linii interfejsu DPI do wyprowadzeń GPIO zostało przedstawione w tabeli 2.
Czas przystąpić do konfigurowania komputera Raspberry Pi, którą rozpoczynamy od pobrania ze strony producenta ostatniej wersji dystrybucji Raspbian [1] (będącej modyfikacją Debiana dla komputerów Raspberry Pi) oraz wgrania obrazu systemu na kartę SD. Następnym krokiem jest konfiguracja wyprowadzeń GPIO do pełnienia alternatywnej funkcji ALT2, a więc funkcji przypisanej do kontrolera DPI. Konfiguracja ta zostanie przeprowadzona z wykorzystaniem pliku konfiguracyjnego config.txt – umieszczonego na partycji /boot w obrazie systemu – oraz predefiniowanych warstw opisu Device Tree (dostępnych również na partycji /boot w katalogu overlays). Warstwy opisu Device Tree ułatwiają organizację wsparcia dla wielu konfiguracji sprzętowych z wykorzystaniem tego samego jądra systemu. Listę przygotowanych przez producenta warstw wraz z ich opisem i listą przyjmowanych argumentów można znaleźć w pliku /boot/overlays/README.
Dla omawianej konfiguracji 18-bitowej:
dtoverlay=dpi18
Podczas konfigurowania Device Tree należy upewnić się, że skonfigurowana warstwa nie koliduje z inną, uprzednio wykonaną konfiguracją sprzętu. W przypadku warstw dpi18 oraz dpi24 należy wyłączyć sprzętowe kontrolery magistral I2C oraz SPI (o ile zostały one uprzednio włączone):
dtparam=i2c_arm=off
dtparam=spi=off
lub
#dtparam=i2s=on
#dtparam=spi=on
Wiadomo już zatem, że linie interfejsu DPI kolidują z wyprowadzeniami sprzętowego kontrolera magistrali I2C. Aby jednak zachować możliwość konfiguracji projektora, na niewykorzystanych dotychczas wyprowadzeniach GPIO23 oraz GPIO24 włączymy programowy kontroler interfejsu I2C. Do tego celu wykorzystamy warstwę i2c-gpio, która konfiguruje wskazane wyprowadzenia do pracy w trybie linii SDA oraz SCL, obsługiwanych w sposób czysto programowy. Opcje konfiguracji warstwy i2c-gpio umieszczono w tabeli 4.
Zgodnie z informacjami przedstawionymi w tabeli 4, do pliku /boot/config.txt dopisujemy zatem kolejną linię konfiguracji:
dtoverlay=i2c-gpio,i2c_gpio_sda=23,i2c_gpio_scl=24,i2c_gpio_delay_us=2
Zanim przystąpimy do wykonania połączeń sprzętowych, niezbędnym etapem jest konfiguracja parametrów pracy kontrolera DPI. Korzystając z dokumentacji interfejsu DPI, udostępnionej pod adresem:
http://bit.ly/2MsgceG
http://bit.ly/2Lk6qFO
enable_dpi_lcd=1
display_default_lcd=1
umożliwiające dołączenie zewnętrznego wyświetlacza do kontrolera DPI oraz wskazujące, że wyświetlacz ten jest domyślny dla systemu (w przeciwnym razie funkcję tę pełni ekran podłączony do interfejsu HDMI). Następnie, do parametrów dpi_group oraz dpi_mode przypisujemy odpowiednio wartości 2 i 87, co pozwoli nam na samodzielną konfigurację parametrów pracy wyświetlacza poprzez pole hdmi_timings (w innych przypadkach pola dpi_group oraz dpi_mode umożliwiają wybór predefiniowanych konfiguracji):
dpi_group=2
dpi_mode=87
Przedostatnim krokiem w edycji pliku
/boot/config.txt jest zatem określenie parametrów pracy wyświetlacza/projektora poprzez umieszczenie wpisu hdmi_timings, którego pełny format został przedstawiony w tabeli 5.
Jednym z najprostszych sposobów ustalenia prawidłowych wartości dla wpisu hdmi_timings – bez potrzeby żmudnego analizowania dokumentacji modułu projektora – jest wykorzystanie gotowego fragmentu opisu Device Tree dla komputera BeagleBone (który w oficjalnych obrazach systemu zawiera wsparcie dla zestawu DLP LightCrafter Display 2000). Fragment opisu Device Tree dotyczący projektora DLP został przedstawiony na listingu 1.
/boot/config.txt o wpis konfigurację hdmi_timings:
hdmi_timings=640 0 14 4 12 360 0 2 3 9 0 0 0 60 0 32000000 3
Ostatnim krokiem konfiguracji Raspberry Pi jest określenie trybu pracy interfejsu DPI – tryb pracy RGB565/RGB666/RGB888, włączenie/wyłączenie sygnałów polaryzacji pionowej i poziomej, ustalenie polaryzacji sygnałów HSYNC/VSYNC, itd. Konfiguracja ta jest realizowana poprzez zapis do parametru dpi_output_format wartości liczbowej, wyliczonej na podstawie konfiguracji poszczególnych pól bitowych, jak przedstawiono w tabeli 6.
Na podstawie tabeli 6, do pliku /boot/config.txt dopisano konfigurację parametru dpi_output_format, przypisując mu wyliczoną wartość 458773:
dpi_output_format=458773
Finalna postać pliku /boot/config.txt została przedstawiona na listingu 2. Po zakończonej konfiguracji programowej można przystąpić do wykonania połączeń sprzętowych. Na bazie informacji zawartych na rysunku 3 oraz w tabeli 3 (dla trybu pracy RGB666), wykonujemy zestaw połączeń w sposób pokazany na rysunku 4.
Po włączeniu zasilania moduł projektora wyświetli wyłącznie domyślny ekran startowy (obraz ten może zostać nadpisany grafiką zdefiniowaną przez użytkownika). Aby wyświetlić obraz generowany przez komputer Raspberry Pi, należy nawiązać za pomocą magistrali I2C komunikację z układem kontrolera DLPC2601, a następnie do rejestru 0x0B (rejestr Input Source Selection) wpisać wartość 0, która jako źródło sygnału wybiera interfejs równoległy RGB. Dostępność kontrolera DLPC2601 (o adresie sprzętowym 0x1B) na magistrali I2C możemy sprawdzić poprzez wykonanie skanowania za pomocą narzędzia i2cdetect, np.:
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- 1b -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Wybór źródła sygnału i ustawienie rozdzielczości wejściowej:
i2cset -y 0 0x1b 0x0b 0x00 0x00 0x00 0x00 i
i2cset -y 0 0x1b 0x0c 0x00 0x00 0x00 0x07 i
Powyższe komendy można umieścić np. w pliku /etc/rc.local, tak aby wybór źródła sygnału odbywał się automatycznie po włączeniu Raspberry Pi.
Kompletny zbiór rejestrów i komend umożliwiających m.in. skalowanie i obracanie obrazu, wybór źródła sygnału, wyświetlanie obrazów testowych, został kompleksowo opisany w dokumencie DLPC2601 and DLPC2607 Software Programmer's Guide [2].
Przykład działania modułu DLP LightCrafter Display 2000 podłączonego do komputera jednopłytkowego Raspberry Pi został przedstawiony na filmie: http://bit.ly/2MwuieY.
Łukasz Skalski
contact@lukasz-skalski.com