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



Teraz jest 28 wrz 2024, o 23:22


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 25 ] 
Autor Wiadomość
PostNapisane: 6 lut 2013, o 14:34 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Witam kolegów,

Zdobyłem ostatnio wyświetlacz LCD 4x40 zbudowany na 2-ch sterownikach HD44780. LCD on posiada dwie linie enable E1 i E2. Pierwsza E1 do odsługi linii 1 i 2 wyświetlacza a druga E2 obsługuje linię 3 i 4. Reszta linii jest wspólna.

Może ktoś ma pomysł jak sprytnie dostosować gotowe bilioteki (korzystam z bibiotek Pana Mirka), aby łatwo sterować wszystkimi liniami wyświetlacza wywołując np. polecenie lcd_locate(x,y). Rozumuję, że system powiniem w zależności od numeru linii czyli 1 i 2 aktywować linie enable E1 a przy próbie wyświetlenia tekstu w linii 3 lub 4 aktywowac linie enable E2.

Z góry dziekuje za sugestie.

Pozdrawiam
Jarek



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 14:58 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

możesz sterować oddzielnie lub obie linie E1 i E2 połączyć razem
co będzie dla ciebie lepsze sprawdzisz doświadczalnie

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 15:10 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Mysle, że połączyć razem to raczej nie, gdyż wtedy wyświetlacz wyswietlał by w 1 i 2 linii to samo co w 3 i 4.
Trzeba raczej oddzielnie sterować E1 i E2.
Nie jestem na tyle biegły, aby tak dostosować kod aby np. wywołanie lcd_locate(3,0) powodowało wyświetlenie znaków tylko w linii 3-ciej czyli wewnątrz kodu musi być sprawdzenie, że 3-cia linia odnosi sie do linii E2.

Sprawdzę dzisiaj jak zachowa się ten lcd przy połączeniu E1 i E2.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 15:14 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

powinien dobrze działać bo bedziesz miał oba kontrolery właczone
on jest podzielony na 2x 2x20 i to tyle , potem tylko adresowanie wierszy
kwestia tylko tego na ile jest kompatybilny z HD44780 zamiennik którego uzyli dlatego musisz
to sprawdzić oryginalne HD44780 chodzą bez problemu w ten sposób

jak cos to ci pomoge przy libsie

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 15:59 
Offline
Moderator
Avatar użytkownika

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

dokładnie jak mówi SunRiver, można je traktować jako dwa niezależne wyświetlacze 2x40 ;) tylko w swoim programie martwić się o wstawianie numeracji wierszy ...

_________________
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 lut 2013, o 20:40 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Sprawdziłem na żywo, spinając razem E1 i E2 otrzymujemy efekt że w liniach nr 1 i 2 wyświetla to samo co w 3 i 4.

Może by ktoś podsunął pomysł jak przerobić biblioteki aby liniijkę 3 i 4 obsługiwał oddzielny port uC. Gdzie wstawić warunek sprawdzający która linia będzie wyświetlana i odpowienie sterowanie E1 lub E2.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 20:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

Czyli masz jakiś KS00066 lub cos jeszcze bardziej chińskiego

dobra to teraz już wiadomo na czym stoimy ....

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 21:38 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

:) no raczej nie - to jest DMC40457 OPTREX (made in Japan)
Czytałem notke pdf - różnica w stosunku do pojedynczego polega tylko na dwóch liniach E1 i E2.

Siedze i przerabiam libsy mirka. Zejdzie mi z tydzień.

Zdefiniowałem dodatkowe porty dla E1 na PD4 oraz E2 na PD6,
nie wiem co z adresami wierszy bo wygląda na to, że wiersze 3 i 4 powinny miec te same adresy
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

myslę, ze teraz trzeba by sie zająć lcd_write_byte() gdyż tu jest używana linia E wyświetlacza i jakoś uzaleznić to od numeru wierszy
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Czy ktoś pomoże?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 21:50 
Offline
Moderator
Avatar użytkownika

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

No i w bardzo dobrym kierunku pan idziesz z tą przeróbką ;)

_________________
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 lut 2013, o 21:51 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 04 paź 2011
Posty: 8583
Pomógł: 337

poczekamy , bo ładnie ci to wychodzi wiec na razie nie będziemy przeszkadzać ...
pamiętaj ze w ten sposób wiele się nauczysz :)

_________________
[b]San Escobar! Patria mia! Tu eres como la salud.[/b]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 22:26 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

:) no dobra, przystawiło mnie w pewnym momencie. Powiedzmy, ze przerobilem lcd_locate() gdzie dodąłem zmienną e, która w zależności od LCD_Y przyjmuje wartość 1 lub 2. Ale Wychodzi na to, ze teraz musze tą dodatkowa zmienną transferować przez wszystkie dalsze funkcje czyli lcd_write_cmd(), lcd_write_byte() itd.
Składnia: [ Pobierz ] [ Ukryj ]
język cpp
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Wywołań tej funkcji jest wiele i wychodzi na to, ze trzeba będzie w niektórych np. lcd_defchar() też wstawić zmienną e, któa w tym miejscu nie wiadomo jaką ma mieć wartość. Przecież wywołując lcd_defchar() nie zawsze musi być najpierw lcd_locate() gdzie ustalamy wartość e.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 22:29 
Offline
Moderator
Avatar użytkownika

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

A po co ? przecież nie zmieniają ci się numery wierszy zawsze do sterownika musi polecieć wiersz albo 0 albo 1

tylko odpowiednią linię E musisz wysterować

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

czyli translacja wierszy 0-3 na poziomie tej funkcji a w zależności np od jakiejś dodatkowej zmiennej załączanie odpowiedniej linii E
czyli jak do tej funkcji przylecą wiersze 0-1 to załączać masz E1 a jak przylecą wiersze 2-3 to i tak zamienisz je na 0-1 ale załączysz E1 ;)

_________________
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 lut 2013, o 22:54 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Nie bardzo wiem jak dalej to ugryźć. Zmienną e zrobiłem jako globalną uint8_t. I nie będę jej transferował porpzez funkcje poścednie. Dopiero w funkcji lcd_write_byte() dam warunek i odpowiednio wysteruję E1 lub E2

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

nawet się skompilowało, ale niestety wiersze 3 i 4 czarne.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 23:05 
Offline
Moderator
Avatar użytkownika

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

No bo pewnie zainicjalizowałeś tylko górny sterownik .... dlatego całą inicjalizację musisz tak przerobić aby raz poleciała tylko z E1 i drugi raz z E2

_________________
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 lut 2013, o 23:14 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Juz prawie mam. Wiersz 1 i 2 jest OK, wiersz 3 i 4 prawie OK, gdyż tekst wyswietla prawidłowo, a wszystkie pozostałe miejsca na ekranie są czarne.
Czyżby jakas inicjalizacja ?



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 23:23 
Offline
Moderator
Avatar użytkownika

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

No jak pisałem wyżej - KAŻDY kontroler trzeba oddzielnie zainicjalizować - nie ma że boli ;)

_________________
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 lut 2013, o 23:42 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Udało się. Załączył bym gotowy kod gotowy kod, ale nie wiem jak wgrać tutaj pliki. Plików *.h i *.c nie przyjmuje.
Wstawienie listingu to kilkaset linii kodu.

Dziekuję za wspólną pracę.
Pozrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 23:50 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

jwalentek napisał(a):
Udało się. Załączył bym gotowy kod gotowy kod, ale nie wiem jak wgrać tutaj pliki. Plików *.h i *.c nie przyjmuje.
Wstawienie listingu to kilkaset linii kodu.

Dziekuję za wspólną pracę.
Pozrawiam


wstawiaj bedzie dla potomnych :)

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 6 lut 2013, o 23:55 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Prosze bardzo, aczkolwiek są jeszcze błędy.
Pozdrawiam

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



Ostatnio edytowano 7 lut 2013, o 07:58 przez jwalentek, łącznie edytowano 2 razy

Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2013, o 00:12 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 01 sty 2013
Posty: 328
Lokalizacja: Rzgów k. Łodzi
Pomógł: 11

Nie wstawia się na publicznym forum kodów z książki. Wstaw tylko to co sam przerobileś i napisz ze reszta na płycie.

_________________
sig off ;(



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2013, o 09:45 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 14 lis 2011
Posty: 534
Lokalizacja: Mierzyn
Pomógł: 9

PawelGaj napisał(a):
Nie wstawia się na publicznym forum kodów z książki. Wstaw tylko to co sam przerobileś i napisz ze reszta na płycie.


jesli jest to za zgoda Mirka to nie ma problemu.

_________________
pozdrawiam
Jachu



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2013, o 10:01 
Offline
Moderator
Avatar użytkownika

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

Tak, w takiej postaci ładnie widać modyfikacje i jak widać - nawet ładnie i sprytnie to kolega zrobił ;) gratulacje - a tak się bał że będzie tygodniami to przerabiał ;)

_________________
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: 7 lut 2013, o 11:25 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

Z taką pomocą to wszystko da się zrobić :)
Idąc dalej, zastanawiam się (bo nie próbowałem i nie będę) czy odblokowanie pinu RW będzie mialo sens, gdyż w tym lcd jest on wspólny i przykładowo jeśli do górnych linii zapodam mniej tekstu niż do dolnych to i tak uC otrzyma sygnał gotowości dopiero gdy ostatni sterownik skończy pracę.
Można to uznać za marnotrawienie czasu.

Pozdrawiam



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 7 lut 2013, o 11:27 
Offline
Moderator
Avatar użytkownika

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

jwalentek napisał(a):
Idąc dalej, zastanawiam się (bo nie próbowałem i nie będę) czy odblokowanie pinu RW będzie mialo sens, gdyż w tym lcd jest on wspólny i przykładowo jeśli do górnych linii zapodam mniej tekstu niż do dolnych to i tak uC otrzyma sygnał gotowości dopiero gdy ostatni sterownik skończy pracę.
Można to uznać za marnotrawienie czasu.


Nie nie - każdy sterownik będzie działał w swoim czasie i odpowiadał w swoim czasie ;) ... gdy rozmawiasz z jednym za pomocą E1 to drugi na tych pinach nic nie robi, i analogicznie gdy rozmawiasz z drugim za pomocą E2 to pierwszy ma ciszę na pinach - więc spokojnie da radę sprawdzać Busy Flag.

_________________
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: 7 lut 2013, o 13:35 
Offline
Nowy

Dołączył(a): 24 sty 2013
Posty: 21
Pomógł: 0

No tak, w zasadzie nie ma takiego przypadku, aby oba sterowniki miały pracowac w tym samym momencie. Z jednym wyjątkiem: lcd_cls(). Zeruje tam zmienną e, wtedy w lcd_write_byte() jest troche inna sekwencja sygnałów. Są podawane równolegle. Ale to z pewnością nie rzutuje na poruszony problem.
Oj, chyba już się doktoryzujemy :)

Pozdrawiam



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

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