Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Miejsce dobre do dyskusji nad własnymi projektami - pochwal się wszystkim co samodzielnie stworzyłeś.
ODPOWIEDZ
es2
-
Posty: 70
Rejestracja: 13 mar 2018, 9:47

Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: es2 » 29 paź 2019, 9:04

Wyświetlacz z Arduino/AVR/PIC i innymi mikrokontrolerami 8-bit działa wolno ? Animacji nie da się oglądać? https://www.youtube.com/watch?v=yhmGWwZsM7w
Trzeba miec dużo wyobraźni aby nazwać to animacją!
Czy problem można rozwiązać tylko układem FT8xx, którego koszt jest porównywalny z małym wyświetlaczem?
Jest inne rozwiązanie! Nawet na ArduinoUNO animacja może być płynna https://www.youtube.com/watch?v=Smb9O3ywjIo
A nawet można osiągnąć inne rewelacyjne efekty https://www.youtube.com/watch?v=WJrKgPh ... ex=10&t=0s
ponad dwa razy mniejszym kosztem niż w przypadku FT8xx! Funkcja "duszków" dostępna w akceleratorze jest w praktyce niedostępna dla FT8xx. Więcej filmów https://www.youtube.com/playlist?list=P ... acjvhzPRdM
Gdzie nabyć akcelerator? Zapraszam do lektury kolejnych wydań EdW.

Warto zapoznać się z bliźniaczym rozwiązaniem dla WS281x https://forum.elportal.pl/viewtopic.php ... 6ef#p97867
Ostatnio zmieniony 05 lis 2019, 10:13 przez es2, łącznie zmieniany 1 raz.

Awatar użytkownika
kayron
Użytkownik
Posty: 2073
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: kayron » 02 lis 2019, 21:25

Cóż pierwszy filmik robi wrażenie po prostu nieudolnie napisanego kodu, gdzie ktoś początkujący robi podstawowy błąd używając funkcji CLRSCR - Clear Screen, nie ma pojęcia o optymalizacji itd.
Drugi filmik to już standardowo zoptymalizowany kod.
Trzeci filmik już robi pewne wrażenie. Ale...
Co rozumiesz przez akcelerację wyświetlania grafiki? Odpowiednio napisana biblioteka to, tak naprawdę optymalizacja wyświetlania grafiki.
Tak naprawdę zaprezentowany efekt może się wydawać WOW, dla mniej obeznanych programistów grafiki, ale powiedzmy sobie szczerze powiedziałbym WOW gdyby mi ktoś na AVRze zrobił coś takiego https://www.youtube.com/watch?v=WXSlbzitWFc.
Odpalone co prawda na emulatorze C64, ale nie zmienia to faktu że działa na komputerze o 10x mniejszej mocy niż przeciętny AVR.
Tak naprawdę wyświetlanie sześciokąta, narysowanego w grafice szkieletowej, bez usuwania niewidocznych ścian, nie jest wielkim osiągnięciem. Po teksturuj ten sześciokąt, z korektą perspektywy, rozkładem oświetlenia (1 punkt) 256 kolorową teksturą.
PS. Nie zrozum mojej wypowiedzi jako ataku, bo naprawdę temat interesujący, i będę śledził z uwagą, ale pytanie brzmi ile się z tej akceleracji da wyciągnąć w prawdziwych zastosowaniach, a nie demie technicznym. Domyślam że akcelerator, to po prostu odpowiednio zaprogramowany ARM CM0+, który jest interfejsem pomiędzy wyświetlaczem, a innym MCU.

es2
-
Posty: 70
Rejestracja: 13 mar 2018, 9:47

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: es2 » 03 lis 2019, 10:08

kayron pisze:
02 lis 2019, 21:25
Cóż pierwszy filmik robi wrażenie po prostu nieudolnie napisanego kodu, gdzie ktoś początkujący robi podstawowy błąd używając funkcji CLRSCR - Clear Screen, nie ma pojęcia o optymalizacji itd.
Ten początkujący to Adafruit .
kayron pisze:
02 lis 2019, 21:25
Drugi filmik to już standardowo zoptymalizowany kod.
To kod bez optymalizacji, także używa CLR.
kayron pisze:
02 lis 2019, 21:25
Trzeci filmik już robi pewne wrażenie. Ale...
Co rozumiesz przez akcelerację wyświetlania grafiki?
Sprzętowe rysowanie linii, wypełnianie obszarów, itp oraz podwójne buforowanie i paleta kolorów 8-bit.
kayron pisze:
02 lis 2019, 21:25
Odpowiednio napisana biblioteka to, tak naprawdę optymalizacja wyświetlania grafiki.
Ale wszystko ma swoje granice. Jak wyświetlacz nie ma sprzętowego CLR to musisz przesłać sporo danych: x * Y * 2 co przy 128x128 daje 32kB. W przypadku AVR, który wysyła dane po SPI z realnym taktowaniem ok 4..5MHz (Fcpu 20MHz) trwa to "wieki". Do akceleratora wysyła sie kilka bajtów. On sam czyści ekran w ok 2ms ale operacje są buforowane więc można wysyłać kolejne komendy czy dane.
kayron pisze:
02 lis 2019, 21:25
Tak naprawdę zaprezentowany efekt może się wydawać WOW, dla mniej obeznanych programistów grafiki, ale powiedzmy sobie szczerze powiedziałbym WOW gdyby mi ktoś na AVRze zrobił coś takiego https://www.youtube.com/watch?v=WXSlbzitWFc.
Odpalone co prawda na emulatorze C64, ale nie zmienia to faktu że działa na komputerze o 10x mniejszej mocy niż przeciętny AVR.
Zapomniałeś, napisać, że C-64 ma VIC. Nie napisałeś o duszkach i tylko o 16 kolorach.Gdyby go nie miał i praktycznie CPU generował by grafikę (np układ TIA) to efekty byłyby jak na Atari2600 więc nie tak spektakularne jak na C-64. Jakiekolwiek AVR do 6502 + VIC nie ma sensu choćby z powodu liczby barw.
kayron pisze:
02 lis 2019, 21:25
Tak naprawdę wyświetlanie sześciokąta, narysowanego w grafice szkieletowej, bez usuwania niewidocznych ścian, nie jest wielkim osiągnięciem. Po teksturuj ten sześciokąt, z korektą perspektywy, rozkładem oświetlenia (1 punkt) 256 kolorową teksturą.
Nie ma problemu. Akcelerator sobie z tym poradzi, bo działa podobnie, jak FT8xx o czym już pisałem.

es2
-
Posty: 70
Rejestracja: 13 mar 2018, 9:47

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: es2 » 03 lis 2019, 17:37

Na Elektrodzie zachwycają się poprawionymi bibliotekami dla TFT https://www.elektroda.pl/rtvforum/topic3628217.html
Ja ten poprawy nie widzę https://youtu.be/bhneL4KG_1Q bitmapa rysowana jest w widoczny sposób a gra reaguje z dużym opóźnieniem, widać artefakty odświeżanie ekranu to chyba 3 FPS.
Z akceleratorem takich problemów nie ma.

Awatar użytkownika
kayron
Użytkownik
Posty: 2073
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: kayron » 03 lis 2019, 21:41

Hm.. Z tego, co zrozumiałem z twoich wyjaśnień, to twój akcelerator jest 2D, a nie 3D. I się mylisz, w przypadku porównania C64 do AVR, a wynika to z tego że porównujesz to do akceleracji 2D. Obsługa duszków, wypełniania płaszczyzn, nie przyda się w 3D, no może poza wyświetlaniem spiritów, ale też w ograniczonym zakresie. Różnice C64-AVR wbrew pozorom nie są aż takie wielkie w 3D, cały knif tkwi w optymalizacji kodu/obliczeń, i silnika graficznego.
Naprawdę spróbuj sobie z czystej ciekawości, nałożyć na ten sześcian który rysujesz teksturę, nawet najprostszą np. ściana z cegły. W sumie fajna tekstura, bo bardzo jednolita, i nie wymagająca dużo pamięci. Liczba kolorów, nie ma znaczenia, i tak musisz przesłać 16-bitowa paletę do LCD. To czy sobie ją zredukujesz do 256/16 kolorów czy nie, będzie tylko miało wpływ na rozmiar tekstury(kompresja).
PS. Prawdziwe silniki graficzne nie czyszczą ekranu, nadpisują go, jeżeli wąskim gardłem jest interfejs, bądź czas reakcji/odpowiedzi to stosuje się przeplot lub przesyła pół ekrany.

es2
-
Posty: 70
Rejestracja: 13 mar 2018, 9:47

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: es2 » 03 lis 2019, 23:06

kayron pisze:
03 lis 2019, 21:41
Hm.. Z tego, co zrozumiałem z twoich wyjaśnień, to twój akcelerator jest 2D
Zasadniczo tak, ale ze względu na to, że aby postawić piksel wystarczy wysłać, dla małych wyświetlaczy, 4 bajty, dla dużych5 a nie 7 przyspieszone są wszystkie operacje. Wysłanie bitmapy 100x100 punktów, to nie 20kB (dokładnie 20'009 bajtów) a 10k (10'005).
kayron pisze:
03 lis 2019, 21:41
I się mylisz, w przypadku porównania C64 do AVR, a wynika to z tego że porównujesz to do akceleracji 2D. Obsługa duszków, wypełniania płaszczyzn, nie przyda się w 3D, no może poza wyświetlaniem spiritów, ale też w ograniczonym zakresie.
Przeznaczeniem akceleratora jest przyspieszenie operacji dla 8-bit w szczególności dla użytkowników Arduino. W takim przypadku nikt o 3D nie myśli, bo i po co? Raczej to niepotrzebne w przypadku menu itp.
kayron pisze:
03 lis 2019, 21:41
Naprawdę spróbuj sobie z czystej ciekawości, nałożyć na ten sześcian który rysujesz teksturę, nawet najprostszą np. ściana z cegły
Nie będę tego robił bo nikt mi takiej potrzeby nie zgłaszał. Nawet FT800 nie ma wspomagania 3D.
kayron pisze:
03 lis 2019, 21:41
i tak musisz przesłać 16-bitowa paletę do LCD.
Do wyświetlacza owszem ale do akceleratora wystarczy 8 czy 4 bit co już przyspiesza operacje 2 lub 4 razy a podwójne buforowanie załatwia resztę problemów. Animacja https://youtu.be/WJrKgPhbpJc jest generowana przez mega328 16MHz w czasie ok 50ms. Robienie tego piksel po pikselu(duszki, napisy) i blokami (jednobarwne obszary) zajęłoby 500..700ms i co gorsza, owo rysowanie byłoby widoczne. W akceleratorze jednak komenda wysyła bufor do LCD w 31ms. Jeśli więc nawet długo jest generowana klatka animacji, to bedzie ona wolna ale bez efektów takich jak tu https://youtu.be/bhneL4KG_1Q .

Awatar użytkownika
kayron
Użytkownik
Posty: 2073
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: kayron » 04 lis 2019, 9:24

Cóż fajnie, mniemam że projekt ukaże się w EDW. Trochę nietrafny jest moim zdaniem temat tego wpisu, bliżej prawdy by było ARMGPU dla Arduino.
Przeznaczeniem akceleratora jest przyspieszenie operacji dla 8-bit w szczególności dla użytkowników Arduino. W takim przypadku nikt o 3D nie myśli, bo i po co? Raczej to niepotrzebne w przypadku menu itp.
Skoro do ATMEGi328 za 5zł, mam dokładać ARMa z PCB, to rodzi się pytanie, czy nie lepiej od razu postawić to na tym ARMie i rozwiązać sobie większość problemów? Pomijam już że na ARDUINO mamy obsługę ESP8266, który chyba obecnie jest bardziej popularny, niż zwykle ARDUINO na Megach? Ale mogę się mylić, aż tak bardzo już w temacie nie siedzę.
Co do 3D, chciałem spróbować, cię zmotywować, do prób z czymś, czego jeszcze nikt nie zrobił. Taki akcelerator, to już by było coś, nawet gdyby był ograniczony, co do ilości i wielkości obiektów 3D.

es2
-
Posty: 70
Rejestracja: 13 mar 2018, 9:47

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: es2 » 04 lis 2019, 9:58

kayron pisze:
04 lis 2019, 9:24
Skoro do ATMEGi328 za 5zł, mam dokładać ARMa z PCB, to rodzi się pytanie, czy nie lepiej od razu postawić to na tym ARMie i rozwiązać sobie większość problemów?
Zgadzam się w całej rozciągłości ale:
- Dlaczego istnieją wyświetlacze Nextion i ze sterownikiem FT8xx? Można przecież użyć choćby STM32F429 i bezpośrednio sterować matrycą wyświetlacza czy wyświetlaczem ze sterownikiem. Jakiś powód jest, prawda?
- Co da przeciętnemu użytkownikowi Arduino uC, na którym bez problemu można obsłużyć wyświetlacz, jeśli nie potrafi on (nie chce) wykorzystać DMA? Nie ma bibliotek (nie znalazłem) wykorzystujących te mechanizmy.
Użytkownicy Arduino są albo leniwi albo nie chcą się uczyć, w konsekwencji dokładają płytkę do płytki zamiast zrobić projekt na jednym uC.
kayron pisze:
04 lis 2019, 9:24
Pomijam już że na ARDUINO mamy obsługę ESP8266, który chyba obecnie jest bardziej popularny, niż zwykle ARDUINO na Megach?
Nadal króluje UNO z C++ na 2kB RAM co jest, delikatnie ujmując, nie rozsądnym rozwiązaniem dla początkujących.
ESP nie rozwiązuje też w "magiczny" sposób problemu złych bibliotek.
Akcelerator to nie tylko sprzęt, w którym uC jest ok 2 razy tańszy od FT80x ale także biblioteki.
kayron pisze:
04 lis 2019, 9:24
Co do 3D, chciałem spróbować, cię zmotywować, do prób z czymś, czego jeszcze nikt nie zrobił.
Zmotywować może mnie zlecenie na taki projekt.
Zastawów się, widzisz potrzebę w sterowniku kotła CO, w stacji pogodowej,rejestratorze energii elektrycznej, oscyloskopie, generatorze, stacji lutowniczej itp używanie animacji 3D?
Jeśli już potrzebowałbym 3D to zamiast tracić czas na optymalizację użyłbym Linux z choćby RPi.

Awatar użytkownika
kayron
Użytkownik
Posty: 2073
Rejestracja: 21 wrz 2008, 12:53
Lokalizacja: Poland
Kontakt:

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: kayron » 04 lis 2019, 12:04

Użytkownicy Arduino są albo leniwi albo nie chcą się uczyć, w konsekwencji dokładają płytkę do płytki zamiast zrobić projekt na jednym uC.
Niestety muszę ci tu przyznać, rację. Cóż takie pokolenie. Aczkolwiek raz jednego zagiąłem. "E.. to nie jest dzisiejsze, bo nie ma ekranu dotykowego. To jest archaiczne i w o ogóle." Na co mu odpowiedziałem. "A co klawiatury dotykać nie musisz? Tak jakbyś nie zauważył, interfejs dotykowy, natura wymyśliła miliony lat temu." Szczerze, uśmialiśmy się w tedy, jak sobie zdał sprawę, że tak naprawdę nie wymyślono nic nowego od miliona lat.

es2
-
Posty: 70
Rejestracja: 13 mar 2018, 9:47

Re: Jak przyspieszyć kolorowy wyświetlacz LCD/TFT 20...120? razy

Post autor: es2 » 04 lis 2019, 12:45

kayron pisze:
04 lis 2019, 12:04
Użytkownicy Arduino są albo leniwi albo nie chcą się uczyć, w konsekwencji dokładają płytkę do płytki zamiast zrobić projekt na jednym uC.
Niestety muszę ci tu przyznać, rację. Cóż takie pokolenie.
Ale jednego w tym wszystkim nie rozumie. Większość tematów na forach - MA BYĆ TANIO! Później droga,chyba najdroższa z możliwych realizacja. Coś mitu nie "rynksztosuje".

Bliźniaczy temat dopalacza LCD: https://forum.elportal.pl/viewtopic.php?f=62&t=15000 Powstał właśnie z powodu lenistwa czy niewiedzy, niechęci użytkowników Arduino i AVR tak jak i dopalacz dla wyświetlaczy. Rozwiązanie dla WS281x zrobiłem wcześniej aby sprawdzić na jakie problemy napotkam w przypadku TFT. Problemy były. W przypadku WS można się ograniczyć taktowanie SPI do np 1MHz, w TFT dopalacz nie miałby za bardzo sensu. STM32F1xx nie jest w stanie odbierać danych na przerwaniach,z SPI taktowanego szybciej niż 2..4MHz. Trzeb użyć DMA ale wtedy jest problem jak "on-line" dekodować komendy? Problem udało się rozwiązać, dlatego nie widzę większego problemu aby zrealizować akcelerator dla TFT 320x240 po SPI. W przypadku 480x320 muszę obsłużyć interfejs równoległy i zaczynają się schody. Wbudowany używam do TFT a jak przyjmować dane z uC sterującego (Arduino,AVR, PIC)?

ODPOWIEDZ