Elektroda.pl
Elektroda.pl
X
Please add exception to AdBlock for elektroda.pl.
If you watch the ads, you support portal and users.

LCD GDM1602a brak inicjacji

Rafmel 14 Jul 2015 08:51 1611 30
Computer Controls
  • #1
    Rafmel
    Level 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:
    Code: csharp
    Log in, to see the code

    lcd44780.c :
    Code: csharp
    Log in, to see the code


    lcd44780.h :

    Code: csharp
    Log in, to see the code


    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.
  • Computer Controls
  • #2
    skalsky5000
    Level 21  
    Jakiś schemat połączenia ? Definiujesz ze używasz pinu R/W jak jest podpięty ?
  • #4
    skalsky5000
    Level 21  
    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 ?
  • #5
    Rafmel
    Level 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 ??
  • Computer Controls
  • #6
    skalsky5000
    Level 21  
    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.
  • #7
    dondu
    Moderator on vacation ...
    Do tego co napisał kol. skalsky5000:

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

    a to:
    Rafmel wrote:
    ... 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 wrote:
    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).
  • #8
    Rafmel
    Level 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 .
  • #9
    dondu
    Moderator on vacation ...
    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ę.
  • #10
    Rafmel
    Level 8  
    nie no daj spokój , jak chcesz dam ci pwm gotowy co napisałem 2 tygodnie temu może być ?
  • #11
    dondu
    Moderator on vacation ...
    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.
  • #12
    Rafmel
    Level 8  
    Prosze napisane : MAm ustawione atmega8 na 8Mhz dlatego dluzszy delay.

    Code: csharp
    Log in, to see the code
  • #14
    Rafmel
    Level 8  
    Dondu napisałem jak chciałeś kod masz nad swoim postem :)
  • #16
    Rafmel
    Level 8  
    nie wiem co to znaczy empirycznie ale podłączona mam diodę i miga +/- co sekundę .
  • #17
    dondu
    Moderator on vacation ...
    Mamy więc jasność :)

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

    Code: c
    Log in, to see the code

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

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

    Code: c
    Log in, to see the code

    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
  • #18
    Rafmel
    Level 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 :
  • #19
    dondu
    Moderator on vacation ...
    Rafmel wrote:
    F_CPU 8 MHz

    To nie jest odpowiedź na pytanie:

    dondu wrote:
    - Jak ustawiasz F_CPU?


    Rafmel wrote:
    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
  • #20
    Rafmel
    Level 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.
  • #22
    Rafmel
    Level 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.
  • #24
    Rafmel
    Level 8  
    Ale ja już to ustawiłem. Miałem to ustawione od samego Początku .
  • #25
    skalsky5000
    Level 21  
    Weź kolego narysuj dokładny schemat jak masz teraz wszystko połączone.
  • #26
    dondu
    Moderator on vacation ...
    skalsky5000 wrote:
    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 wrote:
    Ale ja już to ustawiłem. Miałem to ustawione od samego Początku .

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

    Code: vbnet
    Log in, to see the code

    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ś.
  • #28
    Rafmel
    Level 8  
    dondu wrote:
    skalsky5000 wrote:
    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 wrote:
    Ale ja już to ustawiłem. Miałem to ustawione od samego Początku .

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

    Code: vbnet
    Log in, to see the code

    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 ?
  • #29
    dondu
    Moderator on vacation ...
    Rafmel wrote:
    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 wrote:
    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?
  • #30
    Rafmel
    Level 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