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



Teraz jest 20 kwi 2026, o 04:23


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 13 ] 
Autor Wiadomość
PostNapisane: 23 mar 2018, o 21:42 
Offline
Nowy

Dołączył(a): 06 kwi 2017
Posty: 13
Pomógł: 0

Witam
Chciałbym się dopytać/potwierdzić swoje przypuszczenia na temat zapisu znaków do pamięci CGRAM w wyświetlaczu LCD z kontrolerem HD44780.
Chodzi mi o funkcje:

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


Jest tutaj komenda ustawienia adresu CGRAM, a następnie wysłanie do LCD 8 bajtów definiujących znak.
Pytanie czy, gdyby zrobić pętlę z mniejszą ilością powtórzeń to by również poprawnie funkcjonowało ?
Chodzi mi o przypadek, że np. wysyłam komendę do ustawienia adresu CGRAM zapisuję element zdefiniowany 5 bajtami. Następnie chce wysłać już normalny napis za pomocą lcd_str() do wyświetlenia na wyświetlaczu.
Czy 3 bajty z tego napisu będą zapisane do CGRAM bo kontroler spodziewa się 8 bajtów. Podobnie jak trzeba odczytać cały bajt BF, bo kontroler na siłę wysyła całość mimo, że "nam" potrzebny jest tylko starsza część.
Pytanie czysto teoretyczne. Od razu mówię, że nie mam przy sobie układu do testów, żeby sprawdzić co się stanie, a chciałbym rozwiać wątpliwości.
Pytam, bo nie widzę nic co "dało by znać" do kontrolera, że wysyłanie definicji znaku zostało zakończone, teraz już dane do wyświetlania będą wysyłane.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2018, o 22:03 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

Przy próbie skorzystania z lcd_str() jak i z innych funkcji wysłania danych jako znaki do wyświetlenia, sterownik zapewne zachowa się prawidłowo bo musisz zmienić linię RS na stan wysoki (ale na żywo tego nie sprawdzałem więc to teoria). Natomiast jeśli po wysłaniu 5 bajtów spróbował byś wysłać inną komendę sterującą to zapewne 3 bajty nadane zaraz po tamtych pięciu wylądowały by w CGRAM.

PS na forum nie umieszczamy żadnych kodów bibliotecznych z Mirka książek! Większość aktywnych forumowiczów posiada zarówno książki jak i dołączone do nich kody więc wystarczy jak podasz z jakiego działu i jaka funkcja.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2018, o 22:31 
Offline
Nowy

Dołączył(a): 06 kwi 2017
Posty: 13
Pomógł: 0

xentis napisał(a):
Przy próbie skorzystania z lcd_str() jak i z innych funkcji wysłania danych jako znaki do wyświetlenia, sterownik zapewne zachowa się prawidłowo bo musisz zmienić linię RS na stan wysoki.


W obu przypadkach będzie zmiana/ustawienie sygnału RS.

lcd_defchar -> lcd_write_data ->SET_RS; -> _lcd_write_byte

lcd_str -> lcd_char -> lcd_write_data ->SET_RS; -> _lcd_write_byte



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 23 mar 2018, o 23:01 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

Fakt, źle spojrzałem i mój błąd :roll: . W takim razie sterownik zapewne przerwie zapis do CGRAM i wykona komendę zgodną z tym co zostanie wysłane gdy RS będzie w stanie niskim. Ale to też oznacza tyle że jeśli w danym bloku był już jakiś znak to jego fragment zostanie (ten nienadpisany).
Generalnie sprawa jest dosyć prosta sterownik wykonuje komendy a te podajemy gdy RS jest w stanie niskim. Gdy RS jest w stanie wysokim sterownik traktuje je jako dane dla komendy którą wcześniej dostał. Czyli biorąc Twój przypadek w drugą stronę tzn wydłużając pętlę for o kilka obiegów. Sterownik nie wykryje żadnej nieprawidłowości ponieważ nie dostał nowej komendy, a tylko kolejne dany, więc poprostu zinkrementuje licznik adresu i zapisze kolejne dane w następnych komórkach pamięci czyli nadpisze bajty kolejnego znaku.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 mar 2018, o 10:46 
Offline
Nowy

Dołączył(a): 06 kwi 2017
Posty: 13
Pomógł: 0

No i tutaj pojawiają się moje wątpliwości.
Bo schemat jest taki:
CLR_RS
Wysyłam komende "adres Pamięci CGRAM"
SET_RS
Wysyłam 5 bajtów - wysyłanie danych
Wysyłam łańcuch znaków - wysyłanie danych

Pomiędzy wysyłaniem 5 bajtów, a łańcuchem znaków, nie ma żadnej komendy. Czyli RS jest cały czas na 1.
Chyba, że źle rozumuję i powinno się coś dać przed lcd_str().



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 mar 2018, o 18:33 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

Musisz zrozumieć jedną rzecz. Jeśli zapisujesz komendę wyboru adresu CGRAM to ustawiasz sterownik na zapis na tę pamięć od adresu który ustawiłeś. I teraz wszystkie dane jakie nadlecą będą zapisywane w kolejnych komórkach pamięć CGRAM - obojętnie jaka to będzie ilość. Więc gdy po komendzie ustawienia adresu CGRAM wyślesz 5 bajtów znaku a następnie użyjesz lcd_str() to niestety ale bajty przekazane do tej funkcji wylądują również w kolejnych komórkach pamięci CGRAM. Widzisz funkcja lcd_str() została napisana tak by wysyłać znaki na wyświetlacz ale, aby to zrobić najpierw powinieneś ustawić pozycję gdzie mają się te znaki pojawić czyli użyć funkcji lcd_locate() - ta funkcja wysyła komendę do wyświetlacza ustawiającą adres w pamięci DDRAM czyli wybiera zapis do tej pamięci i jednocześnie od której komórki mają być zapisywane znaki. Od tego momentu wszystkie dane które nadlecą będą traktowane jako znaki do wyświetlenia w kolejnej pozycji wyświetlacza (adres komórki pamięci jest automatycznie inkrementowany po zapisie bajtu).
Sterownik nie liczy ilości danych które są zapisywane do poszczególnych pamięci, nie ma też zdefiniowanych ilości jakie powinny zostać zapisane po danej komendzie. Poprostu dopóki nie wyślesz nowej komendy zmieniającej stan rzeczy sterownik wykonuje ostatnią funkcję, czyli jeśli po zapisie definicji znaku do CGRAM nie zrobisz lcd_locate() dane będą cały czas upychane do CGRAM w kółko (licznik adresu będzie się zapętlał czyli po osiągnięciu max zacznie od 0).


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 mar 2018, o 18:52 
Offline
Nowy

Dołączył(a): 06 kwi 2017
Posty: 13
Pomógł: 0

Dzięki za wyjaśnienie, choć to by oznaczało, że w książce jest "skrót myślowy" albo ja jestem taki mało domyślny. Bo na stronie 234 jest przykład definicji znaki z różnych pamięci, a później ładnie lcd_str. W międzyczasie nie ma żadnej komendy.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 24 mar 2018, o 22:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

Tak zgadza się, powinna tam się znaleźć funkcja lcd_locate(), ale jak już zajrzysz do kodów źródłowych ćwiczenia, to tam jest to zrobione tak jak być powinno.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2018, o 11:04 
Offline
Nowy

Dołączył(a): 06 kwi 2017
Posty: 13
Pomógł: 0

W kodzie jest, ale jeżeli jest ktoś tak mało domyślny jak ja ;) to może nie skojarzyć, że "locate" jest również po to, aby przesłać do wyświetlacza informację, że teraz kończę zapisywanie w CGRAM, a zaczynam normalne wyświetlanie. Bardziej bym pomyślał, że jest to po to, aby napis wyświetlić tam, gdzie chcemy, a nie tam gdzie pozostał kursor po poprzednim wyświetlaniu. Moim zdaniem powinno to być napisane ( tak jak to wyjaśniłeś wyżej ), zwłaszcza, że nie każdy czytając książkę, od razu robi testy na procesorze albo sprawdza kody dodane do książki. Jeszcze raz dziękuję za wyjaśnienie.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2018, o 11:40 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

No może i mogło by być napisane, ale zauważ że Mirek stara się wpoić również naturalny odruch sięgania po noty aplikacyjne klocków elektronicznych z których korzystasz (bo co dziwne bardzo dużo osób unika tego jak ognia, owszem są po angielsku - czasem po chińsku - ale czasy w których trzeba było siedzieć ze słownikiem w dłoni już przeminęły. Tera można wejść np na stronkę https://translate.google.pl/ i przetłumaczyć duże fragmenty tekstu, ba nawet cały dokument. Fakt, tłumaczenie nie będzie idealne bo to język techniczny ale do zrozumienia zazwyczaj wystarcza). Więc może i jest to niedopatrzenie, a może mała zachęta do poszerzania horyzontów...
Druga rzecz to książka jest o nauce programowania w C na "przykładzie avr-ów" więc znajomość hardware jest niejako wysoce wskazana. Dla tego Mirek stworzył wiele dodatkowych kanałów informacyjnych wspomagających wiedzę z książek:
kanał no youtube z wieloma treściwymi poradnikami https://www.youtube.com/channel/UC9helAwUtau_y4qyTcSR4Tg,
nawet napisał program dla wygodniejszego oglądania poradników z możliwością tagowania fragmentów http://www.atnel.pl/atnel-video-player.html
blog http://mirekk36.blogspot.com/
i to zacne forum 8-);
wszystko udostępnione za darmo nawet dla tych co książek nie zakupili.



Ostatnio edytowano 25 mar 2018, o 11:49 przez xentis, łącznie edytowano 1 raz

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 25 mar 2018, o 11:40 
Offline
Moderator
Avatar użytkownika

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

dbaran napisał(a):
Moim zdaniem powinno to być napisane

To napisz i będzie napisane ...

dbaran napisał(a):
zwłaszcza, że nie każdy czytając książkę, od razu robi testy na procesorze albo sprawdza kody dodane do książki.

I to jest właśnie tragedia wg mnie - jak ktoś bawi się tylko teoretycznie ... tzn owszem, można bo kto komu zabroni - tyle że ja zawsze mówię, że taka zabawa teoretyczna i działanie na symulatorze to jak lizanie lizaka ale w papierku - wtedy nie czuć smaku ;)

I na koniec - książka nie jest źródłem jakiejś cudownej wszystko mającej biblioteki, która zrobi nie wiadomo co się tobie wydaje ...

Ta książka - mówię o Bluebooku ma zmuszać do samodzielnego myślenia, pokazuję drogę jaką można pójść - PRZEDE WSZYSTKIM jak zabierać się samemu za pisanie takiej biblioteki - zaś sam proces pisania biblioteki, który pokazuję w książce ma za zadanie pokazać różne techniki programowania w C ... Nie ma np w tej bibliotece "jak to niektórzy później piszą i narzekają" obsługi wyświetlania liczb bez znaku większych niż zakres int dla AVR i nie ma być - bo pozostawiam pewne zadania dla czytelnika ...

Tak więc te osoby, które oczekują że książka BB jest po to aby podać na tacy jakąś cudowną bibliotekę - popełniają błąd i to dość bzdurny błąd ... nie oczekuj tylko włóż troszkę własnego wysiłku w poznanie sterownika HD44780 i napisz jeszcze lepszą własną bibliotekę do obsługi LCD - TO JEST MOIM CELEM JAKO AUTORA KSIĄŻKI panie kochany .... i podpowiem ci, że takie podejście do dydaktyki sprawdza się ZNAKOMICIE ... oczywiście w stosunku do tych osób które chcą się czegoś nauczyć a nie oczekują cudownego gotowca....

to nie kto inny jak użytkownik naszego forum - zamiast oczekiwać gotowca stworzył TAKI OTO PORADNIK:



idź zatem tą drogą zamiast mieć pretensje i zgłaszać co powinno być napisane a co nie ... albo ... albo napisz własną książkę i mówię to bez żadnej złośliwości bo ja przed napisaniem książki nigdy w życiu bym się nie spodziewał, że ja napiszę w życiu jakąś książkę - ale postarałem się ... i się udało - więc ty masz równe szanse.

_________________
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: 26 mar 2018, o 11:16 
Offline
Nowy

Dołączył(a): 06 kwi 2017
Posty: 13
Pomógł: 0

Xentis jeszcze raz dzięki za wyjaśnieni. Niestety jak sam autor zaznaczył w książce "jeżeli uda Ci się zdobyć". Do mojego nie znalazłem, jedyne co mogłem to szukać jakiegokolwiek datasheet'u. Do mojego, jedyne co znalazłem to rysunek techniczny. Z ciekawości poszukam jakiegokolwiek i sprawdzę czy będzie tam gdzieś odpowiedź na moje pytanie.

mirekk36 napisał(a):
To napisz i będzie napisane ...


Napisałem, a raczej dopisałem w książce, w razie gdybym kiedyś znów chciał wrócić i sobie przypomnieć.

mirekk36 napisał(a):
I to jest właśnie tragedia wg mnie - jak ktoś bawi się tylko teoretycznie


Najpierw teoria, później praktyka, takie mam podejście. Czytam rozdział/podrozdział, a później praktykuje. Tutaj miałem wątpliwości, wolałem je wyjaśnić nim wrócę do domu z podróży i będę mógł "pobawić się". Dobrze, że ktoś bardziej wyrozumiały umiał rozwiać, a raczej potwierdzić moje wątpliwości.

mirekk36 napisał(a):
I na koniec - książka nie jest źródłem jakiejś cudownej wszystko mającej biblioteki, która zrobi nie wiadomo co się tobie wydaje ...

Ta książka - mówię o Bluebooku ma zmuszać do samodzielnego myślenia, pokazuję drogę jaką można pójść


Nie traktuję tego jako gotowca, cudownej biblioteki. Gdyby tak było to bym nie zastanawiał się nad działaniem dopóki nie wystąpiłby problem. Byłoby copy/paste i wykorzystywanie. A jak xentis napisał w kodach programu już jest locate, więc pewnie "zapomniałbym o sprawie".

mirekk36 napisał(a):
idź zatem tą drogą zamiast mieć pretensje i zgłaszać co powinno być napisane a co nie ... albo ... albo napisz własną książkę i mówię to bez żadnej złośliwości bo ja przed napisaniem książki nigdy w życiu bym się nie spodziewał, że ja napiszę w życiu jakąś książkę - ale postarałem się ... i się udało - więc ty masz równe szanse.


Ograniczenia w moim wolnym czasie są na tyle duże, że tworzenie poradników czy pisanie książek nie wchodzą w grę. Dodatkowo jestem osobą "ścisłą" co już sprawia, że pisanie książek raczej nie było by dla mnie odpowiednim zadaniem. Starcza mi, że musiałem pisanie instrukcji dla operatorów na fabryce.

Na tym kończę tą dyskusję, bo nie ma ona sensu. Wiem co chciałem się dowiedzieć na chwilę obecną, a dalsze pytania i stwierdzenia to chyba trzeba będzie "1000 razy przemyśleć" ( o ile zdecyduje się takie zadać ), żeby nie były odebrane jako "atak", bo chyba tak Pan odebrał wpis, że "to powinno być napisane". Jeżeli tak to źle mnie Pan zrozumiał albo ......



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 26 mar 2018, o 16:44 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 23 paź 2014
Posty: 1041
Lokalizacja: Trójmiasto
Pomógł: 190

dbaran napisał(a):
Do mojego nie znalazłem, jedyne co mogłem to szukać jakiegokolwiek datasheet'u. Do mojego, jedyne co znalazłem to rysunek techniczny.
Jeśli masz wyświetlacz ze sterownikiem zgodnym z HD44780 to nie musisz szukać datascheet-u od konkretnie tego modelu wyświetlacza (bo takie właśnie zazwyczaj mają tylko rysunek techniczny, ewentualnie specyfikację napięciową bo są wersje na 5V lub 3,3V). Notę potrzebujesz jedynie do drivera czyli do HD44780 a ta np jest tu https://www.sparkfun.com/datasheets/LCD/HD44780.pdf - i będzie ona dobra do wyświetlacza 2x16 czy 4x20 bo sterownik jest jeden i ten sam ;)
A do Mirka nie miej żalu. Przy takim ogromie pracy jaką wkłada w przekazywanie wiedzy spotyka się bardzo często z atakami malkontentów i niestety ale wtedy czasem dostaje się komuś kto nie miał złych zamiarów a napisał coś co zabrzmiało dwuznacznie...
Nie dalej jak kilka dni temu trafił się taki jeden co to żale swe wylewał, założył kilka kont i próbował mącić... Ech, szkoda gadać.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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