SantyagoSantyago
Avatar

Witaj!
Blog archiwalny. Już niebawem nowy serwis!

YouTube RSS Facebook GitHub

Arduino poradnik

Wstęp

Teoria

Biblioteki

Komponenty

Czujniki i sensory

Rozwiązania i algorytmy

Narzędzia

Mikrokontrolery i Arduino IDE

Arduino i klony

Poradniki wideo

Reklama na Blogu

Najnowsze poradniki

Ostatnie komentarze

Ostatnie fotografie

polskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorypolskie-gorywieliczka-szyb-danilowicza

Wyświetacze TFT Riverdi ze sterownikiem FT800 / FT801

Jeśli interesujecie się wyświetlaczami TFT wykorzystującymi kontrolery FTDI Chip FT800/FT801, to bez wątpienia powinniście zwrócić uwagę na propozycję firmy Riverdi. Dzięki ogromnej uprzejmości firmy UNISYSTEM z Gdańska, otrzymałem do testów kilka wyświetlaczy wykorzystujące kontrolery FT800 jak i FT801.  Oba układy należą do grupy kontrolerów określanych mianem EVE (Embedded Video Engine), czyli z wbudowanym silnikiem wideo, znacząco przyśpieszającym działanie standardowych wyświetlaczy TFT z mniej wydajnymi MCU.

Wyświetlacze rodziny RVT43ULFNWC0x (FT801)

Modele ekranów RVT43ULFNWC01 oraz RVT43ULFNWC03 są wyświetlaczami o przekątnej wynoszącej 4.3" i charakteryzującymi się jasnością na poziomie 500cd/m2. Aktywną część stanowi obszar 95.04mm x 53.86mm oferujący rozdzielczość 480x272 pikseli o proporcjach 16:9.

Za podświetlanie matrycy odpowiada 10 jasnych diod LED, a całość pokrywa warstwa antyodblaskowa. Przy zasilaniu wyświetlacza wraz z podświetlaniem LED napięciem 3.3V, całość pobiera prąd o natężeniu 330mA (maksymalnie 412mA). Pobór prądu może zostać zredukowany do poziomu ~250mA w przypadku zasilenia obwodu podświetlania napięciem 5V. Jeśli chodzi o kąty widzenia, producent deklaruje wartości w zakresie 50°/70°/70°/70°.

RVT43ULFNWC0x mogą pracować również w utrudnionych warunkach, zakresu temperatur w których wyświetlacz działa prawidłowo to -20°C-70°C  przy wilgotności sięgającej 90% RH.

Pod względem konstrukcji wyświetlacz ten wydaje się być idealny do montażu we wszelkiego rodzaju obudowach. Zewnętrzna ramka z łatwością pozwoli na estetyczne ukrycie przygotowanego otworu, a dwustronna taśma klejąca 3M 467MP o grubości 0.5mm pozwala na jego zamontowanie praktycznie bez użycia śrub. Dlatego też modele te z pewnością spodobają się osobom, które cenią sobie wysoki poziom estetyki. Wymiary zewnętrzne wynoszą 120.38mm x 79.20mm, natomiast grubość to niespełna 8.43mm.

 

Oba wyświetlacze posiadają kontroler FT801 mogący komunikować się mikrokontrolerem za pomocą magistrali I2c lub SPI. W odróżnieniu od modelu z układem FT800 obsługuje ekrany pojemnościowe, wykorzystując w tym celu dodatkowego sterownika FT5306 zdolnym do identyfikacji 5 punktów dotyku w maksymalnej rozdzielczości 1280x768. Różni się więc pod tym względem od ekranów wykorzystujących wersję FT800, gdzie obsługa funkcji dotykowych została zaszyta w układ.

Kontroler FT801 - również jak jego starszy brat - posiada zdolność odtwarzania 8-bitowych plików PCM oraz plików w formacie μ-Law z częstotliwością próbkowania od 8kH do 48kHz. Po drugiej stronie wyświetlacza zamontowano 20-pinowe złącze FFC o rastrze 0.5mm.

Obsługa 5-punktowego ekranu pojemnościowego wymaga odrobinę większej uwagi, która pozwoli nam zrozumieć późniejsze jego działanie. Mianowicie - każdy następny przyłożony punkt dotyku posiada swój odpowiednio kolejny indeks, przyjmujący wartość od 0 do 4. Indeks ten będzie zajmowany do czasu, aż zostanie on uwolniony. Przykładowy mechanizm:

  • Pierwszy punktu (1) dotyku otrzymuje indeks "0" oraz przypisanie znacznika
  • Drugi punkt (2) dotyku otrzymuje indeks "1" bez przypisania znacznika
  • Trzeci punkt (3) dotyku otrzymuje indeks "2" bez przypisania znacznika
  • Zwalniamy drugi (2) punkt dotyku, a indeks "1" zostaje uwolniony
  • Czwarty punkt (4) dotyku otrzyma zwolniony indeks "1" również bez przypisania znacznika
  • Zwalniamy pierwszy (1) punkt dotyku, a indeks "0" zostaje uwolniony
  • Piąty punkt (5) dotyku otrzyma zwolniony indeks "0" oraz przypisanie znacznika

RVT3.5B320240CFWR00

Innym wyświetlaczem tej firmy jest model oznaczony jako RVT3.5B320240CFWR00. Tym razem jest wyświetlacz o przekątnej 3.5" i rozdzielczości 320x240 pikesli (przekątna 4:3) wykorzystujący znany nam już sterownik FT800 z obsługą ekranu rezystancyjnego.

Charakteryzuje się on jasnością 340 cd/m2, gdzie aktywny obszar roboczy to 70.08 mm × 52.56mm.  Mniejsza przekątna ekranu to również mniejsze zapotrzebowanie na prąd. Przy zasilaniu napięciem 3.3V wyświetlacz pobiera około 220mA.  Odrobinę mniejsze są również deklarowane kąty widzenia wynoszące kolejno 40°/60°/60°/60°. Wyświetlacz montowany jest za pomocą 4 śrub, a więc może znaleźć zastosowanie w projektach, których wyświetlacz będzie schowany nieco głębiej w obudowie.

Interfejs I2c / SPI

Wszystkie prezentowane dziś wyświetlacze mogą "rozmawiać" z mikrokontrolerm za pośrednictwem magistrali SPI lub I2c. Wybór pomiędzy nimi dokonywany jest poprzez odpowiednie podłączenie linii 9 (MODE). Domyślnie linia MODE jest podciągnięta do zasilania rezystorem o wartości 47kΩ, dlatego trybem pracy jest I2c. W przypadku chęci pracy z wyświetlaczami przez SPI, wystarczy więc zewrzeć ją do masy.

Lista i kolejność wyprowadzeń prezentuje się następująco:

Pin Oznaczenie Komentarz
1 VDD Zasilanie 3.3V
2 GND Masa
3 SPI_SCLK / I2C_SCL Linia sygnałowa, podciągnięta do zasilania R=47kΩ
4 MISO / I2C_SDF Linia sygnałowa, podciągnięta do zasilania R=47kΩ
5 MOSI / I2C_SA0 Linia sygnałowa, podciągnięta do zasilania R=47kΩ
6 CS / I2C_SA1 Linia sygnałowa, podciągnięta do zasilania R=47kΩ
7 INT Linia przerwania, aktywny stan niski,  podciągnięta do zasilania R=47kΩ
8 PD Linia Power Down, aktywny stan niski,  podciągnięta do zasilania R=47kΩ
9 MODE Tryb pracy. SPI podciągnięte do masy. I2c podciągnięte do zasilania. Domyślnie podciągnięte do zasilania R=47kΩ
10 AUDIO_OUT Wyjście audio
11
...
16
NC Nie podłączone
17 BLVDD Napięcie zasilania podświetlenia LED. Może być podłączone do VDD
18 BLVDD Napięcie zasilania podświetlenia LED. Może być podłączone do VDD
19 BLGND Masa podświetlania LED. Połączona z GND
20 BLGND Masa podświetlania LED. Połączona z GND

Shield dla Arduino UNO

Wykorzystanie wyświetlaczy w projektach może wydawać się problematyczne przez mniej lubiących lutowanie, własnego gniazda ZIF. Nie ma się czego jednak obawiać, ponieważ bez problemu znajdziemy gotowe adaptery na listwę kołkową. Dodatkowo producent przygotował specjalny shield dla Arduino, dzięki któremu bez najmniejszego kłopotu podłączymy wyświetlacze.

Płytka została wyposażona we wszystkie potrzebne gniazda: 20 pinowy ZIF, listwę kołkową z wyprowadzeniami sygnałów ekranu, slot pamięci microSD oraz konektor audio do którego możemy podłączyć 8Ω/1W głośnik. Znajdziemy również na niej odpowiednie zworki do wyboru napięcia zasilania podświetlających diod LED oraz piny pomiarowe. A więc wszystko to, co potrzebne zarówno do nauki jak i poznawania działania wyświetlaczy Riverdi.

Co ciekawe, shield jest również przygotowany do współpracy z nadchodzącymi wyświetlaczami 5” i 7” 800x480 z układami FT812 i FT813

Kilka ważnych uwag:

  • Funkcję wzmacniacza audio pełni TPA6205A1DRB od Texas Instruments, do którego przepuszczany jest sygnał przez bufor SN74LVC1G125
  • Wzmacniacz audio można włączać lub wyłączać za pomocą pinu sterującego D4
  • Do wyboru slotu kart pamięci microSD na SPI (ChipSelect) został wykorzystany pin D5
  • Detekcja obecności karty pamięci w czytniku microSD została podpięta pod pin D6 - jest bardzo fajna cecha, dzięki której możemy uwzględnić działanie programu od obecności karty pamięci z danymi
  • Wybór napięcia zasilania 3.3V / 5V dla podświetlania LED wyświetlacza realizujemy za pomocą zworki CN4
  • Do pomiaru poboru prądu służą zworki CN3 i CN5, należy jednak odlutować sąsiadujące przy nich rezystory oznaczone jako R6 i R4 (0Ω)

Płytka ewaluacyjna RVTB-EB01 z STM32F0

Fani mikrokontrolerów STMicroelectronics również otrzymują wsparcie w postaci płytki RVTB-EB01.

Płytka nie posiada co prawa slotu pamięci microSD, ale za to została wyposażona w 8Mbit pamięci Flash z której wyświetlacz może czerpać potrzebne pliki graficzne lub audio. Domyślnie płytka posiada wgrany firmware prezentujący możliwości wszystkich wyświetlaczy Riverdi z kontrolerem FT800 i FT801. Za pomocą mikroprzełącznika "SWITCH" wybieramy odpowiednią rozdzielczość i typ ekranu.

Również w tym przypadku nie zapomniano o komplecie pinów pomiarowych i zworek pełniących analogiczną funkcję co w przypadku shielda dla Arduino. Odpowiednie kody źródłowe, szczegółową dokumentację, jak przykładowy firmware znajdziecie na stronie producenta.

Biblioteki

Producent udostępnił również odpowiednie biblioteki dla Arduino, ale my oczywiście skorzystamy z oficjalnych w wersji 1.4.0. Wygodą jest ich rozdzielenie w zależności od tego, czy będziemy pracować z wersją FT800 czy FT801:

FTDI_V1.4.0_FT800: pobierz biblioteki dla Arduino

FTDI_V1.4.0_FT801: pobierz biblioteki dla Arduino

Pliki musimy oczywiście rozpakować do naszego katalogu z bibliotekami /libraries.

Uwaga. Jeśli korzystasz z Arduino IDE 1.6.0 lub nowszej, powyższe biblioteki nie będą w stanie się poprawnie skompilować, dlatego przygotowałem poprawione wersje dla Arduino IDE > 1.6.0:

FTDI_V1.4.0_FT800: pobierz biblioteki dla Arduino 1.6.x

FTDI_V1.4.0_FT801: pobierz biblioteki dla Arduino 1.6.x

Przykładowy program

Do pierwszego "odpalenia" skorzystamy z programu, który był już opisywany wcześniej przy testowaniu wyświetlaczy HY43B/HY50B. Jedyną zmianą jest skorzystanie z innego pliku nagłówka FT_VM801B43.h kompatybilnego z wyświetlaczem oraz użycie implementacji FT801IMPL_SPI.

  1. #include "SPI.h"
  2. #include "Wire.h"
  3. #include "FT_VM801B43.h"
  4.  
  5. FT801IMPL_SPI FTImpl(FT_CS_PIN, FT_PDN_PIN, FT_INT_PIN);
  6.  
  7. boolean DisplayInit()
  8. {
  9.   uint32_t chipid = 0;
  10.  
  11.   Serial.println("Inicjalizacja ekranu");
  12.  
  13.   // Inicjalizujemy ekran
  14.   FTImpl.Init(FT_DISPLAY_RESOLUTION);
  15.  
  16.   delay(20);
  17.  
  18.   // Pobieramy ID ukladu i sprawdzamy czy to FT800
  19.   chipid = FTImpl.Read32(FT_ROM_CHIPID);
  20.  
  21.   if (chipid != FT801_CHIPID)
  22.   {
  23.     Serial.print("Nie obslugiwany uklad: 0x");
  24.     Serial.println(chipid, HEX);
  25.     return false;
  26.   }
  27.  
  28.   Serial.print("Obslugiwany uklad: 0x");
  29.   Serial.println(chipid, HEX);
  30.  
  31.   // Wlaczamy ekran
  32.   FTImpl.DisplayOn();
  33.  
  34.   return true;
  35. }
  36.  
  37. void scena(unsigned long int czas)
  38. {
  39.   FTImpl.DLStart(); // Otwieramy liste wyswietlania
  40.  
  41.   FTImpl.ColorRGB(0xFF, 0xFF, 0xFF); // Ustawiamy kolor bialy (R,G,B)
  42.  
  43.   // Wyswietlamy tekst w naroznikach
  44.   // Parametry: x, y, rozmiar 16-31, centrowanie, tekst
  45.   FTImpl.Cmd_Text(10, 10, 20, FT_OPT_CENTERY, "LEWO-GORA");
  46.   FTImpl.Cmd_Text(FT_DISPLAYWIDTH - 10, 10, 20, FT_OPT_RIGHTX | FT_OPT_CENTERY, "PRAWO-GORA");
  47.   FTImpl.Cmd_Text(10, FT_DISPLAYHEIGHT - 10, 20, FT_OPT_CENTERY, "LEWO-DOL");
  48.   FTImpl.Cmd_Text(FT_DISPLAYWIDTH - 10, FT_DISPLAYHEIGHT - 10, 20, FT_OPT_RIGHTX | FT_OPT_CENTERY, "PRAWO-DOL");
  49.  
  50.   // Wyswietlamy napis na srodku
  51.   FTImpl.ColorRGB(0xFF, 0xFF, 0x00); // Ustawiamy kolor zolty (R,G,B)
  52.   FTImpl.Cmd_Text(FT_DISPLAYWIDTH / 2, FT_DISPLAYHEIGHT / 2 - 15, 29, FT_OPT_CENTER, "www.jarzebski.pl");
  53.  
  54.   // Wyswietlamy liczbe z parametru funkcji
  55.   FTImpl.ColorRGB(0x00, 0xFF, 0x00); // Ustawiamy kolor zielony (R,G,B)
  56.   FTImpl.Cmd_Number(FT_DISPLAYWIDTH / 2, FT_DISPLAYHEIGHT / 2 + 15, 29, FT_OPT_CENTER, czas);
  57.  
  58.   // Latajace hashe
  59.   int offset1 = czas % FT_DISPLAYWIDTH;
  60.   int offset2 = FT_DISPLAYWIDTH - offset1;
  61.  
  62.   FTImpl.ColorRGB(0x00, 0xFF, 0xFF); // Ustawiamy kolor turkusowy (R,G,B)
  63.   FTImpl.Cmd_Text(offset1, FT_DISPLAYHEIGHT / 2 - 50, 31, FT_OPT_CENTER, "#");
  64.   FTImpl.Cmd_Text(offset2, FT_DISPLAYHEIGHT / 2 + 50, 31, FT_OPT_CENTER, "#");
  65.  
  66.   FTImpl.DLEnd(); // Zamykamy liste wyswietlania
  67.   FTImpl.Finish(); // Renderujemu liste i czekamy na ukonczenie
  68. }
  69.  
  70. void setup()
  71. {
  72.   Serial.begin(9600);
  73.  
  74.   while (!DisplayInit()) {}
  75. }
  76.  
  77. void loop()
  78. {
  79.   scena(millis());
  80. }

Obsługa funkcji wielodotyku

Poniższy program realizuje funkcje obsługi pojemnościowego ekranu dotykowego, jego kalibrację oraz jej zapamiętywanie. Program został szczegółowo omówiony w materiale filmowym, dlatego tutaj został tylko opublikowany w celu łatwiejszego skopiowania.

  1. #include "SPI.h"
  2. #include "Wire.h"
  3.  
  4. #include "FT_VM801B43.h"
  5.  
  6. FT801IMPL_SPI FTImpl(FT_CS_PIN, FT_PDN_PIN, FT_INT_PIN);
  7.  
  8. // Tablica kalibracyjna
  9. uint8_t touchCallibration[24] = {
  10. 0x39, 0x62, 0x0, 0x0,
  11. 0x94, 0x0, 0x0, 0x0,
  12. 0x10, 0x7, 0xED, 0xFF,
  13. 0xC0, 0xFD, 0xFF, 0xFF,
  14. 0x37, 0x62, 0x0, 0x0,
  15. 0x85, 0xD9, 0xF8, 0xFF
  16. };
  17.  
  18. boolean DisplayInit()
  19. {
  20.   uint32_t chipid = 0;
  21.  
  22.   Serial.println("Inicjalizacja ekranu");
  23.  
  24.   // Inicjalizujemy ekran
  25.   FTImpl.Init(FT_DISPLAY_RESOLUTION);
  26.  
  27.   delay(20);
  28.  
  29.   // Pobieramy ID ukladu i sprawdzamy czy to FT800
  30.   chipid = FTImpl.Read32(FT_ROM_CHIPID);
  31.  
  32.   if (chipid != FT801_CHIPID)
  33.   {
  34.     Serial.print("Nie obslugiwany uklad: 0x");
  35.     Serial.println(chipid, HEX);
  36.     return false;
  37.   }
  38.  
  39.   Serial.print("Obslugiwany uklad: 0x");
  40.   Serial.println(chipid, HEX);
  41.  
  42.   // Wlaczamy ekran
  43.   FTImpl.DisplayOn();
  44.  
  45.   return true;
  46. }
  47.  
  48. void punkt(byte i, int16_t x, int16_t y)
  49. {
  50.   char buffer[50];
  51.  
  52.   FTImpl.ColorRGB(0xFF,0xFF,0xFF); // Kolor bialy
  53.  
  54.   // Wyswietl X
  55.   sprintf(buffer, "X%d = %d", i, x);
  56.   FTImpl.Cmd_Text(10, 10 + (i * 30), 24, FT_OPT_CENTERY, buffer);
  57.  
  58.   // Wyswietl Y
  59.   sprintf(buffer, "Y%d = %d", i, y);
  60.   FTImpl.Cmd_Text(170, 10 + (i * 30), 24, FT_OPT_CENTERY, buffer);
  61.  
  62.   // Jesli jest dotyk, rysuj punkt
  63.   if (x != -32768 && y != -32768)
  64.   {
  65.     FTImpl.Begin(FT_POINTS);         // Wybor punktu jako prymitywu
  66.     FTImpl.PointSize(48 * 16);       // Rozmiar punktu 16px
  67.     FTImpl.Vertex2f(x * 16, y * 16); // Punkt x y
  68.     FTImpl.End();                    // Zakonczenie prymitywu
  69.   }
  70. }
  71.  
  72. void scena()
  73. {
  74.   sTagXY sTagxy; // Dane XY + Tag
  75.   sCTouchXY cTouchXY; // Dane XY0-4
  76.  
  77.   FTImpl.GetTagXY(sTagxy); // Pobieramy X,Y,TAG
  78.   FTImpl.GetCTouchXY(cTouchXY); // Pobieramy X0-4, Y0-4
  79.  
  80.   FTImpl.DLStart(); // Otwieramy liste wyswietlania
  81.  
  82.   // Rysujemy punkty
  83.   punkt(0, cTouchXY.x0, cTouchXY.y0);
  84.   punkt(1, cTouchXY.x1, cTouchXY.y1);
  85.   punkt(2, cTouchXY.x2, cTouchXY.y2);
  86.   punkt(3, cTouchXY.x3, cTouchXY.y3);
  87.   punkt(4, cTouchXY.x4, cTouchXY.y4);  
  88.  
  89.   // Kolor guzika
  90.   FTImpl.Cmd_FGColor(0x444444);
  91.  
  92.   // Znacznik przycisku
  93.   FTImpl.Tag(1);
  94.  
  95.   // Opcje guzika
  96.   int tagoption = 0;
  97.  
  98.   // Jesli wykryto tag 1, zmien wyglad i kolor przycisku
  99.   if (sTagxy.tag == 1)
  100.   {
  101.     tagoption = FT_OPT_FLAT;
  102.     FTImpl.Cmd_FGColor(0x880000);
  103.   }  
  104.  
  105.   // Rysuj przycisk
  106.   FTImpl.Cmd_Button(
  107.       5, FT_DISPLAYHEIGHT-90, // X,Y
  108.       300, 80, // W,H
  109.       28, // Font
  110.       tagoption, // Opcje
  111.       "Przycisk" // Tekst przycisku
  112.   );  
  113.  
  114.   FTImpl.DLEnd(); // Zamykamy liste wyswietlania
  115.   FTImpl.Finish(); // Renderujemu liste i czekamy na ukonczenie
  116. }
  117.  
  118. void kalibracja()
  119. {
  120.   FTImpl.DLStart(); // Otwieramy liste wyswietlania
  121.   FTImpl.ClearColorRGB(0x00, 0x00, 0x00); // Kolor czyszczenia czarny
  122.   FTImpl.Clear(1, 1, 1); // Czyścimy ekran
  123.   FTImpl.ColorRGB(0xFF, 0xFF, 0xFF); // Ustawiamy kolor bialy (R,G,B)
  124.  
  125.   FTImpl.Cmd_Text((FT_DISPLAYWIDTH / 2), (FT_DISPLAYHEIGHT / 2), 30, FT_OPT_CENTER, "Dotknij punkty");
  126.  
  127.   FTImpl.Cmd_FGColor(0xFFFF00); // Kolor pierwszego planu
  128.   FTImpl.Cmd_BGColor(0x444400); // Kolor drugiego planu
  129.   FTImpl.Cmd_Calibrate(0); // Kalibracja
  130.  
  131.   FTImpl.DLEnd(); // Zamykamy liste wyswietlania
  132.   FTImpl.Finish(); // Renderujemu liste i czekamy na ukonczeni
  133.  
  134.   FTImpl.SetCTouchMode(FT_CTOUCH_MODE_EXTENDED);
  135.  
  136.   // Pobranie zawartosci 12 rejestrow i wyswietlenie w konsoli
  137.   Serial.println("uint8_t touchCallibration[24] = {");
  138.  
  139.   for (uint8_t i = 0; i < 24; i++)
  140.   {
  141.     if ((i % 4 == 0) && (i > 0)) Serial.println();
  142.     Serial.print("0x");
  143.     Serial.print(FTImpl.Read(REG_CTOUCH_TRANSFORM_A + i), HEX);
  144.     if (i < 23) Serial.print(", ");
  145.   }
  146.   Serial.println();
  147.   Serial.println("};");
  148. }
  149.  
  150. void setup()
  151. {
  152.   Serial.begin(9600);
  153.  
  154.   while (!DisplayInit()) {}
  155.  
  156.   kalibracja();
  157.  
  158.   // Jesli mamy juz skalibrowany
  159.  
  160.   // FTImpl.SetCTouchMode(FT_CTOUCH_MODE_EXTENDED);    
  161.   //
  162.   // for (uint8_t i = 0; i < 24; i++)
  163.   // {
  164.   //   FTImpl.Write(REG_CTOUCH_TRANSFORM_A + i, touchCallibration[i]);
  165.   // }  
  166. }
  167.  
  168. void loop()
  169. {
  170.   scena();
  171. }

Film

Zapraszam również do obejrzenia filmu na temat tych wyświetlaczy jako zapowiedzi obiecanej kontynuacji serii o wyświetlaczach z układami FT800/FT801. Czeka tam na Was również niespodzianka jaką przygotowałem dla Was z firmą UNISYSTEM.

Ocena końcowa

Osobiście uważam, że wyświetlacze (szczególnie z ramką maskującą) to bardzo udana i profesjonalna konstrukcja, pozwalająca na ich wykorzystanie w wielu ciekawych projektach. Na myśl przychodzą mi ekrany reklamowe ze zdolnością interakcji z użytkownikiem. Pasjonaci domowych wynalazków z pewnością znajdą zastosowanie w różnego typu panelach sterujących, gdzie na szczególną ocenę zasługuje wysoka estetyka wykonania i prostota implementacji chociażby z Arduino. Dla firm zajmujących się tematyką na pewno ma tutaj zgodność produkru z unijną dyrektywą RoHS, czego nie zawsze można powiedzieć o azjatyckich odpowiednikach.

Dystrybucją wyświetlaczy Riverdi w Polsce zajmują się firmy Unisystem oraz TME.

Reklama

Komentarze Komentarze
Avatar 1
Radek Windows / Safari 537.36
14 August 2015 - 22:10 Warszawa

Ciągła kalibracja ekranu po uruchomieniu Arduino jest dość frustrująca.
Ale można to zrobić tak...

#define EEPROM_CALIBRATION_DATA_START 1
...
...
if (EEPROM.read(0) != 0x7c) { //czy w EEPROM procesora o adresie 0 zawiera wartość 0x7c
kalibracja(); //nie wiec kalibrujemy ekran i zapisujemy wyniki w EEPROM procesora
for (int i = 0; i < 24; i++) EEPROM.write(EEPROM_CALIBRATION_DATA_START + i, FTImpl.Read(REG_TOUCH_TRANSFORM_A + i));
EEPROM.write(0, 0x7c); // jest ... kopiujemy dane do rejestów "dotyku"
} else {
for (int i = 0; i < 24; i++) FTImpl.Write(REG_TOUCH_TRANSFORM_A + i, EEPROM.read(EEPROM_CALIBRATION_DATA_START + i));
}

Avatar 1
Kamil Windows / Safari 537.36
19 August 2015 - 09:46 Brak informacji

Panele pojemnościowe typu projected capacitive od Riverdi są skalibrowane fabrycznie i nie wymagają w zasadzie kalibracji jeśli ekran wyświetlacza pokrywa się z obszarem panelu dotykowego. Oczywiście niezbędne jest ustawienie rejestrów transformacji FT801 ponieważ rozdzielczość wyświetlacza i panelu dotykowego są różne.

Ale o tym Korneliusz obiecał napisać w przyszłym odcinku;).

Poniżej podaję rejestry transformacji obliczone dla paneli pojemnościowych Riverdi 3.5" oraz 4.3" (wzięte z kodów źródłowych Riverdi Revelation Board - http://riverdi.com/revelation/)

if(tftConfig==CTP43)
{
//Touch calibration using calculated values, this values are proper for 4.3" CTP
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_A,0x0000640F);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_B,0xFFFFFc25);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_C,0xFFF73909);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_D,0x0000014B);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_E,0x00006125);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_F,0xFFF56FDB);
}

if(tftConfig==CTP35)
{
//Touch calibration using calculated values, this values are proper for 3.5" CTP
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_A,0x00005D05);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_B,0xFFFFFD01);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_C,0xFFEB6E37);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_D,0xFFFFFF14);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_E,0x00006C49);
Ft_Gpu_Hal_Wr32(phost,REG_TOUCH_TRANSFORM_F,0xFFEEA73A);
}

Avatar 1
wacki4 Windows / Mozilla Firefox 40.0
01 September 2015 - 14:49 Wałbrzych

Czy istnieje sposób do podpięcia powyższych wyświetlaczy do raspberry pi?

Avatar 1
Kamil Windows / Safari 537.36
11 September 2015 - 19:51 Brak informacji

Jak najbardziej, najlepiej do tego celu użyć Hermes Board czyli płytki przejściowej USB<>SPI ze złączem do wyświetlaczy Riverdi:
http://riverdi.com/hermes-board/
FTDI przygotowało odpowiedni AN dla takiej konfiguracji:
http://www.ftdichip.com/Support/Documents/AppNotes/AN_350_FT800_on_Raspberry_Pi.pdf

Avatar 1
wacki4 Windows / Mozilla Firefox 44.0
03 February 2016 - 09:08 Wałbrzych

A dla przypadku użycia pythona - czy może ktoś próbował coś skomunikować?

Udało mi się napisać odpowiednią \'bibliotekę\' do obsługi rysowania które działa bezbłędnie jednak mam dość spory problem z wysyłaniem obrazów JPG do wyświetlacza, do czego właśnie go potrzebuję. Czy może ktoś coś próbował ? Czy może ktoś byłby chętny by pomóc? Mógłbym udostępnić kod na githubie.

Avatar 1
Sergiusz Windows XP / Mozilla Firefox 40.0
17 September 2015 - 15:28 Warszawa

Witam, a czy dzięki Shieldowi wyświetlacz możemy podłączyc do kazdego Arduino czy tylko do wybranych?

Avatar 1
Kamil Windows / Safari 537.36
21 September 2015 - 14:50 Warszawa

Jak najbardziej do wszystkich, płytki Arduino są ze sobą kompatybilne pod względem sygnałów wyprowadzonych na Shield.

Avatar 1
Sergiusz Windows XP / Mozilla Firefox 40.0
30 September 2015 - 12:34 Warszawa

WItam, mam wyświetlacz RIverdi ze sterownikiem FT813, czy te programu zadziałją z tym sterownikiem?

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 41.0
19 October 2015 - 22:46 Bytom

Tego nie wiem :) Jak dopadnę ten wyświetlacz to sprawdzę

Avatar 1
Kamil Windows / Safari 537.36
30 September 2015 - 13:52 Brak informacji

Witam, na stronie Riverdi są kody do obsługi nowych kontrolerów FT81x, czyli również wyświetlaczy z FT813.
http://riverdi.com/revelation/
Można też skorzystać z Hermes board, czyli płytki dzięki której można dołączyć wyświetlacze Riverdi do dowolnego komputera przez USB, kody do FT813 są również dostępne:
http://riverdi.com/hermes-board/

Avatar 1
Michał Windows 7 / Safari 537.36
05 October 2015 - 17:17 Radom

Witam, szukam bibliotek arduino IDE 1.6.5 do sterownika ft812. Nigdzie nie mogę ich znaleźć, czy jest ktoś w ich posiadaniu ewentualnie wie gdzie ich szukać?
Pozdrawiam

Avatar 2
Jerry Windows 7 / Safari 537.36
12 October 2015 - 18:18 Piła

Witam, zakupiłem wyświetlacz Riverdi rvt43ulfnwc00 (kontroler FT801) wraz z dedykowanym do niego shieldem. Zaimportowałem odpowiednie biblioteki i próbuję wgrać przedstawiony projekt, program wywala mi się na sprawdzaniu typu kontrolera komunikatem: "Nie obslugiwany uklad: 0x0". Jako chipid podaje mi 0 - czy to nie oznacza braku komunikacji z wyświetlaczem? Jak można zweryfikować czy wyświetlacz nie jest uszkodzony?

pozdrawiam

Avatar 1
Sergiusz Windows XP / Mozilla Firefox 41.0
13 October 2015 - 12:01 Warszawa

Masz coś z połączeniem. Dobrze podłączyłeś taśmę? Masz Arduino Uno czy inne?

Avatar 2
Jerry Windows 7 / Safari 537.36
13 October 2015 - 16:31 Piła

Sprawdziłem miernikiem taśmę połączeniową i okazało się że nie wszystkie ścieżki miały przejście. Po wymianie taśmy, nie wiem dlaczego ale na wszelki wypadek zamówiłem dodatkową :), wszystko ruszyło, dziękuję za zainteresowanie.

Avatar 2
Sergiusz Windows XP / Mozilla Firefox 41.0
16 October 2015 - 13:46 Warszawa

Gdzie kupiłeś ten wyświetlacz?;)

Avatar 1
Michał Windows 7 / Safari 537.36
13 October 2015 - 18:21 Pruszcz Gdański

Cześć,
zakupiłem wyświetlacz riverdi 7" ze sterownikiem ft812 oraz tft riverdi shield. Szukam bibliotek sterownika ft812 do arduino uno. Nigdzie nie mogę ich znaleźć, na stronie producenta także nie ma żadnych informacji. Może ktoś z Państwa, jest posiadaniu takich bibliotek albo wie jak "zabrać" się za programowanie wyświetlacza z tym sterownikiem? Czy jest znacząca różnica w porównaniu do ft801?
Pozdrawiam

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 41.0
19 October 2015 - 22:47 Bytom
Avatar 2
Michael Windows 7 / Safari 537.36
14 October 2015 - 10:35 Białystok

Cześć,
jestem szczęśliwym posiadaczem wyświetlacza riverdi 7" z chipem ft812, oraz riverdi tft shield. Próbuję uruchomić ww. wyświetlacz pod arduino uno, jednakże nie mogę znaleźć nigdzie żadnych bibliotek, ani w ogóle informacji jak zacząć programować ww. chip pod arduino uno. Czy jest ktoś kto może posiada te biblioteki, albo wie jak się do tego zabrać? Czy programowanie ft812 różni się znacząco od ft801?
Z góry dziękuję i podrawiam

Avatar 2
Sergiusz Windows XP / Mozilla Firefox 41.0
16 October 2015 - 13:46 Warszawa

Witaj, ja walczę z FT813 na Arduino Mega i Uno . Wrzuciłem przykład Logo z tej strony : http://www.ftdichip.com/Support/SoftwareExamples/FT800_Projects.htm#Arduino . Oczywiście wwaliło mi masę błedów. Ogarnąłem błedy i kompilacja przeszła ok. Ale niestety wyświetlacz dalej się nie uruchamia a według opisu przykład działa ze wszystkimi FT8xx. Możliwe że shield mi padł. Musze to jeszcze spr. Jeśli chcesz gotowy bez błędny przykład Logo napisz maila na : sergiusz.fan@interia.pl podrzucę CI to co mam ;-)

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 41.0
19 October 2015 - 22:48 Bytom

Te biblioteki są dla ft800

Avatar 2
Sergiusz Windows XP / Mozilla Firefox 41.0
28 October 2015 - 15:05 Warszawa

Wiem, przerabiałem bibliotekę według nowych wytycznych dla FT81x ale nie działa. Nie wiesz Korneliusz kiedy, i czy w ogóle wyjdą biblioteki FT81x pod Arduino?

Avatar 1
Adam Windows 7 / Mozilla Firefox 42.0
02 December 2015 - 17:57 Brak informacji

Witam,
czy podłączając wyświetlacz przez Adapter 20-pin ZIF 20 pogę potem podłączyć bezpośrednio do Arduino czy muszę jeszcze dodać jakieś podzespoły (np. rezystor) przy jakiś pinach? Nie lubie nakładek na Arduino:)
Podrawiam

Avatar 1
Błażej Windows 7 / Safari 537.36
23 February 2016 - 21:56 Brak informacji

Hej,
czy już komuś działa FT812 z arduino poprzez Riverdi Shield\'a?
Opiszecie?
Przy poprzednim (FT800) musiałem przerabiać biblioteki. Może teraz już ktoś ma...?

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
27 February 2016 - 01:11 Bytom

Powinienem mieć niedługo nowe FT8xx, więc się zobaczy co tam siedzi

Avatar 1
Błażej Android 5.1 / Safari 537.36
01 March 2016 - 20:41 Warszawa

Super. Ja nadal drepczę w miejscu. A 800x600 kusi...

Avatar 2
Korneliusz Linux Ubuntu / Mozilla Firefox 43.0
02 March 2016 - 21:59 Bytom

Myślę, że niedługo będę wiedział coś o nowych wyświetlaczach

Avatar 1
axonik Windows / Mozilla Firefox 45.0
20 April 2016 - 15:36 Brak informacji

Strasznie wrażliwe na jakość połączeń... zapięcie sondy oscyloskopu na SPI potrafi uwalić transmisję.

Avatar 1
Błaże Mac OS X / Safari 537.36
09 July 2016 - 20:15 Warszawa

Hej,

czy już jest to niedługo? A może komuś innemu udało się połączyć to?

Avatar 1
SunRiver Windows / Safari 537.36
10 July 2016 - 22:28 Warszawa

Będzie libs dla arduino dla FT810 i 811 ale musicie jeszcze chwilkę poczekać, Różnice są znaczne , ale niema tragedii puki co Kinetis :) arduino na końcu.

Avatar 1
Paweł Windows / Mozilla Firefox 53.0
10 May 2017 - 21:02 Brak informacji

Witam
Dopiero zaczynam przygodę z Arduino i mam problem z biblioteką do FT811 , jakiej użyć ?

Avatar 1
Ciro Windows / Mozilla Firefox 61.0
13 July 2018 - 20:34 Brak informacji

I\'m writing in English because I don\'t speak Polish (below I write in Polish with a translator). I have downloaded on the Riverdi site the example file .ino, but I can\'t acquire and print an external variable. I can print only words or sentences. Your algorythm is is very different from that provided by Riverdi.
My question is: with your system, for example, how can I make a voltmeter or multimeter ?

Piszę po angielsku, bo nie mówię po polsku. Pobrałem na stronie Riverdi przykładowy plik .ino, ale nie mogę pobrać i wydrukować zmiennej zewnętrznej. Mogę drukować tylko słowa lub zdania. Twój algorytm znacznie różni się od dostarczonego przez Riverdi.
Moje pytanie brzmi: w twoim systemie, na przykład, jak mogę zrobić woltomierz lub multimetr?