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

KURS HOME ASSISTANT

Chcesz zautomatyzować swój dom bez skomplikowanego kodowania?
Zastanawiasz się nad wyborem sprzętu, oprogramowania i aplikacji?
Od czego zacząć przygodę z HA w 2025? Co będzie najlepsze na start?

Nasz kurs Home Assistant nauczy Cię krok po kroku, jak łatwo zautomatyzować swój dom i oszczędzić na rachunkach za prąd i ogrzewanie. Bez chmur, bez zbędnych abonamentów. Twoja przygoda z Home Assistant zaczyna się tutaj!

↓↓↓

    Szanujemy Twoją prywatność. Możesz wypisać się w dowolnym momencie.




    Teraz jest 7 maja 2025, o 18:01


    Strefa czasowa: UTC + 1





    Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 59 ]  Przejdź na stronę 1, 2  Następna strona
    Autor Wiadomość
    PostNapisane: 21 lut 2012, o 17:28 
    Offline
    Użytkownik

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

    Witam

    WSTĘP:

    LCD znakowy oparty na sterowniku HD44780 jest chyba jednym z najlepiej znanych
    tego typu tworów w świecie elektroników, ale widać pewien niedosyt wiedzy i brak
    podstaw działania tego małego ustrojstwa :) dlatego zaczynam wątek o nim właśnie.
    Niemniej żeby jak zwykle namieszać wam w głowach z sam początek zajmę się
    samym sterownikiem czyli właśnie tematowym HD44780

    Oczywiście wiecie że twórcą tego popularnego ustrojstwa jest firma HITACHI, a wielu wschodnich
    naśladowców tworzy układy podobne (czytaj. zgodne"")

    ZACZYNAMY:

    Jak wiecie do dyspozycji w naszym sterowniku mamy kilka linii sterujących, których
    zjawisko postaram się wyjaśnić -- celowo pomijam linie zasilania podświetlenia i kontrastu:)
    nimi zajmiemy się trochę później - oczywiście mam na myśli kontrast i podświetlenie :)

    LCD_RW - Read/Write --- ta linia decyduje czy będziemy zapisywać czy tez czytać z LCD
    - opiszę dokładnie niżej
    LCD_EN - ENABLE --- włącza LCD w dużym uproszczeniu
    - dosłownie kiedy stan tego pinu zmienia się na wysoki i z powrotem na niski układ
    rozpoczyna czytanie sygnałów RS i RW a następnie D0-D7
    LCD_RS - Registry Select
    - opiszę dokładnie niżej
    LCD_DATA0-7 - 8bitów danych

    Nasz kontroler przyjmuje zarówno dane jak i komendy, które są rozróżniane na podstawie stanu
    linii LCD_RS gdzie stan (0) oznacza komendy , a stan (1) -DANE. Pracuje on też 2 kierunkowo
    możemy zarówno wysyłać jak też i czytać dane , a kierunek transmisji ustala stan linii
    LCD_RW (1- odczyt, 0-zapis).

    HD44780 posiada 2 rodzaje pamięci:
    CGROM - pamięć generatora znaków
    DDRAM - pamieć danych.



    Pamięć danych DD RAM ma pojemność 80 bajtów
    (jeden sterownik HD44780 obsługuje maksymalnie 80 znaków).
    Co nam daje Konfiguracje LCD np 2x40 czy 4x20 znaków

    ROZKAZY HD44780:

    W poniższej tabelce z nocie układu HITACHI widać rozkazy HD44780:

    Obrazek

    a zainteresowanych odsyłam do noty sterownika

    http://fab.cba.mit.edu/classes/MIT/863.06/11.13/44780.pdf

    Display clear - (RS = 0, RW = 0, dane = 00000001) - instrukcja ta powoduje wyczyszczenie wyświetlacza poprzez wypełnienie go spacjami, ustawienie trybu zapisu danych od pozycji w lewym górnym rogu wyświetlacza oraz wyłączenie trybu przesuwania okna

    Display/cursor home - (RS - 0, RW = 0, dane = 0000001x) - instrukcja powoduje ustawienie kursora na pozycji pierwszego znaku w pierwszej linii

    Entry mode set - (RS = 0; RW = 0, dane = 000001IS) - określenie trybu pracy kursora/okna wyświetlacza:
    dla S = 1 po zapisaniu znaku do wyświetlacza kursor nie zmienia położenia, natomiast przesuwa się cała zawartość wyświetlacza
    dla S = 0 po zapisaniu znaku do wyświetlacza kursor zmienia położenie, a przesuwanie okna jest wyłączone
    dla I = 1 kursor lub okno wyświetlacza przesuwa się w prawo (inkrementacja adresu znaku)
    dla I = 0 kursor lub okno wyświetlacza przesuwa się w lewo (dekrementacja adresu znaku)

    Display ON/OFF - (RS = 0, RW = 0, dane = 00001DCB)
    dla D = 1 - włączenie wyświetlacza
    dla D = 0 - wyłączenie wyświetlacza
    dla C = 1 - włączenie kursora
    dla C = 0 - wyłączenie kursora
    dla B = 1 - włączenie migania kursora
    dla B = 0 - wyłączenie migania kursora

    Display cursor shift - (RS = 0, RW = 0, dane = 0001SRxx)
    dla S = 1 - przesuwana jest zawartość okna
    dla S = 0 - przesuwany jest kursor
    dla R = 1 - kierunek przesuwu w prawo
    dla R = 0 - kierunek przesuwu w lewo

    Function set (RS= 0, RW = 0, dane = 001DNFxx)
    dla D = 1 - interfejs 8-bitowy
    dla D = 0 - interfejs 4-bitowy
    dla N = 1 - wyświetlacz dwuwierszowy
    dla N = 0 - wyświetlacz jednowierszowy
    dla F = 1 - matryca znaków 5*10 punktów
    dla F = 0 - matryca znaków 5*7punktów

    CG RAM set - (RS= 0, RW = 0, dane = 01AAALLL) - ustawia adres pamięci generatora znaków. AAA - 3-bitowy adres znaku, LLL - 3-bitowy numer linii składającej się na graficzne odwzorowanie znaku.

    DD RAM set - (RS = 0, RW = 0, dane = 1AAAAAAA) - ustawia adres pamięci wyświetlacza, pod który nastąpi zapis (bądź odczyt) danych operacją Data write lub Data read.

    Busy flag read - (RS = 0, RW = 1, dane = BAAAAAAA) - odczyt flagi zajętości i adresu pamięci wyświetlacza. B - flaga zajętości wyświetlacza, AAAAAAA - 7-bitowy adres pamięci.

    Data read - (RS = 1, RW= 1, dane = odczytywany bajt danych) - odczyt danych z pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set)

    Data write - (RS = 1, RW = 0, dane = zapisywany bajt danych) - zapis danych do pamięci wyświetlacza, bądź pamięci CG RAM (jeśli poprzednio wydano komendę CG RAM set)


    Na tą chwile wystarczy ale mam nadzieję że was co nieco zaintrygowałem ... oczywiście będziemy
    wątek kontynuować to w sumie to samo co w nocie układu i tam znajdziecie te same instrukcje :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lut 2012, o 18:13 
    Offline
    Użytkownik

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

    Jak zatem tym sterować ??

    Jak już pisałem wyświetlacze LCD oparte o sterownik HD44780 f-my HITACHI lub inne podobne twory są najpopularniejsze i najchętniej używane przez elektroników ze względu na dużą skalowalność modułu, które są dostępne w wielu kombinacjach i rozmiarach dzięki czemu zawsze znajdziemy taki jaki nam jest aktualnie potrzebny
    a do dyspozycji mamy:

    1x8, 2x8,1x16, 2x16, 4x16, 1x20, 2x20, 4x20 znaków , a widywałem już 2x40 znaków :)

    Co nie zmienia nam w żaden sposób standardu transmisji i funkcji dodatkowych.

    HD44780 może się komunikować z mikrokontrolerem w dwóch trybach magistrali:

    4bit - z użyciem 3ch linii sterujących i 4 linii danych

    Obrazek

    8bit - z użyciem 3ch linii sterujących i 8 linii danych

    Obrazek

    Możliwości wyświetlacza nie zależą oczywiście w żadnym stopniu od szerokości magistrali danych,
    zmienia się jedynie sposób jej obsługi .

    Zalecane jest używanie trybu 4-bitowego, pozwalającego na zaoszczędzenie czterech linii, które mogą przydać się do czegoś innego i ten tryb pracy jest najpopularniejszy wśród elektroników.

    Używanie trybu 8-bitowego jest korzystne tylko przypadku wykorzystania do obsługi mikrokontrolera magistrali systemowej i odpowiednio skonfigurowanego dekodera adresów. W innych wypadkach używają go tylko maniacy lubiący utrudniać sobie życie :) (nie będę tu pokazywał palcem)

    W przypadku obsługi LCD bezpośrednio z portów uC (niezależnie od szerokości szyny danych) wyposażonego w wyjścia przeciwsobne, należy pamiętać o konfiguracji portu jako wejście przed generacją sygnałów sterujących podczas odczytu informacji ze sterownika.

    Dołączony zewnętrznie potencjometr jest odpowiedzialny za regulację kontrastu wyświetlacza. Niekiedy na wyprowadzenie kontrastu należy podać napięcie ujemne względem masy (wymagają tego niektóre rozwiązania wyświetlaczy). Co może nieco skomplikować układ, ale na szczęście jest to marginalne zjawisko
    wśród producentów i trafiają się jedynie nieliczne egzemplarze produkcji CHRL - zazwyczaj w wyjątkowo atrakcyjnych cenach :)

    Oczywiście teraz już zapewne rozumiecie dlaczego nie używanych pinów LCD nie powinno się zwierać do GND
    a po prostu pozostawić w spokoju. Linia RW najczęściej będzie spoczywać na masie choć warto sterować nią z portu procesora, choć zazwyczaj nie jest to konieczne i pozwala zaoszczędzić kolejny pin :) Mimo to polecam
    dodanie jednej zworki umożliwiającej zwarcie linii RW do masy , ale też i sterowanie jej z procesora.

    Teraz zajmiemy się już tylko technikami zaawansowanymi :)
    czyli:

    - sterowanie kontrastem z uC (PWM)
    - sterowanie podświetleniem

    oraz

    - sterowanie LCD poprzez rejestr przesuwny
    - magistrale I2C
    - RS232

    mam nadzieję, że was zainteresuję :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 21 lut 2012, o 21:01 
    Offline
    Użytkownik

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

    Zapraszam do dyskusji , jak i do uzupełniania informacji :) bo zapowiedziane "techniki zaawansowane" pojawią się w dziale DIY z wiadomych powodów , a tu możemy się rozwodzić na temat samego kontrolera HD44780 , a jak będzie takowe zapotrzebowanie to skrobnę co nieco o innych sterownikach np Samsunga KS108 , czy Toshiby T6963C
    a także "kocich" PCD 8544 w lcd z noki 5100/3310 czy LS020xxxx z Siemensa C65 a to już naprawdę fajny mały LCD
    TFT i Kolor :)

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



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

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

    Mnie tylko wypada powiedzieć, że zgrabne podsumowanie - więc ew niech zainteresowani czytają ;) pytają ;) czytają ... bo warto

    _________________
    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: 5 wrz 2013, o 22:36 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 kwi 2012
    Posty: 195
    Pomógł: 0

    A ja mam takie pytanko ... bo w nocie katalogowej nie ma nic na ten temat -> https://www.sparkfun.com/datasheets/LCD/HD44780.pdf
    Skąd się wzięły te adresy DDRAM dla wyświetlacza 2 wierszowego ??
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


    Pozdrawiam



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 wrz 2013, o 22:43 
    Offline
    Moderator
    Avatar użytkownika

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

    kidcowboy --> jak masz dwu-wierszowy to one i tak nigdy nie zostaną użyte ale jak będziesz miał cztero-wierszowy to tak ;)

    to są jedne z najczęściej występujących adresów w wielu różnych modelach LCD, ale i tak trafiają się takie, które mają nieco inne, wtedy trzeba patrzeć do noty PDF ... własnego LCD

    _________________
    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: 5 wrz 2013, o 22:55 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 kwi 2012
    Posty: 195
    Pomógł: 0

    Dzięki za odpowiedź Mirku :) ale czy teraz jeśli będę chciał 4 wierszowy to nie wykona mi się pierwsza dyrektywa kompilacji warunkowej ? Bo przecież jeśli zadeklaruję w kodzie
    :
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


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


    Pewnie błądzę ale chciałbym to zrozumieć



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

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

    No otrzymasz to - ale nie rozumiem kompletnie w czym kłopot :(

    _________________
    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: 5 wrz 2013, o 23:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 kwi 2012
    Posty: 195
    Pomógł: 0

    Jeśli korzystam z wyświetlacza dwuwierszowego (świadomie) to czy w nagłówku nie powinno być tak ??
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    Antystatyczny ma tak w swoim kodzie - broń Boże nie chcę tu narzekać a już na pewno nie jestem malkontentem ale powyższy zapis jest dla mnie - początkującego bardziej zrozumiały aniżeli ten w którym dodatkowo definiuje się jeszcze adresy 1 znaku dla 3 i 4 wiersza - dla wyświetlacza 2 wierszowego :)
    Chyba że znowu czegoś nie zrozumiałem ... :(



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

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

    spokojnie dopiero teraz zaskoczyłem twój problem

    oczywiście że możesz to sobie zmienić na dwie linie ;)

    #else
    #define LCD_LINE1 0x00 // adres 1 znaku 1 wiersza
    #define LCD_LINE2 0x40 // adres 1 znaku 2 wiersza
    #endif

    no ale powiedz mi co przeszkadzają 4 linie ? ;)

    #else
    #define LCD_LINE1 0x00 // adres 1 znaku 1 wiersza
    #define LCD_LINE2 0x40 // adres 1 znaku 2 wiersza
    #define LCD_LINE3 0x10 // adres 1 znaku 3 wiersza <----- To mnie bardzo interesuje
    #define LCD_LINE4 0x50 // adres 1 znaku 4 wiersza <----- I to też
    #endif

    toż to są tylko definicje ;) preprocesora, które i tak nigdy nie wezmą udziału w kodzie wynikowym gdy użyjesz fizycznie wyświetlacza 2x16 ... więc w czym kłopot ? Zresztą to miał być tylko przykład jak do tego można podchodzić a nie gotowa biblioteka... Gotową biblioteką to stała się ona niechcący ;) ....

    i teraz pomyśl niezależnie czy użyesz LCD 2x16 czy 4x16 to i tak te same definicje się przydadzą tyle że przy 2x16 dwie ostatnie nie wejdą nigdzie do kompilacji i kodu wynikowego ;)

    gdybym miał robić dla każdego LCD oddzielne adresy to musiałbym tych #IF'ów namnożyć jak mrówek a i tak bym wszystkich jakie są na świecie nie opisał - więc po co ?

    podałem te najbardziej popularne adresy w DDRAM wyświetlaczy LCD ... - to wszystko

    ...................

    być może masz kłopot z tym, że wydaje ci się, że te dwie linijki w przypadku LCD 2x16 będą coś mieszały co ? ;) ale jak prześledzisz kod z *.c to zobaczysz - że po prostu NIGDY nie zostaną wzięte pod uwagę

    teraz jaśniej ? ;)

    _________________
    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 wrz 2013, o 07:19 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 kwi 2012
    Posty: 195
    Pomógł: 0

    Tak dziękuję - w końcu sam do tego doszedłem za pomocą kartki i ołówka :):):)



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2013, o 13:09 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2013
    Posty: 56
    Pomógł: 0

    a powie mi ktoś jak działa to ustawianie kursora

    pod koniec funkcji mamy takie coś

    lcd_write_cmd( (0x80 + y + x) ); i np po podstawieniu, sumowaniu i zamianie na binarny mam takie coś 10101000
    to jest pierwsza pozycja drugiego wiersza, ale jak mam to z tabelki odczytać że kursor przesuwa się w duł ??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2013, o 16:42 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Spójrz na stronę 12 specyfikacji sterownika HD44780. Druga linia to po prostu pozycja znaku począwszy do 40. Sam opis instrukcji Set DDRAM address znajdziesz na stronie 24.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2013, o 16:51 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2013
    Posty: 56
    Pomógł: 0

    jest taki kod, wysyłam komendę, lista rozkazów jest w zaprezentowanej tabelce.
    więc dlaczego teraz niema tego w tabelce??
    Nie rozumiem porostu skąd to się wzięło skoro niema tego w tabelce.

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



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 11 wrz 2013, o 18:25 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Te funkcje nie odnoszą się do tabelki, bo są uniwersalne. W zależności od tego co im podstawisz jako argument zostanie wysłane do wyświetlacza. Jest to tak skonstruowane, że złożone zadanie dzielone jest na mniejsze i tak aż dochodzimy do funkcji static inline void wyslij_pol(uint8_t data). Funkcja ta ustawia cztery wyjścia na porcie B w zależności od bitów zmiennej data. Przykładowo jak zmienna data wynosi 0B0001011 to patrząc po kolei, czyli od końca, bo bity są w kolejności 7-0 ustawi bit PB3, bo data.0 = 1, ustawi PB4, bo data.1 = 1, wyzeruje PB5, bo data.2 = 0 i ustawi PB6. Biorąc pod uwagę działanie sterownika to linie wyświetlacza DB7, DB6, DB5 i DB4 muszą być podłączone do tych wyjść procesora, czyli do odpowiednio PB6, PB5, PB4 i PB3.

    Kolejna funkcja void _lcd_write_byte(unsigned char _data) zapisuje cały bajt, czyli liczbę przekazaną przez argument _data. Najpierw piny procesora dołączone do DB7-DB4 są konfigurowane jako wyjścia. Potem ustawiany jest pin podłączony do wejścia E wyświetlacza. Ta linia obsługuje zapis do wyświetlacza. Jak jest na niej stan wysoki lub niski to linie DB7-DB3 mogą się dowolnie zmieniać. Dopiero zmiana stanu na tej linii z wysokiego na niski spowoduje wpisanie tego co jest na wejściach danych do wyświetlacza i to jest realizowane w tych 3 linijkach. W kolejnych jest robione dokładnie to samo, a różnicą jest argument przesyłany do pierwszej omówionej funkcji. W 1 zapisie podstawiona jest wartość zmiennej przesunięta w prawo o 4, czyli jak zmienna _data miałaby wartość 0B10101100 to po przesunięciu ma 0B00001010 (bity 7-4 są uzupełniane zerami). W drugim zapisie przesyłana jest niezmieniona wartość. Funkcja, która była omówiona jako pierwsza nie interesuje się bitami 7-4.

    Ostatnia przedstawiona funkcja void lcd_write_cmd(uint8_t cmd) wysyła komendę do wyświetlacza i zgodnie z tabelką instrukcji wyświetlacz traktuje jako rozkaz takie dane, które są przesyłane w czasie, gdy wejście RS jest wyzerowane i dlatego ta funkcja zeruje wyjście PB0.

    Wyświetlacz może być sterowany z dowolnie małą prędkością, więc możesz sobie opóźnienia wydłużyć dodając za każdą linią kodu _delay_ms(1000); i dodatkowo równolegle do wyświetlacza podłączyć LEDy i zobaczysz co jest przesyłane.

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 wrz 2013, o 16:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 28 maja 2013
    Posty: 56
    Pomógł: 0

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


    dlaczego zawsze w pierwszej lini mam jakieś smieci ??



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 20 wrz 2013, o 18:42 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

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

    _________________
    Dragonus Cracovus: Biomagia



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lis 2013, o 23:16 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 20 wrz 2013
    Posty: 47
    Pomógł: 1

    Witam wszystkich serdecznie ;)
    Nie do końca jestem pewny czy mam ten HD44780, ale zasada ta sama to zapytam tutaj.
    Moje cacko nota:http://store.comet.bg/download-file.php?id=1593 Na odwrocie ma napisane WH1604A-TMI-CT# jest to wyświetlacz 16x4 -czyli chyba notę dobrą znalazłem? (moje wątpliwości wynikają z tab 11. Function Set, bo w DB2 mogę wybrać 5x11 lub 5x8 -a gdzie 16x4?)

    Wyregulowałem kontrast i pojawiły się dwa wiersze kwadracików i dalej już nic nie potrafię z tym zrobić. Rozumiem, że pierwszą czynnością jest podanie informacji czy 4, czy 8bitowa ma być komunikacja... Z noty z tab 11. Set Function wynika, że daje + na D5;D4;D3;D2 a reszta wisi w powietrzu i podłączam na chwilę E (czyli na pin 6 daję na chwilę +) aby wysłać komendę. Oczywiście nic się nie dzieje, miksowanie kablami na fuksa też nie bardzo przyniosło efekty => totalnie zero reakcji.

    Dodam, że na R/W mam 0, testowałem też wiszenie w powietrzu, bo nie wiem czy jest jakaś różnica, ale efekt ten sam.

    _________________
    Złoty Szpadel od Pana Mirka! Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 5 lis 2013, o 23:27 
    Offline
    Użytkownik

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

    to znaczy że masz połaczenia ok
    jak załadujesz program np z książki do LCD to bedziesz miał napisy w 2ch 1 wierszach

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 6 lis 2013, o 22:53 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 20 wrz 2013
    Posty: 47
    Pomógł: 1

    Podłączyłem:
    DB7, DB6, DB5 i DB4 odpowiednio do PD3, PD2, PD1 i PD0
    RS do PB0
    E do PB2

    Skorzystałem z http://www.youtube.com/watch?v=tOLnAFhUVjw Czy ktoś jest w stanie napisać jaka może być przyczyna, że brak jakichkolwiek reakcji na wyświetlaczu?

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

    _________________
    Złoty Szpadel od Pana Mirka! Dziękuję.



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

    Dołączył(a): 06 maja 2013
    Posty: 65
    Lokalizacja: Łódź
    Pomógł: 4

    A co dokladnie chcialbys zobaczyc, bo z kodu nic nie wynika.
    PS. po co dwa razy
    #include <avr/io.h> ?

    _________________
    Karkołomne zadanie, ogarnąć C.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2013, o 08:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 20 wrz 2013
    Posty: 47
    Pomógł: 1

    #include <avr/io.h> tak mi się jakoś źle wkleiło ;)
    Chciałbym aby kwadraciki zniknęły (jakakolwiek reakcja by mnie cieszyła). A kod to odwzorowanie tego co gość na filmie z yt dusił palcem po przyciskach.

    _________________
    Złoty Szpadel od Pana Mirka! Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2013, o 08:38 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 17 sie 2013
    Posty: 3797
    Lokalizacja: Grudziądz
    Pomógł: 143

    Zaladuj libsy mirka. Ustaw piny. Zainicjuj wyswietlacz. Kwadraciki powinny zniknac. Nastepnie dopisz komende wyswietlajaca napis zaladuj program powinien byc napis na lcd. U ciebie w kodzie nie widze biblioteki do obslugi lcd.

    Wysłane z telefonu

    _________________
    Usługi druku przestrzennego - www.drumik.pl



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 7 lis 2013, o 22:15 
    Offline
    Użytkownik

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

    norniiica napisał(a):
    Czy ktoś jest w stanie napisać jaka może być przyczyna, że brak jakichkolwiek reakcji na wyświetlaczu?


    Oczywiście ... brak biblioteki do obsługi LCD w kodzie , brak czegokolwiek w kodzie co by mogło być wyświetlone ...

    w ten sposób i tym kodem nic nie wyświetlisz ...

    Jak masz niebieską książkę to co masz za kłopot użyć przykładu z płytki do lcd ??

    tao tak na szybko ..... dla przykładu:

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


    popatrz uważnie dlaczego w twoim kodzie nie będzie nic na LCD ??
    ano bo to kod do migania diodami a nie do wyświetlania na LCD

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2013, o 20:45 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 20 wrz 2013
    Posty: 47
    Pomógł: 1

    Witam, trochę to trwało, ale znalazłem swoją odpowiedź ;) Nie chciałem korzystać z bibliotek, a nigdzie nie mogłem znaleźć gotowego kodu, który by cokolwiek wyświetlił na wyświetlaczu. Są oczywiście i z bibliotekami, ale ich jeszcze nie potrafię dołączać i myślę, że nie wszyscy tak jak ja umieją się nimi posługiwać.

    PS. Co prawda używam <avr/io.h> i <util/delay.h>, ale to wystarczy tylko napisać i nie trzeba nic kopiować dusić i uruchamiać ;p.

    Pozdrawiam, dziękuję za pomoc i mam nadzieję, że i mój kod komuś pomorze! (wystarczy go skopiować do eclipsa i powinno śmigać)


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


    Mam nadzieję, że teraz jest chociaż troszkę mniej herezji, i naprawdę miesiąc z tym walczyłem -a to taki banał. Radość z wyświetlenia swojej literki bezcenna ;)

    _________________
    Złoty Szpadel od Pana Mirka! Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 25 lis 2013, o 21:02 
    Offline
    Użytkownik

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

    Tylko po co się tak męczyć ??
    skoro właśnie odpowiedzią na wszystko są biblioteki i naprawdę niema kłopotu z ich używaniem

    niemniej jak widać postarałeś się ... tylko teraz wyświetl w ten sposób wiecej informacji na lcd ??

    _________________
    Zbuduj swój system [url=https://helion.pl/ksiazki/w-labiryncie-iot-budowanie-urzadzen-z-wykorzystaniem-ukladow-esp8266-i-esp32-andrzej-gromczynski,wlablo.htm#format/d]IOT[/url]



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2013, o 00:01 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 20 wrz 2013
    Posty: 47
    Pomógł: 1

    Teraz to już żaden problem aby coś długiego napisać. Wystarczy trochę pomiksować portem D.


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


    Dzięki za cierpliwość ;)

    _________________
    Złoty Szpadel od Pana Mirka! Dziękuję.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lis 2013, o 12:08 
    Offline
    Użytkownik
    Avatar użytkownika

    Dołączył(a): 13 maja 2013
    Posty: 288
    Ostrzeżenia: -2
    Pomógł: 23

    Wiadomo nie ma co się męczyć bo są gotowe libsy do obsługi wyswietlaczy itp. np. W bluebooku
    Kolega chciał zapewne zaprezentować jak dziAla ten popularny wyswietlacz.
    Co na filmiku widac.


    Wysłane z mojego HTC One S



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lip 2015, o 00:34 
    Offline
    Użytkownik

    Dołączył(a): 04 kwi 2014
    Posty: 133
    Pomógł: 4

    A ja mam pytanie odnośnie definiowania własnych znaków " w locie".
    Napisałem taką funkcję, a raczej przerobiłem z BB:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    ale wyświetlacz nie reaguje, nic nie wyświetla. Potrzebuję zbudować funkcję, która będzie mi zapisywała do cgram wyświetlacza aktualny znak(polski znak) i następnie go wyświetlała.



    Góra
     Zobacz profil  
    cytowanie selektywne  Cytuj  
    PostNapisane: 27 lip 2015, o 19:40 
    Offline
    Uzytkownik zasłużony dla forum.atnel.pl
    Avatar użytkownika

    Dołączył(a): 16 lip 2012
    Posty: 2088
    Lokalizacja: Leżajsk / Kraków
    Pomógł: 411

    Funkcja spoko tylko lcd_char( znak ); powinno być dla default. Problem jest w tym, że zapis do pamięci wyświetlacza własnego znaku zmienia pozycję kursora. Jak korzystasz z książki to takie coś nie przejdzie:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

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

    Nie rozwiąże to jednak twojego problemu, bo nie wiadomo, gdzie ten kursor znowu postawić. Pozwolę sobie poprawić Mirka i podam modyfikacje funkcji, która zapisuje definicję własnego znaku do wyświetlacza:
    Składnia: [ Pobierz ] [ Ukryj ]
    język c
    Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

    dla lcd_defchar_P i lcd_defchar_E będzie identycznie.

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

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

    _________________
    Dragonus Cracovus: Biomagia



    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: 59 ]  Przejdź na stronę 1, 2  Następna strona

    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:  
    cron
    Sitemap
    Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
    phpBB SEO