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

LCD GDM1602a brak inicjacji

14 Lip 2015 08:51 1380 30
  • Poziom 8  
    Witam Forumowiczów.

    Od dłuższego czasu staram się uruchomić wyświetlacz LCD GDM1602a , jednak nie udaje mi sie , problem leży w inicjalizacji jego , bo podłączenie mam poprawne.
    czytam na forach ze niby GDM1602a jest kompatybilne ze sterownikiem HD44780 , lecz chyba nie do końca bo w GDM1602a jest sterownik o nazwie : Built-in controller (S6A0069 or Equivalent) . a tutaj juz mamy inna procedure inicjalizacji i czasów.
    Ogółem mam tez problem z ustaleniem co to takiego to :fosc = 270KHz ??
    Pracuje na atmega8 , taktowanie 1 Mhz;
    oto kod napisany w C : ( korzystam z biblioteki Mirosława Kardasia z drobnymi zmianami pod swój typ wyświetlacza)

    main.c:
    Kod: csharp
    Zaloguj się, aby zobaczyć kod

    lcd44780.c :
    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    lcd44780.h :

    Kod: csharp
    Zaloguj się, aby zobaczyć kod


    gdzie leży błąd ? Fus bity ? taktowanie procesora ? zły dobór czasu ??

    Na wyświetlaczu pokazują się jedynie czarne kolumny w pierwszej lini, droga linia jest pusta .
    Morze ktoś już ma bibliotekę pod ten Model wyświetlacza ??

    Dopiero jutro będę w stanie odpisać wam.
  • Poziom 20  
    Jakiś schemat połączenia ? Definiujesz ze używasz pinu R/W jak jest podpięty ?
  • Poziom 20  
    No i sprawa wyjaśniona pin D7 masz podpięty do resetu.Ten pin może być tylko wej/wyj lub reset (Fusebity). Poza tym czemu masz reset cały czas ściągnięty do masy ?
  • Poziom 8  
    Dobrze Skalsky , poprzednio miałem podłączone do portu D i było tak samo; wiec nie jest to sprawa resetu teraz tylko tak zmieniłem mogę do ustawień poprzednich wrócić, ale wiem ze to nic nie da , Dlaczego mam reset do GND podłączony bo tak wynika z noty PDF kiedy podczas atmega do komunikacji USBasp. jest to na pewno sprawa błędnego kodu. Ale co zapomniałem dodać Contras z noty powinien być do 10-20Kohm ja mam do 50Kohm , ale spokojnie widać czarne kratki nocny kontor. Tak wiec dalej wracam do kodu gdzie mam błąd z czasem ??
  • Poziom 20  
    Moment po programowaniu żeby atmega w ogóle pracowała musi mieć reset na podpiety do +5V .Ty masz reset na masie wiec procesor nie wykona ci żadnej instrukcji.Jeśli programujesz przez USBasp to nie możesz korzystać z PC6(reset). Używałem kilku tych wyświetlaczy nawet z tą samą biblioteką i nie miałem z nimi nigdy problemów.Podepnij wyświetlacz pod port D ,reset podciągnij do plusa przez rezystor 10K.
  • Moderator Mikrokontrolery Projektowanie
    Do tego co napisał kol. skalsky5000:

    Dokumentacja ATmega napisał:
    An External Reset is generated by a low level on the RESET pin.

    a to:
    Rafmel napisał:
    ... jest to napewna sprawa blednego kodu.

    także może być prawdą, ale najpierw zaprogramuj w ogóle swój mikrokontroler, bo na razie łącząc RESET z GND robisz zwarcie w trakcie programowania, przez co programator nie jest w stanie zaprogramować mikrokontrolera:

    AVR910: In-System Programming napisał:
    To enter and stay in Serial Programming mode, the AVR microcontroller reset line has to be kept
    active (low). Also, to perform a Chip Erase, the Reset has to be pulsed to end the Chip Erase
    cycle.
    To ease the programming task, it is preferred to let the programmer take control of the target
    microcontroller reset line to automate this process using a fourth control line (Reset).
  • Poziom 8  
    Dobrze zmienilem Porty Sa obecnie takie :
    RW = PB0
    RS = PB1
    E = PB2
    PD4 = pierwsy starszy bit a dokladniej pin 11 w lcd
    PD5 = PIN 12 lcd
    PD6 = pin 13 lcd
    PD7 = pin 14 lcd

    program załadowałem i dalej pusto na wyświetlaczu .
  • Moderator Mikrokontrolery Projektowanie
    Zacznijmy od sprawdzenia, czy na pewno jesteś w stanie prawidłowo zaprogramować mikrokontroler i czy prawidłowo masz ustawione fusebity. Podłącz do wybranego pinu jakąś diodę LED i napisz krótki program migający diodą co 1 sekundę.
  • Poziom 8  
    nie no daj spokój , jak chcesz dam ci pwm gotowy co napisałem 2 tygodnie temu może być ?
  • Moderator Mikrokontrolery Projektowanie
    Kolego:
    - pokazujesz nieprawidłowy schemat, który nie pozwala nawet na zaprogramowanie Twojego mikrokontrolera o jego pracy już tylko wspomnę,
    - jesteś w miarę nowy użytkownikiem (pierwszy Twój temat w tym dziale) i nie znamy Twoich możliwości,
    dlatego musimy analizować krok po kroku.
  • Poziom 8  
    Prosze napisane : MAm ustawione atmega8 na 8Mhz dlatego dluzszy delay.

    Kod: csharp
    Zaloguj się, aby zobaczyć kod
  • Poziom 8  
    Dondu napisałem jak chciałeś kod masz nad swoim postem :)
  • Poziom 8  
    nie wiem co to znaczy empirycznie ale podłączona mam diodę i miga +/- co sekundę .
  • Moderator Mikrokontrolery Projektowanie
    Mamy więc jasność :)

    Skoro by uzyskać opóźnienie 1sekundy (1000ms) musiałeś ustawić:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    to znaczy, że Twój mikrokontroler działa 8x szybciej niż powinien.

    Dlatego też wszelkie opóźnienia w bibliotece LCD np.:

    Kod: c
    Zaloguj się, aby zobaczyć kod

    także działają 8 razy szybciej. Skutek jest taki jak obserwujesz na LCD, ponieważ wymaga on określonych przerw w określonych miejscach w trakcie komunikacji.

    W związku z tym pytania:
    - Jak ustawiasz F_CPU?
    - Jak są ustawione fusebity?

    PS.
    W skrócie: Empiryzm = doświadczenie
  • Poziom 8  
    F_CPU 8 MHz / ustawiam je poprzes program burn - o - mat.
    fusbity sam nie wiem jakie sa , nie grzebałem nic przy nich i mało wiem na ich temat zmieniam jedynie taktowanie procesora programem.

    ale moze to ci pomoże :
  • Moderator Mikrokontrolery Projektowanie
    Rafmel napisał:
    F_CPU 8 MHz

    To nie jest odpowiedź na pytanie:

    dondu napisał:
    - Jak ustawiasz F_CPU?


    Rafmel napisał:
    fusbity sam nie wiem jak sa nie grzebałem nic przy nich i mało wiem na ich temat zmieniam jedynie taktowanie procesora .

    Zmiana taktowania odbywa sie poprzez zmianę fusebiitów. To w końcu zmieniasz je, czy nie?
    I co z tym fantem masz zamiar zrobić? Mam za Ciebie sprawdzić? Mogę, ale musisz mi przysłać mikrokontroler pocztą. Musisz oczywiście ponownie skompilować i wgrać program do mikrokontrolera.

    Innymi słowy - odpowiadaj dokładnie na zadane pytania.


    Edit:
    Ponieważ edytowałeś swój post:

    F_CPU ustawia się w opcjach projektu: http://mikrokontrolery.blogspot.com/2011/03/fcpu-gcc-gdzie-definiowac.html

    Ponieważ tego nie robiłeś, to kompilator przygotowywał program pod domyślne 1MHz, co przy ustawionych fusebitach na 8MHz zewnętrzny kwarcu powodowało efekt opisany powyżej.

    Spróbuj to przetestować (ustawić w opcjach projektu 8MHz) na programie z diodą. Jeśli prawidłowo ustawisz 8MHz w projekcie, dioda będzie zmieniać stan co 8 sekund.

    Następnie to samo zrób ze swoim programem LCD.


    Edit 2:
    Problem leży także w Twoim postępowaniu, bo ignorujesz ostrzeżenia (warningi) bowiem w takiej sytuacji otrzymałeś na pewno warning braku definicja F_CPU: http://mikrokontrolery.blogspot.com/2011/04/bledy-kompilacji-programu.html
  • Poziom 8  
    korzystam z eclipse mam ustawione 8 MHz . Z jak to robię . Wchodzę w Propeties -- AVR -- > i tam mam 2 opcje do ustawienia :
    1: jakiego programatora używam
    2: Wybór MCU i Taktowanie.
  • Moderator Mikrokontrolery Projektowanie
    Odinstaluj Eclipse i używaj oryginalnych narzędzi, czyli Atmel Studio przede wszystkim dlatego, że zawiera symulator, który jest niezbędny każdemu początkującemu (i nie tylko): http://mikrokontrolery.blogspot.com/2011/04/atmel-studio-spis-tresci.html

    oraz tysiące przykładowych programów w dodatku ASF.
  • Poziom 8  
    Zapewne masz racje ale to raczej nie jest rozwiązanie mojego problemu puki co , może masz bibliotekę pod avr , dla Drivera S6A0069 . Gdybym mial 100 % pewna bibliotekę , to bym przynajmniej wiedział gdzie szukać błędu , a tak to dość obszerny temat.
  • Poziom 8  
    Ale ja już to ustawiłem. Miałem to ustawione od samego Początku .
  • Poziom 20  
    Weź kolego narysuj dokładny schemat jak masz teraz wszystko połączone.
  • Moderator Mikrokontrolery Projektowanie
    skalsky5000 napisał:
    Weź kolego narysuj dokładny schemat jak masz teraz wszystko połączone.

    Nie to jest problemem (przynajmniej na razie) tylko F_CPU vs fusebity co pokazał na prostym programie z diodą w poście #12.


    Rafmel napisał:
    Ale ja już to ustawiłem. Miałem to ustawione od samego Początku .

    Gdybyś miał ustawione prawidłowo, to po takim opóźnieniu:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    dioda zmieniałaby stan po 8 sekundach, a nie po 1 sekundzie jak podałeś.

    Po raz kolejny więc napiszę:
    - ustaw prawidłowo F_CPU w opcjach projektu, skompiluj kod, wgraj do mikrokontrolera i dioda ma zmieniać stan co 1 sekundę,
    - zamelduj że tak jest, albo daj sobie spokój na dziś.
  • Poziom 8  
    dondu napisał:
    skalsky5000 napisał:
    Weź kolego narysuj dokładny schemat jak masz teraz wszystko połączone.

    Nie to jest problemem (przynajmniej na razie) tylko F_CPU vs fusebity co pokazał na prostym programie z diodą w poście #12.


    Rafmel napisał:
    Ale ja już to ustawiłem. Miałem to ustawione od samego Początku .

    Gdybyś miał ustawione prawidłowo, to po takim opóźnieniu:

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod

    dioda zmieniałaby stan po 8 sekundach, a nie po 1 sekundzie jak podałeś.

    Po raz kolejny więc napiszę:
    - ustaw prawidłowo F_CPU w opcjach projektu, skompiluj kod, wgraj do mikrokontrolera i dioda ma zmieniać stan co 1 sekundę,
    - zamelduj że tak jest, albo daj sobie spokój na dziś.




    Nie wiem czy mnie zrozumiałeś , ale a miałem opóźnienie co sekundę i to co starasz mi sie przekazać to został0 już sprawdzone , przy taktowaniu 1Mhz miałem opóźnienie 8 sekund , przy Taktowaniu 8Mhz miałem opóźnienie 1 sekundę . tak wiec mam nadzieje ze wyjasnilem to odpowiednio ?
  • Moderator Mikrokontrolery Projektowanie
    Rafmel napisał:
    Nie wiem czy mnie zrozumiałeś , ale a miałem opóźnienie co sekundę i to co starasz mi sie przekazać to został0 już sprawdzone , przy taktowaniu 1Mhz miałem opóźnienie 8 sekund , przy Taktowaniu 8Mhz miałem opóźnienie 1 sekundę . tak wiec mam nadzieje ze wyjasnilem to odpowiednio ?

    W którym poście wcześniej napisałeś jednoznacznie, że ustawiasz prawidłowo opcje i fusebity na jedną i tę samą wartość?

    Dlaczego z screena z fusebitami wynika, że masz ustawiony zewnętrzny kwarc od 8MHz wzwyż, a na schemacie go nie ma?

    Dlaczego na schemacie nie ma podłączonej masy?

    Wszystko co piszesz nie trzyma się kupy, a do tego:

    - łączysz RESET z masą

    oraz piszesz takie rzeczy:

    Rafmel napisał:
    F_CPU 8 MHz / ustawiam je poprzes program burn - o - mat.
    fusbity sam nie wiem jakie sa , nie grzebałem nic przy nich i mało wiem na ich temat zmieniam jedynie taktowanie procesora programem.


    Jak mamy Ci pomóc, skoro nie słuchasz nas krok po kroku?
  • Poziom 8  
    ok. odpisze jutro wstawię wszystko jak należy , połączę masę na screen bo widzę ze mi mi umknęła ta masa. dzisiaj już za późno . do jutra