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



Teraz jest 26 mar 2026, o 19:38


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 18 ] 
Autor Wiadomość
PostNapisane: 19 lis 2014, o 15:52 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Przerobiłem sobie dzisiaj bibliotekę LCD Mirka na buforowaną - w sumie kosmetyczne zmiany. O zaletach takiego rozwiązania można by książkę napisać (no może większą broszurkę ;)), ale coś innego zaprząta moją głowę. Otóż kiedy aktywuję kursor sprzętowy wyświetli się na pozycji 0,0 i jest tam dopóki nie odświeżę ekranu przez moją funkcję lcd_view(). Po tym fakcie nawet permanentne ponowne próby włączenia kursora nie daje efektu. Próbowałem, przed/po każdym odświeżeniu i nic... kursor przepadł... Czy ktoś może się wypowiedzieć na temat?

Sama funkcja odświeżacza 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.


Funkcja lcd_locate() podobnie jak lcd_write_data(...) jest oryginalna (ta druga przeniesiona z funkcji lcd_char(), która obecnie zajmuje się zapisywaniem znaku w buforze).

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2014, o 16:10 
Offline
Moderator
Avatar użytkownika

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

Ja teraz nie jestem pewien - tak na szybko i z pamięci piszę - ale wydaje mi się, że to normalne zjawisko ... i przy takim buforowanym wyświetlaniu po prostu warto sobie zrobić własny programowy kursor co nie powinno być najmniejszym problemem - co ciekawe nawet kursor z własnym zdefiniowanym wyglądem ;)

Bo zobacz - odświeżacz często wprost przepisuje do LCD całe dwie linie dzieje się to tak często (nawet czasem częściej niż częstotliwość migotania kursora sprzętowego) że on po prostu znika ...

ja szczerze mówiąc nigdy nie korzystałem ze sprzętowego kursora - zawsze jeśli już potrzebowałem to wolałem go zrobić ręcznie - a w przypadku dodatkowo takiego buforowania to już bajka - że tak powiem na szybko warstwa kursora ;) i po zawodach - nawet można mieć kilka kursorów jakby się uprzeć ;)

_________________
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: 19 lis 2014, o 16:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Dzięki za zainteresowanie Mirku :)
mirekk36 napisał(a):
...odświeżacz często wprost przepisuje do LCD całe dwie linie dzieje się to tak często (nawet czasem częściej niż częstotliwość migotania kursora sprzętowego) że on po prostu znika ...

W tym rzecz, że póki co przy testach zrobiłem odświeżanie na żądanie pod guzikiem, a więc funkcja wykonuje się tylko raz w momencie wcisku (później jest blokada i czeka na odblokowanie drugim guzikiem)

mirekk36 napisał(a):
ja szczerze mówiąc nigdy nie korzystałem ze sprzętowego kursora - zawsze jeśli już potrzebowałem to wolałem go zrobić ręcznie - a w przypadku dodatkowo takiego buforowania to już bajka - że tak powiem na szybko warstwa kursora i po zawodach - nawet można mieć kilka kursorów jakby się uprzeć


A widzisz :) ja za Bascoma bardzo go lubiłem bo przy edycji parametrów ładnie podkreślał mi edytowaną cyfrę i chciałbym zrobić to samo w C.
Przeszło mi przez myśl aby programowy zmontować tylko pojęcia nie mam jak go wmiksować pod już wyświetlony znak. Myślałem też o kursorze w postaci migającego reversu znaku, ale tu też jest problem, bo w tablicy nie ma odwróconych. Pozostaje chyba tylko szybkie miganie na zmianę kursor-znak...
O, tu na filmie widać jak w jednym z moich sterowników działa ten kursor na jaki mi właśnie zależy:

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2014, o 16:51 
Offline
Moderator
Avatar użytkownika

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

Wiesz co ja teraz nie pamiętam dokładnie niestety ale jak się kiedyś bawiłem w kursor programowy to zwykle zdecydowanie wolałem zrobić to tak żeby mi np znak w tym miejscu szybko ładnie migotał niż był podkreślony bo to podkreślenie zawsze mi się nie podobało, tak samo w niektórych wyświetlaczach bywa że nie ma podkreślenia tylko na przemian miga znak i cały np czarny prostokąt

... dlatego być może troszkę po macoszemu zawsze w swoich bibliotekach traktuję kursor sprzętowy ... dlatego tak na gorąco niestety przykro mi nie mam tu innego pomysłu żeby ci podpowiedzieć

------------------------ [ Dodano po: 5 minutach ]

SylwekK napisał(a):
W tym rzecz, że póki co przy testach zrobiłem odświeżanie na żądanie pod guzikiem, a więc funkcja wykonuje się tylko raz w momencie wcisku (później jest blokada i czeka na odblokowanie drugim guzikiem)


No tak ale teraz hmmm funkcja się wykona wyświetli dwie pełne linie i kursor sprzętowy przeniesie się o jeden znak poza ekran

próbowałeś może go wtedy ponownie ustawić w interesującym ciebie miejscu ? możesz przecież na czas USTAWIANIA czegoś tam - zatrzymać wyświetlanie buforowane może i statycznie chwilę podziałać z kursorem sprzętowym - powinno chyba pójść co ?

_________________
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: 19 lis 2014, o 16:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Świat się nie zawali :), tak już mam, że jak jest problem z jednym rozwiązaniem to wymyślam sobie alternatywne, które często jest lepsze od tego, które było pierwotnie planowane ;)
Mimo wszystko temat zostaje otwarty, jakby ktoś na coś wpadł, a póki co będzie chyba migał czarny kwadrat :)
Pozdrawiam

------------------------ [ Dodano po: 3 minutach ]

mirekk36 napisał(a):
No tak ale teraz hmmm funkcja się wykona wyświetli dwie pełne linie i kursor sprzętowy przeniesie się o jeden znak poza ekran

Kurcze to może być to(!), bo jego trzeba naprowadzić przecież sprzętowo przez lcd_locate()... sprawdzę to za chwilę :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 19 lis 2014, o 17:05 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
bo jego trzeba naprowadzić przecież sprzętowo przez lcd_locate()

No to na pewno ;) ... bo jest poza ekranem


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: 19 lis 2014, o 18:02 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Hehe, no i kazało się, że kursor był poza ekranem. A, żeby było śmieszniej od początku wiedziałem, że lcd_locate() (przemianowane zresztą już na cursor(y,x)), będzie mi służyło do ustawiania jego pozycji, a kompletnie nie skojarzyłem tego z faktem, że on też może wyjść za ekran(!).
No cóż, jak zwykle dzięki Mirku za trafne spostrzeżenie :)... chyba jednak będę musiał zacząć się wysypiać, bo nieco ponad 3h snu to jednak trochę za mało i zamiast racjonalnie myśleć część mózgu po prostu śpi na jawie ;).

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2014, o 21:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

No w wolnej chwili jeszcze podrasowałem bibliotekę i teraz po odświeżeniu kursor pamięta swoją ostatnią pozycję (oprócz tego, że można go też ustawić w dowolnym miejscu).
Wykonałem też parę pomiarów z ciekawości:
Samo odświeżanie na procku 16MHz trwa 2.1ms - zmniejszyłem nieco czas oczekiwania przy wysyłaniu bajtu ze 120 na 50us. Działało też bez problemów na 40 ale przy 30us już się krzaki sporadyczne pokazywały. Badanie BF by to maksymalnie przyspieszyło, ale i tak nie jest źle :)
Wysłanie napisu do bufora, a dokładnie lcd("Napis:"); trwało 11us i taka prędkość mnie bardzo satysfakcjonuje, bo naprawdę otwiera to nowe możliwości w sterowaniu LCD.
Zachęcam do takich modyfikacji. Nie jest to trudne, a można nowe doświadczenia zdobyć.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 20 lis 2014, o 21:23 
Offline
Moderator
Avatar użytkownika

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

SylwekK napisał(a):
Badanie BF by to maksymalnie przyspieszyło


Tu przyśpieszenie przy powolnych zwykłych LCD nawet za dużo nie da bo mają sporą bezwładność - no ale na niektórych nowych OLED'ach ze sterownikiem HD44780 to już można ślicznie poszaleć - oczywiście stosując BF i dobre prędkości odświeżania - wtedy ładnie animacje widać ;)

_________________
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: 20 lis 2014, o 21:34 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

mirekk36 napisał(a):
Tu przyśpieszenie przy powolnych zwykłych LCD nawet za dużo nie da bo mają sporą bezwładność - no ale na niektórych nowych OLED'ach ze sterownikiem HD44780 to już można ślicznie poszaleć - oczywiście stosując BF i dobre prędkości odświeżania - wtedy ładnie animacje widać

Zgadza się, jakichś cudnych animacji na zwykłym się nie uzyska :), ale bardziej mi chodziło w tym momencie o zminimalizowanie blokowania pętli głównej. Przeszło mi też przez myśl sprawdzanie czy były zmiany w buforze, ale to dodatkowe zużycie pamięci, a przydatność dyskusyjna. Dla mnie ważne, że mogę dalej z robotą ruszyć, a bałem się podchodzić (co okazało się wcale niegroźne ;)) do modyfikacji LCD.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2014, o 00:15 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

I znowu zmiany :) Już wszystko z kursorem przy funkcji edycji zmiennych działało dokładnie tak jak w wersji bascomowej, a właściwie to nawet lepiej, bo mimo napisania własnej obsługi formatującej liczbę do edycji to program w C zawierał mniej linii(!) niż w bascomie, a do tego rozbudowałem go o umieszczenie w dowolnym miejscu ekranu, to zachciało mi się eksperymentować z prędkością odświeżania (dokładnie z pochłanianym czasem na przepisanie danych do LCD). Musiały być cięcia i (tu między innymi wziąłem sobie do serca co Mirku mówiłeś o różnych kursorach zamiast sprzętowego) właśnie musiał zniknąć sprzętowy kursor, bo nie dość, że czas zabierał to wprowadzał sporo zamieszania. Podsumowując po kolejnej zmianie procedury odświeżania LCD wykonuje się ona na zegarku 16MHz w pętli głównej w czasie około 65us na każdy obieg (co mnie strasznie ucieszyło i otworzyło nowe możliwości), a tych obiegów musi być minimum 18 dla LCD 2x16. Oczywiście aby zachować płynność główny program musi być nieblokujący, ale to mi akurat kompletnie nie przeszkadza, bo zawsze robię przelotowe :) Sama funkcja odświeżania ma swój parametr dzięki, któremu możemy też odświeżyć wszystko za jednym zamachem, całkowicie pominąć rysowanie na LCD albo jest też opcja blokady czyszczenia buforu (przy odświeżeniu, również i tym cyklicznym, automatycznie czyszczony jest bufor) - zresztą bardzo dla mnie przydatna.
Poniżej demonstracja (bo to na razie jedyna opcja tego programu oprócz migania sobie czymś tam na ekranie ;)) aktualnej funkcji edycji czteroklawiszowej (nawiązującej do poprzedniego filmiku) współpracująca z moją wersją buforowania. Myślę, że jest intuicyjna i przyjemna, a przede wszystkim błyskawiczna edycja liczb od 0 do 65535 (po kosmetyce nawet i zmienne long).

(Jak ja żałuję, że tyle czasu straciłem na bascoma... ech Mirek, za późno książkę napisałeś ;) )


_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2014, o 00:25 
Offline
Moderator
Avatar użytkownika

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

No to cieszę się że poczułeś MOC :lol:

SylwekK napisał(a):
ech Mirek, za późno książkę napisałeś

Obiecuję, że na drugi raz postaram się szybciej :lol:

fajnie że kolejna osoba dostrzegła te fajne możliwości z WARSTWAMI na takim nawet alfanumerycznym LCD .... CUDA można robić. A jeśli chodzi o blokowanie czy nieblokowanie pętli głównej - to też pomyśl że fajne jest w tym przypadku to - że czasem gdy na ekranie NIC się nie zmienia a potrzebujemy FULL SPEED pętli na inne procesy to spokojnie można wyłączyć odświeżanie - dane przecież i tak będą cały czas na LCD a my szybko zrobimy co potrzeba

chociaż jak sam widzisz - tak szybką obsługę LCD i tak można wręcz traktować jako nieblokującą

_________________
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: 28 lis 2014, o 00:31 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Coś Ci chyba Mirku w tym moim przydługim akapicie umknęło odnośnie pomijania odświeżania ;)

SylwekK napisał(a):
...Sama funkcja odświeżania ma swój parametr dzięki, któremu możemy też odświeżyć wszystko za jednym zamachem, całkowicie pominąć rysowanie na LCD albo...


Pozdrawiam :)

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 28 lis 2014, o 00:35 
Offline
Moderator
Avatar użytkownika

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

a możliwe - sroki - .... widzę że już cudeńka z tym robisz ;)

_________________
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: 6 sty 2015, o 08:28 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 26 gru 2014
Posty: 7
Pomógł: 0

Witam
Czy można prosić o udostępnienie źródeł które obsługują wyświetlanie i umieszczanie kursora w danej pozycji.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 12:16 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Nie bardzo rozumiem :shock: Rozwiń może bardziej co Ci tak naprawdę potrzebne, bo w Mirkowych bibliotekach wszystko przecież jest na tacy, ewentualnie wystarczy w opcjach zaznaczyć aby odpowiednie funkcje od kursora się kompilowały.

_________________
http://www.sylwekkuna.com



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 16:07 
Offline
Nowy
Avatar użytkownika

Dołączył(a): 26 gru 2014
Posty: 7
Pomógł: 0

Chciałbymłbym osiągnąć taką funkcjonalność jaką prezentujesz na filmiku:
www.youtube.com/embed/AB_zasYbqR4
Ustawianie i wyświetlanie kursora w danym miejscu.
Mógłbyś mi pomóc w napisaniu podobnej funkcji ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 sty 2015, o 17:27 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 22 paź 2013
Posty: 1988
Lokalizacja: Lipsko
Pomógł: 125

Aaaa, to Tobie o edytor chodzi, a nie o kursor :) Ten kursor, który tam widzisz to tak naprawdę nie kursor tylko podkreślnik z tablicy znaków (ten prawdziwy kursor sprzętowy jest o jedną linijkę w znaku niżej).
Zacznijmy od tego, że gotowca wolał bym Ci jeszcze nie dawać.
Wykorzystane jest tu 4-klawisze lewo (Menu), pawo(OK), góra(+), dół(-). Przede wszystkim analizuj jak to działa. Spróbuj wypisać w punktach te działania. Dla ułatwienia podam, że klawiszem OK wchodzisz w edycję, a wychodzisz w momencie gdy kursor stoi na którejś ze skrajnych pozycji i chcesz go dalej przesunąć. Zacznij coś pisać to ruszymy dalej ;)

_________________
http://www.sylwekkuna.com



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

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