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



Teraz jest 11 lut 2025, o 00:37


Strefa czasowa: UTC + 1





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

Dołączył(a): 08 paź 2013
Posty: 38
Lokalizacja: Gdańsk
Pomógł: 0

Witam,

pracuję sobie nad bibliotekami do HD44780 na podstawie BB. W funkcji lcd_init() wyciąłem kilka poleceń, które były w BB akurat dodane: wyłączenie kursora, włączenie wyświetlacza, przesuwanie kursora bez przesuwania zawartości ekranu. LCD mam cały czas podłączony pod port USB, więc włącza mi się za każdym razem przy włączeniu komputera. No i zawsze po odłączeniu i podłączeniu zasilania wyświetlacz jest czysty... Dopiero wgranie programu od nowa pomogło.

Włączyłem w końcu funkcję odpowiadającą za włączenie wyświetlacza, w ogóle nie sądziłem, że to ma jakiś związek. Dokładnie chodzi o tę:

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


I dzisiaj po włączeniu komputera patrzę i nie wierzę - wyświetlacz wszystko wyświetla bez konieczności ponownego wgrania programu :D

Może mi ktoś wyjaśnić czemu jeden bit robi taką różnicę? Przedtem myślałem, że po prostu chodzi o to, że wszystko zapisuję w pamięci RAM (nie korzystałem na razie z zapisu do FLASH i EEPROM) i dlatego po odłączeniu i podłączeniu zasilania wyświetlacz był czysty. Teraz domyślam się, że chodzi konkretnie o funkcję "Display on/off". Czy jeśli tego nie ustawię w lcd_init(), to wtedy znaki są wysyłane na wyświetlacz, tyle że nie są wyświetlane, bo ten bit nie jest ustawiony...? Nie gadajcie, że to takie trywialne...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 15:37 
Offline
Moderator
Avatar użytkownika

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

Zapewniam kolegę że nie ma żadnych takich efektów żeby wyświetlacz wymagał jakiegoś ponownego wgrywania wsadu... sorki ... ale to jakaś mocno chybiona i dziwna teoria ...

poza tym czy mógłbyś mi wyjaśnić co to oznacza ?

kurys napisał(a):
No i zawsze po odłączeniu i podłączeniu zasilania wyświetlacz jest czysty.


bo hmmm jak kolega sobie wyobraża - że bez zasilania wyświetlacz będzie działał i pozostaną na nim informacje ?

_________________
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: 15 cze 2014, o 15:49 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 paź 2013
Posty: 38
Lokalizacja: Gdańsk
Pomógł: 0

Wyświetlacz czysty - tzn. nie wyświetla żadnych znaków. I do tej pory kiedy wgrałem program, wyłączyłem zasilanie i włączyłem je ponownie, to właśnie było tak, że wyświetlacz nie wyświetlał niczego. Musiałem od nowa wgrać program. Teraz po dodaniu ww. funkcji "Display on/off" kiedy wyłączam zasilanie i znów je włączam, to wyświetlacz wyświetla wgrany tekst. Dlatego myślę, że ta funkcja odpowiada za to, że po wznowieniu zasilania ten tekst nadal (czy raczej od nowa) tam widnieje. Może jeszcze doprecyzuję, że chodzi mi o wyłączenie/włączenie zasilania wspólnego dla mikrokontrolera i zasilacza.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 16:09 
Offline
Moderator
Avatar użytkownika

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

No to ja dodam że wyłączenie zasilania zawsze usunie to co było na wyświetlaczu ... nie ma innej możliwości. Chyba że kompletnie nie wiem o czym ty piszesz tzn że nie rozumiem i w tym kłopot.

To program na procku panie kolego wyświetla coś dopiero na wyświetlaczu a to z kolei nie ma NIC WSPÓLNEGO z koniecznością jego ponownego wgrania ...

więc może zamiast robić takich ogólnych opisów ... weź bibliotekę taka jaka ona jest i pokaż mi tutaj co ty napisałeś w swoim main.c ;) bo tam żeś coś hmmm mega mocno musiał namieszać...

martwi mnie tylko to że twoim zdaniem to co wyślesz do LCD powinno w nim przetrwać nawet po wyłączeniu zasilania :( .... tak nigdy nie będzie

_________________
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: 15 cze 2014, o 17:10 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 paź 2013
Posty: 38
Lokalizacja: Gdańsk
Pomógł: 0

Racja, od wstawienia kodu trzeba było zacząć. Oto main.c, polega na wyświetleniu czegoś na kształt zegara, plus świecenie diodą LED:

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


W funkcji lcd_init() jest wspomniana komenda:

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


i teraz po wyłączeniu zasilania (jednocześnie mikrokontrolera i LCD) i ponownym jego włączeniu - LCD wyświetla wgrane znaki.

Po usunięciu natomiast tej linii z funkcji, LCD nie wyświetla niczego po wyłączeniu i włączeniu zasilania.

mirekk36 napisał(a):
martwi mnie tylko to że twoim zdaniem to co wyślesz do LCD powinno w nim przetrwać nawet po wyłączeniu zasilania .... tak nigdy nie będzie


To jest akurat oczywiste, że bez zasilania nic nie działa :) Chyba, że teraz ja Cię źle zrozumiałem? Chodzi mi raczej o to, że po odłączeniu zasilania kasowane są dane, po włączeniu go z powrotem nadal ich nie ma. Ta jedna wspomniana linia wszystko zmienia.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 17:37 
Offline
Moderator
Avatar użytkownika

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

to teraz posłuchaj - bo rzeczywiście generalnie kod jest napisany trochę na głowie ;) ale ok i tak działa

1. po co ci to

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


na końcu ? toż tego nie piszemy gdy mamy pętlę główną programu np while(1); a ty ją masz .... ale

2. no masz pętlę while(1); czyli PUSTĄ .... po co ci ona ? toż twój program po każdym włączeniu zacznie inną pętlę główną

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


-------------------------------------------

no ale dobra ... i bez tego taki ala zegarek sobie odlicza czas ;) ....

i co to ma wspólnego z tym nie wyświetlaniem się czegoś po wyłączeniu zasilania .... ??? Uwierz mi (i nie gniewaj) bo może jestem niedzisiejszy .... ale co to ma wspólnego z jakimś wyłączaniem zasilania, z jakimś pokazywaniem się znaków czy ich nie pokazywaniem .... na prawdę jakieś (jak dla mnie zaznaczam - a mogę czegoś nie rozumieć) - piszesz jakieś mega dziwne rzeczy

-------------------------------------

ten twój program po wgraniu zaczyna odliczać

wyłączamy zasilanie - wszystko znika z LCD ( i tak ma być ) ;)

włączamy zasilanie - zegarek zaczyna odliczać od nowa - i tak też ma być ;)

i to wszystko na oryginalnych bibliotekach z BB ... co więcej te bity o jakich piszesz nie mają tu NIC DO RZECZY ... więc teraz rozumiesz - czego nie rozumiem ? ;)

------------------------ [ Dodano po: 1 minucie ]

kurys napisał(a):
Po usunięciu natomiast tej linii z funkcji, LCD nie wyświetla niczego po wyłączeniu i włączeniu zasilania.


chyba że chodzi ci o to że nie działa inicjalizacja ... ale to mogło się zdarzyć jeśli masz starą książkę w miękkiej oprawie i na dodatek nie wgrałeś uaktualnienia do LCD które leży na stronie atnela już od 3 lat i się zakurzyło ;)

http://atnel.pl/uaktualnienia-programow-do-dvd.html

------------------------ [ Dodano po: 1 minucie ]

albo używasz jakiejś innej biblioteki ;)


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: 15 cze 2014, o 17:59 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 paź 2013
Posty: 38
Lokalizacja: Gdańsk
Pomógł: 0

Ad. 1 i 2 - racjaaa.... tego while(1); zrobiłem z rozpędu, zupełnie jest niepotrzebny. Usunąłem.

mirekk36 napisał(a):
ten twój program po wgraniu zaczyna odliczać

wyłączamy zasilanie - wszystko znika z LCD ( i tak ma być )

włączamy zasilanie - zegarek zaczyna odliczać od nowa - i tak też ma być


Dokładnie tak - tyle że po usunięciu tej wspomnianej linii ostatni punkt można zamienić na: "włączamy zasilanie - nadal nic nie ma na LCD". Biblioteki oczywiście oparte na BB - wydanie w twardej oprawie. uC taktowany częstotliwością 8Mhz. I właśnie to mnie zastanawia, że ta jedna komenda zmienia tak zachowanie...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 18:41 
Offline
Moderator
Avatar użytkownika

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

No wiec ja ci mowie ... ze wgralem to do procka i za kazdym razem dziala ... ja nie teoretyzuje ... ;) ... dlatego nie wiem o czym mowisz .. i zadnej linijki nie zmieniam

_________________
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: 15 cze 2014, o 19:37 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

No to sam sobie odpowiadasz.
Zajrzyj do DS od HD44780 lub do pliku lcd44780.h z biblioteki "produkcji" Mirka.
Skoro przy inicjalizacji nie włączasz wyświetlacza to jak ma coś wyświetlać.

LCDC_ONOFF|LCDC_DISPLAYON oznacza tyle co 0x08|0x04

A to przekłada się na to co cytuję poniżej z DS-a do wyświetlacza (zwróć uwagę na pogrubienie):

Display on/off control 0 0 0 0 0 0 1 D C B

Sets entire display (D) on/off,
cursor on/off (C), and
blinking of cursor position
character (B)


Mnie tu zastanawia tylko jedno - jak to niby działa po ponownym zaprogramowaniu rozumiem, że również bez tej linijki?

[EDIT]
Z ciekawości aż sprawdziłem i po zakomentowaniu linijki z włączaniem LCD nic nie wyświetla ani po włączeniu zasilania, ani po resecie, ani po ponownym wgraniu programu..
Poza tym jak już wyżej pisałem w HD44780 NALEŻY włączyć wyświetlacz podczas inicjalizacji - w sumie to właściwie można go włączać i wyłączać w dowolnym momencie.

--
Grzegorz...


kurys napisał(a):
Po usunięciu natomiast tej linii z funkcji, LCD nie wyświetla niczego po wyłączeniu i włączeniu zasilania.


Autor postu otrzymał pochwałę


Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 20:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 paź 2013
Posty: 38
Lokalizacja: Gdańsk
Pomógł: 0

Ehh zapomniałem dodać - przy zakomentowanej wspomnianej linii po wgraniu raz jeszcze tego samego programu nadal nic nie jest wyświetlane. Dopiero po wgraniu "wzorca" z płyty jest wyświetlany tekst taki jak w ćwiczeniu w BB (no tak bo dopiero teraz wykonuje się display on...), dopiero potem po wgraniu mojego programu jest zegarek. Mój błąd, że o tym zapomniałem wspomnieć.

Teraz widzę, że mój problem polegał widocznie na niezrozumieniu działania polecenia "display on/off" - brałem to raczej za sterowanie podświetleniem wyświetlacza. Bez sensu, bo od tego są piny do diody podświetlającej ekran...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 20:20 
Offline
Użytkownik

Dołączył(a): 11 wrz 2013
Posty: 709
Zbananowany użytkownik

Pomógł: 23

kurys napisał(a):
Ehh zapomniałem dodać - przy zakomentowanej wspomnianej linii po wgraniu raz jeszcze tego samego programu nadal nic nie jest wyświetlane. Dopiero po wgraniu "wzorca" z płyty jest wyświetlany tekst taki jak w ćwiczeniu w BB (no tak bo dopiero teraz wykonuje się display on...), dopiero potem po wgraniu mojego programu jest zegarek. Mój błąd, że o tym zapomniałem wspomnieć.

Teraz widzę, że mój problem polegał widocznie na niezrozumieniu działania polecenia "display on/off" - brałem to raczej za sterowanie podświetleniem wyświetlacza. Bez sensu, bo od tego są piny do diody podświetlającej ekran...


No to jednak nie zanikła u mnie umiejętność czytania ze zrozumieniem i załapałem o co Ci chodzi.
Tak dla testu wgrałem sobie pomiar temperatury z BB i zamieniłem w main.c

Kod:
if(s1_flag) {   /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */
         


na
Kod:
if(s1_flag) {   /* sprawdzanie flagi tyknięć timera programowego co 1 sekundę */
         lcd_write_cmd( 0x08 );
         _delay_ms(1000);
         lcd_write_cmd( LCDC_ONOFF|LCDC_DISPLAYON );


No i wyświetlane znaki pojawiają się i znikają co 1s.

Podświetlenie nie ma tu nic do rzeczy bo je możesz podpiąć bezpośrednio do VCC lub sterować za pomocą pinu uC. Poza tym niech mnie ktoś poprawi ale ono chyba nawet nie "przechodzi" przez sam układ HD44780, bo jest to po prostu dioda bądź kilka diod pod wyświetlaczem.

--
Grzegorz...



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 15 cze 2014, o 21:05 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 08 paź 2013
Posty: 38
Lokalizacja: Gdańsk
Pomógł: 0

Tak, do podświetlenia - przynajmniej w moim modelu - jest osobna dioda z osobnymi wyprowadzeniami. A myślałem, że za to odpowiada właśnie display on/off - no i skoro dioda jest to po co to robić. A jednak trzeba, bo to diodą nie steruje.



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

Strefa czasowa: UTC + 1


Kto przegląda forum

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