Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 19 kwi 2024, o 17:47


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 3 kwi 2017, o 10:38 
Offline
Użytkownik

Dołączył(a): 28 mar 2014
Posty: 79
Zbananowany użytkownik

Pomógł: 1

Witam,

Tym razem chciałbym podłączyć mój wyświetlacz oparty na ili9481 pod szynę FSMC STM32. Skonfigurowałem sobie projekt w CubeMX, ale mam pewne wątpliwości co do podłączenia (chodzi o linie sterujące). Wydaje mi się, że powinno być to w ten sposób połączone:

STM32 <-> ili9481
FMC_Ax <-> RS
FMC_NE1 <-> CS
FMC_NWE <-> WR
FMC_NOE <-> RD (nie jest wyprowadzony na module)
GPIOx <-> RESET

Dobrze myślę?

I druga moja wątpliwość. Jak zapisywać dane do tak skonfigurowanego interfejsu. To znaczy jak wpisać komendę, a jak czyste dane? Dotychczas korzystałem z biblioteki UTFT i programowej obsługi LCD. I na przykład moja funkcja wysyłająca komendę wygląda tak:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Domyślam się, że teraz dane mam zapisywać bezpośrednio pod konkretny adres pamięci. Ale czy muszę nadal ręcznie sterować na przykład pinem RS? Będę wdzięczny za jakieś wskazówki.



Ostatnio edytowano 4 kwi 2017, o 23:01 przez r03c10, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 3 kwi 2017, o 16:57 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 302
Pomógł: 32

Witam,

Najpierw poczytaj jak wstawia się kod C w tematach......

W CubeMX jaki tryb pracy wybrałeś dla FSMC? Coś mi się wydaje, że nieodpowiedni. Zaglądnij do dokumentacji procka do działu FSMC. Od tego powinieneś zacząć......

Jak używasz FSMC to nie machasz programowo żadnymi pinami. Wpisujesz pod konkretny adres w pamięci daną. Generowaniem przebiegów zajmuje się FSMC.

A jaki to adres w przestrzeni adresowej będzie - zależy jak masz zrobioną konfigurację FSMC.
Co do adresu dane/rejestry - Inny będzie adres dla rejestrów a inny dla danych. Odpowiada za to pin RS.

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 17:25 
Offline
Użytkownik

Dołączył(a): 28 mar 2014
Posty: 79
Zbananowany użytkownik

Pomógł: 1

Wszystko zadziałało za pierwszym razem:) Pytałem trochę na wyrost bo bałem się podchodzić do FSMC. Jednak jego obsługa okazała się naprawdę prosta wbrew pozorom. Opiszę jak to u mnie wygląda. Może komuś się przyda w przyszłości.

W CubeMX wybrałem oczywiście NOR Flash/PSRAM/SRAM/ROM/LCD 1. CS podłączone do NE1, RS pod A16.

Adresy pamięci dla komend i danych:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Funkcje zapisu komendy i danych:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Jednak po pierwszych testach mam pytanie. Biblioteka UTFT oferowała bardzo przydatną funkcję _fast_fill_16, która pozwalała na przykład szybko wypełnić ekran. Wyglądała ona tak, że raz ustawialiśmy na pinach dane i potem "banglowaliśmy" tylko pinem WR odpowiednią liczbę razy. Poniżej przykład jak to wyglądało:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Teraz z braku możliwości dostępu do pinu WR wpisuję w pętli for dane do LCD_RAM. Wydaje mi się, że spowalnia to cały proces. Może ktoś ma inny pomysł jak to zrealizować żeby osiągnąć poprzednią funkcjonalność.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 kwi 2017, o 22:55 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 302
Pomógł: 32

Witam,

Więc pokaż tą pętlę.

Do tej funkcji _fast_fill_16 co jest przekazywane ?
pix - liczba pikseli ?
ch, cl - kolor starsza oraz młodsza część ?

To raczej na pewno nie będzie wolniejsze:

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2017, o 11:31 
Offline
Użytkownik

Dołączył(a): 28 mar 2014
Posty: 79
Zbananowany użytkownik

Pomógł: 1

Tak, pix to liczba pikseli, a cl i ch to kolor.

Moja funkcja wygląda podobnie jak w przykładzie kolegi. I faktycznie chyba nie ma innej możliwości zrealizowania tej operacji, więc tak już musi zostać.

Pojawił się jednak inny problem. Otóż kiedy wyświetlam napis, gubione są losowo piskele. Doszedłem do wniosku, że co jakiś czas na linii danych pojawiają się zakłócenia. Poniżej zdjęcia obrazujące ten problem (mam nadzieję, że brakujące piksele będą widoczne):

ObrazekObrazek

Oczywiście eksperymentuję z timingami FSMC (zwiększyłem czasy) i jakiekolwiek wartości ustawię, efekt jest podobny.

Dodatkowo co jakiś czas na moment pojawiają się dziwne paski na LCD co też wygląda niekorzystnie.

Całość uruchamiam na DISCO-F429ZI i zastanawiam się czy te zakłócenia nie mają związku z tym, że do pinów FSMC podłączone są inne peryferia (podobny problem miałem z USARTEM).

Chyba będę zmuszony powrócić do realizacjo programowej sterowania LCD bo tam wszystko było wolniejsze, ale za to nie miałem problemu z poprawnym wyświetlaniem obrazu.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2017, o 13:36 
Offline
Użytkownik

Dołączył(a): 01 lis 2013
Posty: 302
Pomógł: 32

Witam,

Ja obstawiam problem w funkcji wyświetlania znaków, a nie problem z magistralą FSMC. Zauważ, że kwadrat jest wypełniony prawidłowo na obu fotkach, które przedstawiłeś.
Kontrolery ILI są dosyć kapryśne. Zawsze możesz zmniejszyć taktowanie kontrolera FSMC. Zaglądnij do PDF-a kontrolera LCD, z jakimi prędokościami może pracować.

_________________
Pozdrawiam,
sq8mvy, Paweł



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 8 kwi 2017, o 14:42 
Offline
Użytkownik

Dołączył(a): 28 mar 2014
Posty: 79
Zbananowany użytkownik

Pomógł: 1

Dzięki za odpowiedź,

Czasy ustawiłem na wartości maksymalne, więc nie powinno być tutaj problemu. Przedtem ustawiałem je zgodnie z notą katalogową. Z tym kwadratem też zauważyłem tą prawidłowość. I ogólnie doszedłem do wniosku, że wszystkie funkcji korzystające z fast_fill_16 działają prawidłowo, a te gdzie wybierany jest pojedynczy piksel sprawiają problemy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 0 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO