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



Teraz jest 30 mar 2026, o 20:58


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 5 ] 
Autor Wiadomość
PostNapisane: 17 sty 2016, o 21:32 
Offline
Użytkownik

Dołączył(a): 04 kwi 2013
Posty: 107
Lokalizacja: Zabrze
Pomógł: 0

Witam,
zastanawia mnie jedna rzecz. Konkretnie chodzi o funkcje delay ( delay_ms() oraz delay_us() ) zamieszczone w bibliotece Pana Mirka obsługującej wyświetlacz LCD. Jak powszechnie wiadomo funkcje takie blokują wykonanie całego programu (na krótki okres, ale jednak). Czy istnieje inne rozwiązanie, które można by zastosować w tej bibliotece nie blokując przy tym programu?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 17 sty 2016, o 21:47 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Jak stosowany jest pin RW, to biblioteka nie korzysta się z delay-ów (oprócz wczesnej fazy inicjalizacji wyświetlacza, ale to robi się raz na początku). Ale także następuje drobne blokowanie w oczekiwaniu na gotowość wyświetlacza po obsłużeniu poprzedniej operacji.
Jak nie chcesz mieć całkowicie blokującej komunikacji z LCD, to musisz trochę przerobić bibliotekę i zmienić podejście do obsługi wyświetlania (używać buforowania w RAM).

--
Pozdrawiam,
Robert


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 07:11 
Offline
Użytkownik

Dołączył(a): 04 kwi 2013
Posty: 107
Lokalizacja: Zabrze
Pomógł: 0

Na czym polega te buforowanie RAM??



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 09:55 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

jari17 napisał(a):
Na czym polega te buforowanie RAM??

Zobacz tutaj:
http://mirekk36.blogspot.com/2012/02/lc ... fekty.html

masz pokazane jakie efekty można osiągać

a tutaj: http://atnel.pl/jezyk-c-pasja-programowania.html
jest to bardzo szeroko opisane

oczywiście polega to na tym, że przede wszystkim warto korzystać z BusyFlag przy obsłudze wyświetlacza LCD ale poza tym warto zrobić sobie buforowanie w pamięci RAM ... czyli przerobić nieco bibliotekę aby ona wyświetlała dane w buforze RAM, zaś ten bufor był co powiedzmy 20ms wyrzucany cyklicznie na LCD

to nie tylko bardzo przyśpiesza efekty wyświetlania jakie można robić na LCD ale też pozwala o wiele łatwiej i ciekawiej pisać swoje projekty


Autor postu otrzymał pochwałę

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 18 sty 2016, o 14:24 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 11 mar 2014
Posty: 1475
Pomógł: 167

Mirek zrobił prostą, podstawową i uniwersalną bibliotekę. Ty masz specjalne wymagania. Oprócz korzystania z bufora, przy takich wymaganiach powinieneś zrezygnować ze sprawdzania Busy Flag po wysłaniu danych a robić to przed wysłaniem. I powinieneś to robić na warunku nieblokującym. Dzięki temu będziesz miał całkowicie nieblokującą obsługę - jak jest ustawiona busy flaga, to nie wysyłasz kolejnej danej z bufora RAM, tylko robisz inne operacje i za chwilę znowu sprawdzasz BF czy możesz wysłać.

--
Pozdrawiam,
Robert



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: 5 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 2 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