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



Teraz jest 16 sty 2018, o 14:07


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 7 ] 
Autor Wiadomość
PostNapisane: 11 sty 2018, o 15:36 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 202
Lokalizacja: Norwegia
Pomógł: 13

Dzien dobry

Przeportowalem sobie dla Cypressa, biblioteke wyswietlacza graficznego HX8357B z interfejsem rownoleglym 16 bit ktora przygotowalem tydzien temu dla procesora Atmega32. Biblioteka spisuje sie bardzo fajnie i jestem zadowolony.
Po kilku modyfiacjach tej biblioteki wyswietlacz zaczal mi dzialac na CY8CKIT-059 na ktorym siedzi CY8C5888LTI - LP097. Wszystko by bylo jak w raju tylko mam jeden klopot. Wyswietlacz wyswietla wszysto poprawnie ale bardzo wolno. Wypelnienie ekranu kolorem trwa okolo 4 sekundy.... Pomyslalem ze przegapilem cos z ustawieniami zegrara w projekcie. Wczesniej uruchamialem kilka projektow na Cyprysie z uzyciem wyswietlacza znakowego, i kilku dodatkowych rzeczy jak Quadraturowy sterownik encodera, czy transmisja po SPI do modulow zewnetrznych.. wszystko dzialalo sprawnie. Teraz uruchomilem ten nieszczesny wyswietlacz i dziala jak slimak.
Na Atmedze32 dziala wysmienicie a tutaj jakas kiszka :(

Czy powinienem jakos inicjowac zegar przy tak prostej obsludze TFT czy moze sa inne przyczyny konfiguracyjne o ktorych nie wiem. Bawie sie Cyprysami od momentu kiedy Mirek wyemitowal swoje poradniki wiec moje doswiaczenie jest marne.

Macie jakies sugestie?

Jak wroce do domu przedstawie kod, ale nie wiele on sie rozni od tego ktory pokazalem tutaj dla AVR http://forum.atnel.pl/topic19932.html
Pokaze tez film z pracy tego wyswietlacza.. praca w naprawde zwolnionym tempie. (a przeciez steruje magistrala 16bit rownolegle) :(

Tak to wygląda na żywo

funkcje czyszczenia ekranu kolorem czarnym, jeszcze raz kolorem niebieskim i kolejno funkcje wywalające stringi... bez delayów i innych spowalniaczy.

Teraz fragmenty kodu
Funkcje wysyłania 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.


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


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


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


Czyszczenie kolorem

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


No nie wiele się różnią te funkcje od tych dla AVRów.. a jednak jak widać na filmie, coś pominąłem :( bawiłem się ustawieniami zegara w projekcie ale to nie ma żadnego wpływu na działanie wyświetlacza. Zmieniałem też porty, ale efekt zawsze ten sam.

Szukam i szukam i nie znajduję a moja stara głowa już domaga się relaksu :)

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

_________________
Skype - SP2LUB http://www.sp2lub.pl



Ostatnio edytowano 13 sty 2018, o 18:41 przez SP2LUB, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 19:35 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 214
Lokalizacja: Szczecin
Pomógł: 33

Tutaj kluczowa dla szybkości jest funkcja hx8357d_fillRect (), której nie Pokazałeś.

ps.
dlaczego w funkcji writedata( uint8 dat )
"dat" jest uint8 ?

za chwilę w tej funkcji robisz operacje:

PORTA_Write (dat>>8); co przy 8 bitach jest bez sensu (chyba że ma być wpisywane 0 )
PORTC_Write (dat); czyli wpis 16 bitowy



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 19:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 202
Lokalizacja: Norwegia
Pomógł: 13

PORTA i PORTC to porty ośmiobitowe w obu przypadkach PSoC i AVR, te funkcje pracują poprawnie..

natomiast fillRect 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.


To raczej nie jest przyczyną wolnej pracy.. ponieważ stringi też piszą się jak krew z nosa :(

_________________
Skype - SP2LUB http://www.sp2lub.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 11 sty 2018, o 20:52 
Offline
Użytkownik

Dołączył(a): 22 gru 2013
Posty: 214
Lokalizacja: Szczecin
Pomógł: 33

Widzę, że są 8-bitowe; ale wysyłasz do funkcji "writedata" daną 8-bitową, następnie zerujesz ją (dat>>8), wpisujesz do "górnego" portu,
wpisujesz daną dat do "dolnego" portu i wysyłasz oba portu do sterownika. Jaki jest sens tej operacji : PORTA_Write (dat>>8) , jeżeli i tak zawsze argument będzie zerem ?

Co do "hx8357d_fillRect" , szybsza będzie pojedyncza pętla np.

for (uint16_t i=0; i<w*h; i++) {...}
gdzie w*h liczba pikseli do zapisu ( być może trzeba dodać: w*h+1)

ps. można także spróbować wyprowadzić sygnały CS_L/CS_H odpowiednio przed i za pętlę-powinno działać szybciej.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2018, o 06:35 
Offline
Użytkownik

Dołączył(a): 25 lip 2013
Posty: 1222
Pomógł: 60

Żeby sprawdzić częstotliwość pracy procka to bangluj jednym z pinów (bez żadnych delayów) a analizatorem sprawdź częstotliwość migania.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 12 sty 2018, o 18:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 202
Lokalizacja: Norwegia
Pomógł: 13

Zarówno analizator jak i oscyloskop są zgodne co do tego że mój CYCKIT pracuje za wolno :)
Obrazek

Obrazek

1,7MHz jest raczej dalekie od spodziewanych 24MHz... nie bardzo wiem jak w kreatorze mogę się do tego dobrać. Próbowałem bawić się w ustawieniach z zakładki "Cloks" ale bez względu na to co tam ustawię, układ zachowuje się tak samo.

.

_________________
Skype - SP2LUB http://www.sp2lub.pl



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 13 sty 2018, o 19:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lut 2016
Posty: 202
Lokalizacja: Norwegia
Pomógł: 13

No i rozgryzłem orzeszka :)
Tak jak pokazałem w poprzednim poście, pomiary czasów na banglowanym pinie trochę mnie zaniepokoiły. Cały czas byłem przekonany że mój problem powolnej pracy wyświetlacza jest związany raczej z hardwarem a dokładnie z konfiguracją zegara.
Ponieważ męczyłem się z ustawieniami zegara na wszystkie sposoby i nie uzyskałem niemal żadnej poprawy, zacząłem przewalać dostępne w internecie informacje udostępniane przez CYPRESS a dotyczące właśnie użycia i konfiguracji GPIO oraz zegara i w ogóle czasów...
W jednym z takich not znalazłem cenne informacje na których oparłem dalsze prace. http://www.cypress.com/file/45381/download
Po pierwsze przekonałem się że narzędzie PSoC Creator jest ok ale nie do końca należy się na nim opierać.
Przykład:
Po wybraniu Digital Output Pin z Katalogu Komponentów i wygenerowaniu dla niego API czyli plików .c oraz .h zawierając makra pomocne przy obsłudze każdego komponentu. Jednak należy być ostrożnym przy używaniu zdefiniowanych przez kreator makr.
Jeżeli potrzebuje w moim projekcie banglować jakimś pinem, ma do dyspozycji proste makro:
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

No i super :) ale uwaga mamy też do dyspozycji bezpośredni dostęp do rejestru tego pinu (sposób przedstawiony przez Mirka w jego poradniku) i wtedy to samo banglowanie będzie 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.

Porównanie działania obu makr jest po prostu powalające, otóż pin balglowany makrem _Write w moim układzie generował cztery razy wolniejszy przebieg od banglowania makrem dostępu do rejestru _DR. Tak tak różnica jest aż tak duża. Pewnie dla Tych z Was którzy obeznani jesteście w tych procesorach to nic nowego, dla mnie jednak to nauczka która pomogła mi opanować problem " slimaczej pracy".
Po tym doświadczeniu przewaliłem całą bibliotekę i pozmieniałem wszystkie makra...
Mój projekt zaczął chodzić jak rakieta. Jednak pojawił się nowy problem :) Po uzyskaniu wysokiej szybkości pracy mojej przeportowanej biblioteki, pojawiły się problemy z kolorami... czasami każdy font w stringu miał inny kolor albo pojawiały się dziwne echa.. Znowu zacząłem przyglądać się zawartości funkcji rysujących na wyświetlaczu i zacząłem wstawiać opóźnienia. Wszystko zaczęło działać prawidłowo po wstawieniu zwłoki 40uS w makro WR_STB. ale wtedy znowu wyświetlacz pracował w tempie ślimaczym
Wpadłem na pomysł przetestowania wyświetlacza na moim zestawie ATB 1.05 z zainstalowanym CYPRESS SHIELD na którym wlutowałem sobie CY8C5267AXI - LP051. No i biblioteka pracuje po prostu MEGA SZYBKO !!!! wywaliłem wszystkie delaye i testowałem na wiele sposobów i wszystko działa wręcz idealnie.
Ok co zatem jest nie tak z CY8CKIT-059 PSoC® 5LP Prototyping Kit ?????
No problem okazał się banalny, to znaczy kondensatory które są umieszczone na niektórych pinach w tym module. Niestety ja potrzebowałem dwóch portów całych do sterowania wyświetlaczem i jeszcze czterech pinów do obsługi. Mimo iż testowałem wyświetlacz na trzech różnych portach, to zawsze trafiałem na jakieś piny na których siedział 1uF i który przy wyższych prędkościach powodował problemy. (Piny P0.2, P0.3, P0.4, P3.2 na tych pinach umieszczone są kondensatory 1uF)
Dzielę się z Wami tym bo zapłaciłem za moją głupotę 3 dni !! a przecież na opisówce CYCKITu jest gwiazdeczka z opisem do których pinów dolutowano kondensatory.



a tak działa znowu na CYCKIT po wylutowaniu kondensatorów 1uF - C9, C12, C13 na porcie P0 oraz C7 na P3.2. Właśnie tych portów P0 i P3 używałem do transferu danych do wyświetlacza.


_________________
Skype - SP2LUB http://www.sp2lub.pl



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