Interfejs wyświetlacza TFT-RGB dla RPi Zero

Interfejs wyświetlacza TFT-RGB dla RPi Zero
Pobierz PDF Download icon

Zaprezentowana płytka rozszerza funkcjonalność komputerka Raspberry Pi Zero (i nie tylko) o możliwość sterowania graficznym wyświetlaczem TFT posiadającym typowe złącze FFC 40 pin. Umożliwia zastosowanie wyświetlaczy o przekątnych m.in. 3,9" czy 5,6" w tym popularnych w ostatnim czasie wyświetlaczy typu bar o rozdzielczości 480×128.

Podstawowe parametry:
  • umożliwia dołączenie wyświetlacza TFT wyposażonego w typowe złącze FFC 40 pin,
  • korzysta ze złącza GPIO charakterystycznego dla płytek RPi,
  • zawiera przetwornicę ze stabilizacją prądu do zasilania podświetlenia ekranu.

Płytka jest elektrycznie zgodna z każdą wersją Raspberry Pi, ale mechanicznie dopasowana jest do Pi Zero. Efektem połączenia płytek jest zwarty zestaw o niewielkich rozmiarach. Współpracując z wyświetlaczem o przekątnej 3,9" np. Winstar z serii WF39xx, umożliwia, przy odrobinie inwencji, montaż w urządzeniach Rack 1U. Jeżeli wyświetlacz jest wyposażony też w panel dotykowy, upraszcza się obsługa i podnosi ogólna atrakcyjność urządzenia końcowego.

Moduł współpracuje z wyświetlaczami o standardowym 40-pinowym złączu w postaci taśmy lub płytki elastycznej. Przyporządkowanie sygnałów złącza wyświetlacza opisano w tabeli 1.

W porównaniu z wyświetlaczami o przekątnych 7" i więcej (złącze RGB 50 pin), zdecydowana większość dostępnych modeli posiada wbudowaną przetwornicę napięć polaryzacji Vcom, Vgh, Vgl upraszczającą konstrukcję modułu. W praktyce, gdy pozyskamy wyświetlacz z uszkodzonej nawigacji lub podobnego urządzenia – moduł nie nadwyręży naszego budżetu.

Budowa i działanie

Schemat elektryczny modułu został pokazany na rysunku 1. Układ jest banalnie prosty, składa się praktycznie tylko ze złącza LCD typu FFC40 z odpowiednio doprowadzonymi sygnałami interfejsu GPIO. Zastosowana została w tym celu konfiguracja Alt2 przeznaczona do obsługi wyświetlacza LCD RGB w trybie równoległym DPI.

Rysunek 1. Schemat elektryczny modułu

Jedynym elementem aktywnym jest przetwornica U1 dostarczająca zasilania dla podświetlenia ekranu. Układ AP3036, oprócz podnoszenia napięcia niezbędnego do zasilania szeregu diod LED podświetlających ekran, stabilizuje ich prąd pracy. Wartość prądu określa rezystor R2, napięcie na wyprowadzeniu FB dla określonego prądu LED powinno wynosić ok. 200 mV, co w modelu odpowiada 20 mA.

Złącze TP umożliwia wyprowadzenie opcjonalnych sygnałów rezystancyjnego panelu dotykowego w przypadku, gdy jest on zintegrowany z wyświetlaczem. Jako zewnętrzny kontroler dotyku może być zastosowany np. układ AR1100.

Pomimo prostego interfejsu, obsługa LCD w trybie równoległym DPI, w przypadku Raspberry Pi, generuje jeden bardzo poważny problem – zajmuje praktycznie wszystkie linie złącza GPIO i wymusza podłączenie współpracujących urządzeń przez porty USB. Od tych ograniczeń wolne są aplikacje Compute Module ze znacznie większą liczbą dostępnych wyprowadzeń i elastycznością konfiguracji GPIO.

Przyporządkowanie funkcji wyprowadzeń GPIO w trybie DPI zestawiono w tabeli 2. Oprócz sygnału zegarowego PCLK, sterującego DE, synchronizacji VSYNC, HSYNC tryb DPI używa wyprowadzeń DPI_D0...D23 do sterowania poziomem kolorów składowych RGB. Kodowanie kolorów, w zależności od wybranego trybu, jest zgodne ze standardem RGB565, RGB666, RGB888 i może zajmować różne wyprowadzenia GPIO.

Dostępnych jest 7 trybów kodowania, co zestawiono w tabeli 3. Moduł pracuje w trybie 5. z kodowaniem RGB666, z którym zgodna jest większość wyświetlaczy.

Montaż i uruchomienie

Układ zmontowany jest na niewielkiej dwustronnej płytce drukowanej, której schemat wraz z rozmieszczeniem elementów został pokazany na rysunku 2.

Rysunek 2. Schemat płytki PCB wraz z rozmieszczeniem elementów

Montaż nie jest skomplikowany i nie wymaga opisu, gotowy moduł został pokazany na fotografii 1.

Fotografia 1. Zmontowana płytka

W zależności od posiadanego wyświetlacza należy ustawić prąd podświetlenia poprzez dobranie rezystora R2. Złącze TP jest opcjonalne i montujemy je tylko w przypadku podłączenia kontrolera rezystancyjnego panelu dotykowego zintegrowanego z wyświetlaczem.

Przed włączeniem wyświetlacza należy zapoznać się z jego kartą katalogową, sprawdzić zgodność sygnałów ze złączem FPC oraz ustalić zależności czasowe niezbędne do prawidłowej konfiguracji. Przed użyciem interfejsu DPI należy wyłączyć obsługę I2C i SPI wprowadzając następujące modyfikacje w pliku /boot/config.txt:

dtparam=i2c_arm=off
dtparam=spi=off

Do współpracy z LCD RGB przeznaczone są w systemie operacyjnym konfiguracje dtoverlay=dpi18 lub dtoverlay=dpi24. Niestety, ze względu na brak kanału informującego o parametrach wyświetlacza i dostępnych trybach pracy, jak ma to miejsce w przypadku HDMI, w każdym przypadku konieczna jest indywidualna i szczegółowa parametryzacja interfejsu DPI oraz dostosowanie częstotliwości zegara, kodowania koloru, synchronizacji i rozdzielczości przez użytkownika. Przed konfiguracją wyświetlacza należy poinformować system o niestandardowym trybie pracy „custom mode DPI” poprzez wpis:

dpi_group=2
dpi_mode=87

oraz o współpracy z wyświetlaczem DPI:

enable_dpi_lcd=1
display_default_lcd=1

Format wyjściowy DPI ustalany jest parametrem dpi_output_format w postaci liczby szesnastkowej o następującym znaczeniu bitów:

output_format = (dpi_output_format >> 0) & 0xf;
rgb_order = (dpi_output_format >> 4) & 0xf;
output_enable_mode = (dpi_output_format >> 8) & 0x1;
invert_pixel_clock = (dpi_output_format >> 9) & 0x1;
hsync_disable = (dpi_output_format >> 12) & 0x1;
vsync_disable = (dpi_output_format >> 13) & 0x1;
output_enable_disable = (dpi_output_format >> 14) & 0x1;
hsync_polarity = (dpi_output_format >> 16) & 0x1;
vsync_polarity = (dpi_output_format >> 17) & 0x1;
output_enable_polarity = (dpi_output_format >> 18) & 0x1;
hsync_phase = (dpi_output_format >> 20) & 0x1;
vsync_phase = (dpi_output_format >> 21) & 0x1;
output_enable_phase = (dpi_output_format >> 22) & 0x1;

output_format:
1: DPI_OUTPUT_FORMAT_9BIT_666
2: DPI_OUTPUT_FORMAT_16BIT_565_CFG1
3: DPI_OUTPUT_FORMAT_16BIT_565_CFG2
4: DPI_OUTPUT_FORMAT_16BIT_565_CFG3
5: DPI_OUTPUT_FORMAT_18BIT_666_CFG1
6: DPI_OUTPUT_FORMAT_18BIT_666_CFG2
7: DPI_OUTPUT_FORMAT_24BIT_888

rgb_order:
1: DPI_RGB_ORDER_RGB
2: DPI_RGB_ORDER_BGR
3: DPI_RGB_ORDER_GRB
4: DPI_RGB_ORDER_BRG

output_enable_mode:
0: DPI_OUTPUT_ENABLE_MODE_DATA_VALID
1: DPI_OUTPUT_ENABLE_MODE_COMBINED_SYNCS
invert_pixel_clock:
0: RGB Data changes on rising edge and is stable at falling edge
1: RGB Data changes on falling edge and is stable at rising edge.

hsync/vsync/output_enable_polarity:
0: default for HDMI mode
1: inverted

hsync/vsync/oe phases:
0: DPI_PHASE_POSEDGE
1: DPI_PHASE_NEGEDGE

Parametry czasowe i rozdzielczość wyświetlacza ustalane są poleceniem dpi_timings:

dpi_timings=<h_active_pixels> <h_sync_polarity> <h_front_porch> <h_sync_pulse> <h_back_porch> <v_active_lines> <v_sync_polarity> <v_front_porch> <v_sync_pulse> <v_back_porch> <v_sync_offset_a> <v_sync_offset_b> <pixel_rep> <frame_rate> <interlaced> <pixel_freq> <aspect_ratio>

<h_active_pixels> = horizontal pixels (width)
<h_sync_polarity> = invert hsync polarity
<h_front_porch> = horizontal forward padding from DE acitve edge
<h_sync_pulse> = hsync pulse width in pixel clocks
<h_back_porch> = vertical back padding from DE active edge
<v_active_lines> = vertical pixels height (lines)
<v_sync_polarity> = invert vsync polarity
<v_front_porch> = vertical forward padding from DE active edge
<v_sync_pulse> = vsync pulse width in pixel clocks
<v_back_porch> = vertical back padding from DE active edge
<v_sync_offset_a> = leave at zero
<v_sync_offset_b> = leave at zero
<pixel_rep> = leave at zero
<frame_rate> = screen refresh rate in Hz
<interlaced> = leave at zero
<pixel_freq> = clock frequency (width*height*framerate)
<aspect_ratio> = *

gdzie aspect_ratio może przyjmować następujące wartości:

HDMI_ASPECT_4_3 = 1
HDMI_ASPECT_14_9 = 2
HDMI_ASPECT_16_9 = 3
HDMI_ASPECT_5_4 = 41`

HDMI_ASPECT_16_10 = 5
HDMI_ASPECT_15_9 = 6
HDMI_ASPECT_21_9 = 7
HDMI_ASPECT_64_27 = 8

Jeżeli z przyczyn mechanicznych wyświetlacz wygodniej zamontować w pozycji pionowej lub odwróconej, parametrem display_rotate=x ustalamy wymaganą orientację, gdzie x=0...3, a odpowiadająca orientacja wyświetlacza to 0, 90, 180, 270°.

Przykładowa konfiguracja ustalona dla wyświetlacza SH0050GB30 o przekątnej 5" i rozdzielczości 800×480 zdemontowanego z uszkodzonej nawigacji:

dtoverlay=dpi24
display_rotate=2
overscan_left=0
overscan_right=0
overscan_top=0
overscan_bottom=0
framebuffer_width=800
framebuffer_height=480
enable_dpi_lcd=1
display_default_lcd=1
dpi_group=2
dpi_mode=87
dpi_output_format=0x6f015
dpi_timings=800 0 40 48 88 480 0 13 3 32 0 0 0 60 0 32000000 6

Czasami do ustalenia prawidłowych parametrów, szczególnie w przypadku braku wyświetlania lub zakłóceń w obrazie, konieczny jest oscyloskop lub analizator logiczny. Warto też przeszukać zasoby sieci, czy nie jest dostępna gotowa konfiguracja dla posiadanego wyświetlacza, pozwala to zaoszczędzić sporo czasu. Obowiązkowo trzeba też się zapoznać się z dokumentacją Raspberry Pi dostępną pod adresem: http://bit.ly/2PuEiHZ.

Adam Tatuś
adam.tatus@ep.com.pl

Wykaz elementów:
Rezystory:
  • R1: 10 kΩ SMD 0603 1%
  • R2: 10 Ω SMD 0603 1%
Kondensatory:
  • C1: 0,1 µF SMD 0603
  • C2,C4: 4,7 µF SMD 0603
  • C3: 1 µF SMD 0603
  • C5: 0,22 µF/50 V SMD 0805
Półprzewodniki:
  • U1: AP3036BKTR (SOT-26)
Inne:
  • L1: dławik mocy WE-MAPI4020
  • GPIO: złącze żeńskie 2×20 pin 2,54 mm
  • LCD: złącze FPC40 0,5 mm, styki dolne
  • TP: złącze PHSM4TB (opcjonalnie)
Artykuł ukazał się w
Elektronika Praktyczna
marzec 2021
DO POBRANIA
Pobierz PDF Download icon
Materiały dodatkowe

Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik maj 2021

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio czerwiec 2021

Świat Radio

Magazyn krótkofalowców i amatorów CB

Automatyka Podzespoły Aplikacje maj 2021

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna maj 2021

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Elektronika dla Wszystkich czerwiec 2021

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów