Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Atmega8 + HD44780 brak oznak dzialania wyswietlacza

wojtektorr 08 Sty 2012 17:35 6722 49
  • #1 08 Sty 2012 17:35
    wojtektorr
    Poziom 14  

    Witam, jestem na etapie edukacji oprogramowywania wyświetlacza ze sterownikiem HD44780 gdzies jest bład nie mogę sie doszukać gdzie. Program sie kompiluje ale na wyswietlaczu nic nie wyswietla, wydaje mi sie ze blad jest gdzies w ponizszych czesciach kodu czy moge prosic o weryfikacje i podpowidzi co może nie grać??

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0 29
  • #2 08 Sty 2012 17:42
    excray
    Poziom 39  

    To chyba tylko część kodu. A gdzie reszta?

    0
  • #3 08 Sty 2012 17:59
    wojtektorr
    Poziom 14  

    Nie chciałem zamieszczać całego kodu bo to 360 linii ale jeśli nie doszukacie się błedu w tym fragmencie co wyżej to wtedy dorzucę resztę.

    0
  • #5 08 Sty 2012 18:58
    wojtektorr
    Poziom 14  

    Użycie gotowej bibioteki to najprostrze rozwiazanie ale ja chciałbym sie czegos podrodze nauczyc i miec konkretne podstawy a od tego chyba jest to forum żeby rozwiązywać problemy:)

    0
  • #6 08 Sty 2012 19:01
    Bartek.k.k
    Poziom 21  

    Po co wyważać otwarte drzwi? Najpierw uruchom gotowy kod, a następnie analizuj go ze swoim i sprawdzaj co zrobiłeś źle.

    0
  • #7 08 Sty 2012 19:35
    tmf
    Moderator Mikrokontrolery Projektowanie

    Ja ci proponuję kod obsługi zawarty w WinAVR. Jest uniwersalny, wygodny i przetestowany. Masz tam też przykłady użycia. I tak jak pisze Bartek, na tym się za wiele nie nauczysz, już lepiej przeanalizować jak to zrobili inni.

    0
  • #8 08 Sty 2012 20:05
    excray
    Poziom 39  

    Załącz resztę kodu. Kto będzie chciał ten obejrzy a kto nie to nie. Tylko użyj syntaxa.

    0
  • #9 08 Sty 2012 21:16
    janbernat
    Poziom 38  

    Fragment kodu z książki Mirka jest przepisany błędnie.
    Zresztą tak się tego nie robi- przykładowe kody do obsługi LCD są w książce Mirka, albo inny uzywany przez tmf do ściągnięcia ze strony Helionu czy radzia czy też jak pisał tmf z WinAVR.
    I to nie jest tak że użycie "gotowej biblioteki" to jest błąd.
    Jeśli czegoś używają tysiące czy dziesiątki tysięcy ludzi- to znaczy że jest to raczej dobre i sam szybko nie napiszesz czegoś lepszego.
    Potem porównujesz te "biblioteki" analizując jak są napisane i jak działają.
    A dopiero potem próbujesz napisać sam albo też "kompilujesz" w klasycznym znaczeniu tego słowa funkcje z różnych "bibliotek" na własny użytek.

    0
  • #10 09 Sty 2012 14:26
    wojtektorr
    Poziom 14  

    Ok dzieki za radę na pewno się zastosuje, jestem początkującym w tej dziedzinie dlatego potrzebuje naprowadzenia jak tego sie uczyć :) Wracając do mojego konkretnego problemu, wstawiam caly kod i z ciekawości poprosze o wskazanie gdzie jest blad. Z góry dziekuje za chwile poswieconego czasu.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    0
  • #11 09 Sty 2012 19:52
    excray
    Poziom 39  

    Źle przeprowadziłeś inicjalizację. Sprawdź inicjalizację w pdf'ie od HD44780 i porównaj ze swoją - szcególnie to co ustawiasz na szynie danych wyświetlacza (a raczej to czego NIE ustawiasz). Poza tym co w kodzie robi MCUCSR? Nie ma takiego rejestru. Albo MCUCR albo MCUSR niemniej nie widzę powodu aby wpisywać cokolwiek do tych rejestrów na tym etapie, a w szczególności żeby wpisywać 0x80. Poza tym chyba bardzo lubisz pisać. Tyle definicji jeszcze w życiu nie widziałem w żadnym kodzie a Ty dopiero angażujesz jeden prosty wyświetlacz. Aż strach pomyśleć ile definicji będziesz miał jak użyjesz kilkunastu różnych układów w projekcie. Reszty na razie nie patrzyłem. Popraw inicjalizację, wklej poprawiony.

    Dodano po 25 [minuty]:

    EDIT> Jeszcze jedno. W funkcji lcd_init w jednym miejscu nie sprawdzasz wartości USE_RW tylko zachowujesz się tak jakby USE_RW=1:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dodano po 43 [minuty]:

    A to co za kwiatek?
    Kod: c
    Zaloguj się, aby zobaczyć kod

    Zobacz poszczególne warunki funkcji if

    Dodano po 1 [godziny] 14 [minuty]:

    Powstawiałeś tyle tych definicji że sam się w nich pogubiłeś. Zdefiniowałeś zmienne:
    Kod: c
    Zaloguj się, aby zobaczyć kod

    i użyłeś ich jako argumentów w funkcji która czyta (a raczej powinna czytać bo na chwilę obecną czyta tylko najmłodszy bit) tylko 4 młodsze bity.

    0
  • #12 09 Sty 2012 20:42
    wojtektorr
    Poziom 14  

    Racja tego MCUCSR nie powinno być gdzieś przeczytałem na jakimś forum (juz nie pamietam) ze bodajże w atmega8 sa poblokowane piny portu C i aby je odblokować trzeba do takiego rejestru wpisać 0x80 ale wychodzi na to ze to jakas bzdura. Zastosuję sie do uwag i wrzuce poprawione o ile dalej bede mial problem. Dzieki

    0
  • #13 09 Sty 2012 20:51
    excray
    Poziom 39  

    Tylko PC6 jest zablokowany bo współdzieli pin z sygnałem RESET. Jeśli chcesz używać PC6 musisz w czasie programowania fusebitów zaprogramować bit RSTDISBL ale to spowoduje że nie będziesz mógł później programować układu w trybie SPI.

    0
  • #14 15 Sty 2012 14:41
    wojtektorr
    Poziom 14  

    Odpóściłem sobie tryb 4-ro bitowy wyświetlacza i zacząłem od zaprogramowania atmegi gotowcem w trybie 8 bitowym. Sprawdziłem połączenia z 5 razy wszsytko jest ok port danych (PORTD) do wyświetlacza D0-D7 sygnaly RS i E sie zgadzają, RW na stałe do masy a jako żę nie mam potencjometru podlaczylem do V0 rezystor 10K. Wyświetlacz nic w dalszym ciągu nic nie wyświetla tylko podświetlenie i tyle. Gdzie jest problem, ktoś mi powie, czyżby trafił mi się wadliwy wyświetlacz?? Jego dokładny model to: ACM1602K-FL-GTH. Poniżej zamieszczam kod C:

    Kod: c
    Zaloguj się, aby zobaczyć kod
    [/code]

    0
  • #15 15 Sty 2012 14:47
    excray
    Poziom 39  

    Podłącz tylko 3 piny wyświetlacza: VCC - +5V, GND i KONTRAST (VEE) - GND. Powinien wyświetlić Ci się jeden rządek kwadracików w górnym wierszu. Ewentualnie sprawdź wszystkie połączenia - 5 razy i z miernikiem.

    0
  • #16 15 Sty 2012 15:13
    wojtektorr
    Poziom 14  

    Podłaczyłem tylko te 3 piny i skutek jest jak napisałeś - linia kwadracików, mierzac stany na porcie danych okazalo sie ze wszsytkie linie maja stan wysoki, nie wiem czy to dobrze czy nie?? Proszę o wyrozumiałość jestem w tym temacie zielony to moje pierwsze kroki z lcd.

    0
  • #17 15 Sty 2012 15:15
    janbernat
    Poziom 38  

    No dobrze- a co jest w pliku main?

    0
  • #18 15 Sty 2012 15:24
    excray
    Poziom 39  

    wojtektorr napisał:
    mierzac stany na porcie danych okazalo sie ze wszsytkie linie maja stan wysoki, nie wiem czy to dobrze czy nie??

    Nie chcę napięć. Chcę żebyś zmierzył połączenie między konkretnym pinem mikrokontrolera a pinem wyświetlacza i w ten sposób sprawdził:
    - czy jest połączenie
    - czy na pewno podpiąłeś odpowiednie wyjścia mikrokontrolera do odpowiednich wejść w LCD

    0
  • #19 15 Sty 2012 15:43
    wojtektorr
    Poziom 14  

    Połączenie jest 100% dobre od pinu atmegi do pinu wyswietlacza ok. A moj plik main to wyzej nazwany hd44780.c.

    0
  • #20 15 Sty 2012 15:54
    excray
    Poziom 39  

    Powinieneś użyć LCD_WriteText w main.

    0
  • #21 15 Sty 2012 15:56
    wojtektorr
    Poziom 14  

    Kod: c
    Zaloguj się, aby zobaczyć kod

    tak tez nie dziala ale zauwazylem ze kompilator pokazuje ostrzezenie:

    c:/winavr-20100110/lib/gcc/../../avr/include/util/delay.h:85:3: warning: #warning "F_CPU not defined for <util/delay.h>"

    moze to funkcje opozniajace tutaj psuja sprawe??

    0
  • #22 15 Sty 2012 16:20
    tmf
    Moderator Mikrokontrolery Projektowanie

    Raczej tak, gdyż wykorzystywane przez ciebie biblioteka korzysta z delay. Ustaw F_CPU w opcjach projektu i powinno być ok.

    0
  • #23 15 Sty 2012 16:23
    wojtektorr
    Poziom 14  

    Niestety nic to nie znieniło pozatym że juz ostrzezenia nie ma. Ustawiłem na 8MHz, wyświetlacz nadal nic nie pokazuje :(

    0
  • #24 15 Sty 2012 16:51
    excray
    Poziom 39  

    Załącz schemat połączeń. Podłącz potencjometr do regulacji kontrastu i wyreguluj kontrast.

    0
  • #25 15 Sty 2012 17:26
    wojtektorr
    Poziom 14  

    Robiony na szybko ale wszystko co najwaznejsze jest. Nie mam akurat potencjometru dlatego wstawilem rezystor 10k. Nie sugerujcie sie wygladem wyswietlacza tutaj wstawilem tylko podoby symbol.

    Atmega8 + HD44780 brak oznak dzialania wyswietlacza

    0
  • #26 15 Sty 2012 17:27
    janbernat
    Poziom 38  

    I może zdjęcie.
    Nowa Atmega8 jest taktowana o ile pamiętam 1MHz.

    0
  • #27 15 Sty 2012 17:30
    wojtektorr
    Poziom 14  

    Ze zdjęcia za bardzo nie wyczytacie polaczeń- platanina kabelkow mam to na płytce stykowej. Atmege mam skonfigurowana na taktowanie 8MHz

    0
  • #28 15 Sty 2012 17:46
    polprzewodnikowy
    Poziom 26  

    VO do VCC? Spróbuj je podłączyć przez rezystor do masy. A, i ten rezystor ma prawdopodobnie za duży opór.

    0
  • #29 15 Sty 2012 18:30
    excray
    Poziom 39  

    wojtektorr napisał:
    Nie mam akurat potencjometru dlatego wstawilem rezystor 10k.

    Na takim schemacie nigdy Ci nie będzie działać. Wymień ten rezystor i wstaw potencjometr między GND a +5V

    0
  • #30 20 Sty 2012 18:42
    wojtektorr
    Poziom 14  

    Wstawiłem potencjometr i mogę sobie nim regulować kontrast jednak wyswietlacz pokazuje mi caly czas górną linie prostokątów:(

    0