logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Atmega8 - wysyłanie danych do wyświetlacza LCD w jęz. C

aplov 22 Gru 2015 19:13 3096 31
Najlepsze odpowiedzi

Dlaczego wyświetlacz LCD HD44780 z ATmegą8 pokazuje tylko kratki i nie wyświetla tekstu mimo inicjalizacji?

Problem wynikał z błędnie ustawionego mikrokontrolera w projekcie: kod cały czas działał, ale był kompilowany dla ATmega32 zamiast ATmega8, a po poprawieniu tego ustawienia zaczęło działać [#15265610] Wcześniej użytkownik ustawił też zgodnie taktowanie na 1 MHz w uC i w programie, bo domyślnie ATmega8 ma inne ustawienia fusebitów [#15265555] Dodatkowo zwrócono uwagę, że w obsłudze LCD najpierw trzeba ustawić linie danych, a dopiero potem podać impuls na E, bo odwrotna kolejność jest błędna [#15265601] Warto też pamiętać, że w trybie 4-bitowym sygnał R/W można podłączyć do masy, a nie musi być sterowany z uC [#15265156]
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA
  • #1 15262399
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Witam.

    A więc będzie zwięźle.

    -Wyświetlacz 2x16 (sterownik HD44780)

    -uC Atmega8

    -Biblioteka radzia ( http://radzio.dxp.pl/hd44780/ )

    -Ustawienie pinów (nie jestem pewien poprawności moich zmian)
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Funkcja główna
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Problem jest taki, że po samej inicjalizacji wyświetlacza oprócz górnej linii "kratek" pojawia się też dolna, a przy próbie wypisania tekstu nie dzieje się nic.



    Przeszukiwałem forum, znalazłem ten program http://mikrokontrolery.net/avr_c_08.htm. Dzieki niemu, wyświetlał sie migający kursor, ale tak samo przy próbie wypisania tekstu 0 odpowiedzi.
  • REKLAMA
  • #3 15262445
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    @szczywronek chodzi mi o samą poprawność kodu, dokumentacje atmegi mam wiec kabelki jeszcze potrafię podpiąć :D
  • #6 15262656
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    @michalko12 Bawię się w uC od 4 dni :), dzięki będę pamiętał.

    Dodano po 1 [godziny] 1 [minuty]:

    Niestety nadal mam problem..., wydaje mi się, że robię wszystko dobrze
    Atmega8 - wysyłanie danych do wyświetlacza LCD w jęz. C20151222_2..935.jpg (3.12 MB)Musisz być zalogowany, aby pobrać ten załącznik. Atmega8 - wysyłanie danych do wyświetlacza LCD w jęz. C20151222_2..011.jpg (2.89 MB)Musisz być zalogowany, aby pobrać ten załącznik. Atmega8 - wysyłanie danych do wyświetlacza LCD w jęz. C20151222_2..047.jpg (2.71 MB)Musisz być zalogowany, aby pobrać ten załącznik.

    skorzystałem z linku marekhab'a i wykorzystałem zamieszczony tam program, zmieniałem tylko ustawienia portów.
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Tym razem, te "kwadraciki" jakby pulsują, nie wiem czy pomoże ta informacja...
  • #8 15262963
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    przywleczone, ale multimetrem sprawdzałem połączenie :)
  • #10 15262992
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    szczywronek napisał:
    Weź pod uwagę, że sprawdzając multimetrem dociskasz połączenia. Nie masz gwarancji, że to przewodzi bez dociskania sondą.


    Tak, zrobię. Kolejną próbę przeprowadzę po zlutowaniu pinów i dam znać czy pomogło.
  • REKLAMA
  • #12 15263118
    szczywronek
    Poziom 28  
    Posty: 678
    Pomógł: 142
    Ocena: 217
    I jeszcze jedno "dla pewności": w pierwszym listingu miałeś wszystko na porcie B, zaś w kolejnym listingu pojawia się PD - to nie błąd, zmiana była z premedytacją? :)

    Co z Vss/Vdd wyświetlacza?
  • #13 15263148
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Zmieniłem porty(Tak z premedytacją :D ). Masa i zasilanie są podłączone odpowiednio do pinów 1,16 i 2,15

    Dodano po 1 [minuty]:

    dondu napisał:
    Pytanie dodatkowe: Jaką częstotliwością taktujesz mikrokontroler i jak informujesz kompilator o tym fakcie?


    taktuje 8MHz, wykorzystuje do tego "#define F_CPU 8000000UL"
    dodam jeszcze, że pracuje w środowisku atmel studio 7
  • REKLAMA
  • #17 15264858
    Konto nie istnieje
    Konto nie istnieje  
  • #18 15264996
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Piotrus_999 napisał:
    A R/W do niczego nie podczepione?


    R/W jest podłączone pod port B1

    Załączam program z którego korzystam
    LCD.rar (2.4 kB)Musisz być zalogowany, aby pobrać ten załącznik.

    oraz rozpiskę pinów

    RS -> PB0
    RW -> PB1
    E -> PB2
    D4 -> PD0
    D5 -> PD1
    D6 -> PD2
    D7 ->PD3

    Poprawność połączeń można sprawdzić kilka postów wyżej.
  • #19 15265035
    Zubiik
    Poziom 15  
    Posty: 168
    Pomógł: 1
    Ocena: 52
    Ja tak z ciekawości zapytam: co masz podłączone do PC6(ten żółty przewód) wiesz ze to jest reset? No i co z wolnymi pinami wyświetlacza są podłączone do masy?
    EDIT
    Czy kręcenie potencjometrem zmienia kontrast? Może podłącz diodę pod jakiś wolny pin i spróbuj ją zaświecić będzie wiadomo wtedy na 100% że mikrokontroler działa.
  • #20 15265045
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Zubiik napisał:
    Ja tak z ciekawości zapytam: co masz podłączone do PC6(ten żółty przewód) wiesz ze to jest reset? No i co z wolnymi pinami wyświetlacza są podłączone do masy?


    Przyjrzyj się dokładnie obok jest jeszcze jeden zielony kabel,a dopiero obok niego żółty :D
    Puste piny to D0 - D3, a pod mase podłączone są piny 1 i 16
  • #22 15265078
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Zubiik napisał:
    Czy kręcenie potencjometrem zmienia kontrast? Może podłącz diodę pod jakiś wolny pin i spróbuj ją zaświecić będzie wiadomo wtedy na 100% że mikrokontroler działa.


    Tak, zmienia kontrast. Na pierwszej granicy "kratki" znikają natomiast na drugiej są całkowicie białe.

    Dodano po 12 [minuty]:

    Zubiik napisał:
    podłącz koniecznie wolne piny do masy


    Zrobione :), lecz bez zmian.
  • #23 15265129
    Zubiik
    Poziom 15  
    Posty: 168
    Pomógł: 1
    Ocena: 52
    Masz tam wolny PC5 więc wklep ten kawałek kodu:
    DDRC|=(1<<PC5); //PC5 jako wyjscie
    PORTC|=(1<<PC5); //stan wysoki na pc5
    Wklej ten kod w funkcji głównej a do wyjścia PC5 przez rezystor do masy podłącz LEDa. Powinien zaświecić
    No i jeszcze sprawa z fusebitami, domyślnie atmega8 jest chyba na 1Mhz ustawiona i wg mnie taką częstotliwość powinieneś mieć podaną jako F_cpu
  • #24 15265156
    Konto nie istnieje
    Konto nie istnieje  
  • #25 15265555
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Zubiik napisał:
    Masz tam wolny PC5 więc wklep ten kawałek kodu:
    DDRC|=(1<<PC5); //PC5 jako wyjscie
    PORTC|=(1<<PC5); //stan wysoki na pc5
    Wklej ten kod w funkcji głównej a do wyjścia PC5 przez rezystor do masy podłącz LEDa. Powinien zaświecić
    No i jeszcze sprawa z fusebitami, domyślnie atmega8 jest chyba na 1Mhz ustawiona i wg mnie taką częstotliwość powinieneś mieć podaną jako F_cpu


    Dobra, ustawiłem taktowanie na 1MHz w uC oraz w programie następnie dodałem do programu kod który podałeś.
    Na początku dałem pod po inicjalizacji wyświetlacza. Dioda w ogóle nie reagowała.
    Potem dałem kod przed inicjalizacją. Dioda się włączyła i mrugała jak szalona.

    Szczerze mówiąc to trochę dziwne i nie mam pojęcia co jest grane...

    Dodam ponownie cały kod
    LCD.rar (2.66 kB)Musisz być zalogowany, aby pobrać ten załącznik.
    Wszystko jest podłączone wg. tego schematu
    Atmega8 - wysyłanie danych do wyświetlacza LCD w jęz. CLCD_4bit_..RW.png (4.73 kB)Musisz być zalogowany, aby pobrać ten załącznik.
  • #26 15265601
    Konto nie istnieje
    Konto nie istnieje  
  • REKLAMA
  • #27 15265610
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Dobra jestem idiotą, kod cały czas działał, tylko z przyzwyczajenia ustawiałem atmege32 i to było powodem 2 dniowej walki.

    Tak czy siak...Dziękuje za każdą próbę pomocy i życzę Wesołych Świąt !
  • #28 15265623
    Konto nie istnieje
    Konto nie istnieje  
  • #29 15265628
    aplov
    Poziom 6  
    Posty: 206
    Ocena: 34
    Piotrus_999 napisał:
    A nie powinien :)

    wesołych swiąt.


    Z jakiego powodu nie powinien ?
  • #30 15265639
    Zubiik
    Poziom 15  
    Posty: 168
    Pomógł: 1
    Ocena: 52
    Własnie Piotrus? dla czego nie powinien? kiedyś go uruchomiłem i nie pamiętam żeby były z nim problemy.
    aplov czasem dobrze jest odpocząć od tego czym się zajmujemy i spojrzeć po jakimś czasie "świeżym okiem" Powodzenia i Pozdrawiam!

Podsumowanie tematu

✨ Użytkownik zadał pytanie dotyczące problemów z wyświetlaczem LCD 2x16 (HD44780) podłączonym do mikrokontrolera Atmega8. Po inicjalizacji wyświetlacza pojawiały się nieprawidłowe znaki na dolnej linii. W dyskusji poruszono kwestie poprawności kodu, ustawienia pinów oraz połączeń. Użytkownik korzystał z biblioteki radzia i zmieniał porty, co wywołało dodatkowe pytania o poprawność połączeń oraz zasilanie. Wskazano na konieczność podłączenia wolnych pinów do masy oraz sprawdzenia ustawień taktowania mikrokontrolera. Ostatecznie, po kilku próbach i poprawkach, użytkownik zidentyfikował problem z ustawieniem modelu mikrokontrolera w kodzie, co rozwiązało jego problem.
Podsumowanie AI na podstawie dyskusji. Może zawierać błędy.
REKLAMA