Skocz do zawartości

Sterowanie wyświetlaczem LCD za pomocą mikrokontrolera.


Pomocna odpowiedź

VSYNC w tym wyświetlaczu nie działa tak prosto jak piszesz... sygnał VSYNC polega na tym, że na ten pin należy dać 0 (0 to synchronizacja) i zrobić jedną poziomą linię, więc nie jest to przerwa w sygnale.

A nawet przy nowej klatce obrazu gdy dam najmniejszy delay to ekran ciągle traci obraz bo wypełnienie na linii CLK musi wynosić 40-60% więc...

 

Cytat

Oczywiście watchdoga można wyłączyć, ale co będzie jeśli program faktycznie wlezie w jakieś while(1){} Albo pochrzanisz coś z mutexami i będzie chciał czekać na dostęp do danych?

Z tym nie ma problemu, poradzę sobie napisać taki kod żeby się nie zawiesił. Tylko jak to wyłączyć na Arduino IDE?

1 godzinę temu, ElektronPL_WiTu napisał:

poradzę sobie napisać taki kod żeby się nie zawiesił.

Też tak kiedyś myślałem... 🙂 Czterdzieści lat siedzenia nad różnego rodzaju klawiaturami nauczyło mnie jednak, że to była bardzo głupia myśl...

A tak przy okazji to właśnie taki kod napisałeś i nawet pokazałeś.

1 godzinę temu, ElektronPL_WiTu napisał:

Tylko jak to wyłączyć na Arduino IDE

Akurat dla ESP32 z poziomu bibliotek Arduino możesz się odwołać do oryginalnych bibliotek Espressifa, więc możesz uzyć ichniejszego podręcznika.

Uprzedzając pytanie: nie, nie wiem, nigdy tego nie robiłem i nie było mi to do szczęścia potrzebne.

1 godzinę temu, ElektronPL_WiTu napisał:

VSYNC w tym wyświetlaczu nie działa tak prosto jak piszesz...

Wiesz... trudno bez specyfikacji wyświetlacza cokolwiek zaproponować, więc najlepiej uznaj moje podpowiedzi za niebyłe i zabierz się za DMA.

Jasne domyślam się, że nie zagłębiając się w datasheet nie da się domyśleć takich rzeczy 😛 

Cytat

...zabierz się za DMA

Mógłbyś przedstawić mi jakieś podstawy jaki jest zamysł tego rozwiązania żebym miał jakiś punkt zaczepienia przy rozpoczęciu pracy nad tym...

DMA to z tego co wyczytałem dostęp bo RAM omijający rdzeń - czyli mam użyć zewnętrznego SRAM'u? (mam kostkę 128KB) aby może ESP32 ma jakiś wsparcie. No zupełnie jestem zielony w tym temacie...

13 minut temu, ElektronPL_WiTu napisał:

DMA to z tego co wyczytałem dostęp bo RAM omijający rdzeń - czyli mam użyć zewnętrznego SRAM'u

Skąd taki pomysł? To w ESP nie ma pamięci do której się można dostać? Weź wyczytaj to sobie porządnie a nie po łebkach, bo wyskakiwanie z takimi pytaniami na forum świadczy nie tyle o braku podstaw (bo to normalne) tylko o braku chęci i pobieżnym tylko zerkaniu do dokumentacji. O ESP napisano bardzo dużo, w dodatku kody wszystkich bibliotek masz na własnym dysku - materiału do czytania masz na miesiąc co najmniej.

Żeby nie było że nie chcę pomóc: używałem DMA na ESP wyłącznie do I2S, do innych celów na razie nie jest mi to potrzebne.

Ja bym proponował zostawić DMA na moment i zacząć od czegoś prostszego, czyli timera. Niezależnie, czy używając DMA, czy CPU i tak konieczne jest ustalenie prędkości transmisji do wyświetlacza - podejście z liczeniem cykli maszynowych się nie sprawdzi, więc proponuję uruchomić timer i na początek programowo go używać. Czyli to co może zrobić DMA najpierw niech robi drugi rdzeń - jest nawet szansa, że to zadziała i DMA nie będzie niezbędne (chociaż zawsze warto czegoś nowego się nauczyć).

Czy mógłbyś dać mi jakiś prosty przykład jak działają timery? Ja nigdy na żadnym sprzęcie ich nie używałem a co ja zobaczyłem w programach do ekranów VGA to się przeraziłem.

Np. żeby na jednym pinie był sygnał o wypełnieniu 50% a na drugim co 3 cykle zegara stan niski a reszta stan wysoki - to bym sobie już rozpracował jak to działa. Albo może miał byś jakiś link który wyjaśnił by w jakiś prosty sposób jak działają timery.

(edytowany)

Dobra, z tymi timerami to był zły pomysł - jednak na esp32 jest zupełnie inaczej niż na stm32, a mi się wszystko pomieszało 😞

W każdym razie jak chodzi o gotowca to proponuję popatrzeć na kod biblioteki FabGL: https://github.com/fdivitto/FabGL

Jest tam kod sterownika VGA, który wykorzystuje DMA, ale zamiast jak myślałem GPIO używane jest I2S - pozostaje przeanalizować kod, a może i przetestować.

Tak jako ciekawostka, że ESP32 może faktycznie generować obraz VGA:

 

 

Edytowano przez Elvis

to właśnie analiza tej biblioteki mnie przeraziła xd

Z tego co widzę to mój aktualny kod w 100% by wystarczył, bo gdy wyświetlacz idzie z rdzenia #0 na maksymalnym priorytecie a w tym samym czasie rdzeń #1 na minimalnym priorytecie bez zakłócania sygnału dla wyświetlacza może operować na pinach >31 więc prosta komunikacja jest możliwa (a tylko taka jest mi potrzebna) tylko ten watchdog... Nie umiem go wyłączyć a to 4000ms robi restart a on mi naprawdę nie jest potrzebny. Mimo wszystko chciałbym spróbować z DMA tylko bym musiał znaleźć jakiś poradnik który pokaże jak to wygląda od podstaw.

Nieaktualne, popróbowałem trochę więcej porobić na tym co pisałem i działa to tragicznie. 1 - za wolno, 2 - niestabilnie. (pomijając notoryczny reset) Myślę że DMA rozwiązało by problem tylko muszę to rozpracować.

Kurde ciemny jestem w tym temacie zupełnie. Co ma format przesyłania dźwięku do sterowania wyświetlaczami? Potrzebuje jakiegoś dobrego poradnika bo ja nie dam sobie z tym rady.

I2S to nie format przesyłania dźwięku tylko interfejs. W każdym razie poczytaj to sam zobaczysz, że w przypadku esp32 jednak coś ma i to więcej niż samo DMA.

Bądź aktywny - zaloguj się lub utwórz konto!

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto w ~20 sekund!

Zarejestruj nowe konto, to proste!

Zarejestruj się »

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się »
×
×
  • Utwórz nowe...