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.

[ATMEGA8]Nieprawidłowe działanie wyświetlacza LCD

03 Gru 2008 21:56 2201 23
  • Poziom 19  
    Wiem wiem, jest masa takich tematów, jednak nie bardzo znalazłem odpowiedź a walczę od 2 dni z tym.

    Otóż jest sobie projekt jak w załączniku. Podłączony jest wyświetlacz zgodny z HD44780.
    [ATMEGA8]Nieprawidłowe działanie wyświetlacza LCD
    Chciałem napisać w C obsługę LCD, ale nie działało coś, więc napisałem kilka linijek w Bascomie - również nie działa:
    Code:

    $regfile = "m8def.dat"

    Dim Count As Integer
    Count = 0

    Do
      Cls
      Lcd "Hello! " ; Count
      Count = Count + 1
      Wait 1
    Loop
    End

    Kodu z C nie będę przepisywał.

    Efekt jest taki, że na LCD albo mam wiersz zapełnionych kwadratów, albo pojawia się kursor, albo latają jakieś znaki. Zależy od programu. Oczywiście porty odpowiednio skonfigurowałem w ustawieniach BASCOMa.

    Sprawdzałem już na dwóch wyświetlaczach i na dwóch ATMEGAch. Nic...

    Fuse bity ustawione jak tutaj: Link

    Ktoś ma jakiś pomysł dlaczego nie mogę tych LCD uruchomić? Jeden z LCD jest na 100% sprawny, bo pracował do niedawna w innym moim projekcie na at89c2051...

    Poprawiłem tytuł - regulamin p.11.1
    [zumek]
  • Poziom 34  
    A czy procesor wie do jakich końcówek podłączyłeś LCD?

    Code:
    Config Lcdpin = PIN , DB4=PORTB.1, DB5=PORTB.2 , DB6=PORTB.3 , DB7=PORTB.4 , E=PORTB.5 , RS=PORTB.6


    (pisane w jednej linii przed pętlą główną)
  • Poziom 19  
    Wie, bo konfiguruję to w opcjach BASCOMA (napisałem o tym). Jednak nawet jak zrobię tak jak podałeś to nic nie zmienia.
  • Poziom 28  
    a $crystal ?
    a tak poza tym wyglada wszystko ok
    (dlaczego na schemacie masz zaznaczony zew. oscylator? a fusebity masz ustawione na wewnetrzny?)
    _________________________________

    wlasnie teraz widze ze procka zasilasz z 3,3V a lcd z 5V nie bedzie to dzialac. Przynajmniej u mnie nie dziala. Radze ci wszystko przestawic na 5V ablo zastoswoac jakis konwerter napiec.
  • Poziom 19  
    &crystal też dodawałem :) Teraz zaprogramowałem takim:
    Code:

    $regfile = "m8def.dat"
    $crystal = 1000000
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.1 , Rs = Portc.0
    Config Lcd = 16 * 2

    Dim Count As Integer
    Count = 0

    Do
      Cls
      Lcd "Hello! " ; Count
      Count = Count + 1
      Wait 1
    Loop
    End

    I wyświetla mi górną linię zapełnioną kwadracikami :)

    Dodano po 1 [minuty]:

    Zewnątrzny osc jest na zaś. Ale z tymi napięciami to faktycznie może być to... A to mi teraz mocno utrudnia cały projekt, bo używam procka 3,3V żeby komunikować się z modułem BT który też jest na 3,3V
  • Poziom 28  
    popraw ten schemat, bo masz troche walniety. 10k na diody swiecace ?!!
    To weź odlacz BT i wytestuj wszystko na 5V powinno dzialac.
  • Poziom 19  
    Nie czepiaj się tego czego nie trzeba - na płytce mam 1k ;)

    Żeby sprawdzić na 5V muszę płytkę przerobić (kilka zwor) więc to jutro rano sprawdzę.

    Jaki układ wtedy zastosować, aby LCD działał przy tym zasilaniu procka? Bo ostatecznie mogę dać MAX232 między uC a BT, ale tego właśnie nie chciałem. Cholercia...
  • Poziom 25  
    cześć. zazwyczaj tak się dzieje jak się ma źle podpięte E i Rs wyświetlacza, wtedy świeci pierwsza linia i nic więcej.
  • Poziom 10  
    Program jest napisany prawidlowo w/g schematu i programu masz dobrze podpiety wyswietlacz do uc.Sprawdz czy aby napewno piny wyswietlacza sa podpiete w nalezyte miejsca i czy jest kontakt miedzy uc a lcd.Pozdrawiam
  • Poziom 19  
    Zamieniłem w konfiguracji RS z E i ciągle pełna linia...
  • Poziom 28  
    ja stawiam na roznice napiec ale dodatkowo radze ci wszystkie nie wykorzystane piny podlaczyc do masy
  • Poziom 32  
    Wyrzuć cls z pętli i zastosuj locate. Dopisz także
    Code:
    Config Lcdbus = 4
    . Martwi mnie ten twój zasilacz. Tak małe pojemności kondensatorów to przesada w zasilaczu. Powiedz mi także po co ci zew. kwarc skoro masz fusy na wew. RC 1MHz.
  • Poziom 25  
    wpisz jeszcze w pętli zmianę stanu jakiegoś z pinów ( TOGGLE ) które nie są wykorzystane zobacz czy procesor pracuje zmieniając stan na nodze.
  • Poziom 11  
    nie wiem czy dobrze strzelam ale też miałem ten problem:

    wszystcy podłączają LCD (ja też tak miałem i dwa miesiące z tym się borykałem) w Atmega8 do portu C

    nie pamiętam dlaczego ale cośtam z tym portem jest tak - w zależności od fusów on ma inne funkcje czy coś (przepraszam za te ogólniki ale nie pamiętam już o co chodziło)

    tak więc podsumowując:

    :arrow: podłącz LCD do innego portu
  • Poziom 28  
    watpie zeby to bylo przyczyna jak wroce do domu, to sprawdze czy mi dziala na porcie c.
  • Poziom 11  
    wader_669 napisał:
    watpie zeby to bylo przyczyna jak wroce do domu, to sprawdze czy mi dziala na porcie c.


    no mi nie działał na porcie C, podłączyłem do innego i działał
  • Poziom 36  
    Witam !
    Zaprogramowałem ATmega8 omawianym programem i jest ok.
    Układ działa na płycie testowej z Ne 300-k.
    Całość zasilam napięciem 5V.
    Przy resecie nie użyłem rezystora 10k i elektrolitu 10uF.
    Fusebity na zdjęciu poniżej.
    [ATMEGA8]Nieprawidłowe działanie wyświetlacza LCD
    Pozdrawiam.
  • Poziom 28  
    fiflak666 napisał:
    wader_669 napisał:
    watpie zeby to bylo przyczyna jak wroce do domu, to sprawdze czy mi dziala na porcie c.


    no mi nie działał na porcie C, podłączyłem do innego i działał


    jak widzisz nie ma zadnej opcji we fusebitach ustawiania portu c, jedynie wlaczenie reseta jak normalna linie.
  • Poziom 10  
    fiflak666 napisał:
    nie wiem czy dobrze strzelam ale też miałem ten problem:

    wszystcy podłączają LCD (ja też tak miałem i dwa miesiące z tym się borykałem) w Atmega8 do portu C

    nie pamiętam dlaczego ale cośtam z tym portem jest tak - w zależności od fusów on ma inne funkcje czy coś (przepraszam za te ogólniki ale nie pamiętam już o co chodziło)


    zgadza się, w Atmedze16 jest tak podobnie. Tutaj ( A8 ) trzeba zaprogramować BIT RSTDISBL (Fuse = np. C119 [L/H]) aby bit 6 portu C można było wykorzystywać jako I/O.

    z 61 str. dokumentacji od Atmegi:
    http://www.atmel.com/dyn/resources/prod_documents/doc2486.pdf ; str. 61 napisał:
    Port C, Bit 6
    RESET, Reset pin: When the RSTDISBL Fuse is programmed, this pin functions as a normal I/O
    pin, and the part will have to rely on Power-on Reset and Brown-out Reset as its reset sources.
    When the RSTDISBL Fuse is unprogrammed, the reset circuitry is connected to the pin, and the
    pin can not be used as an I/O pin.


    lub podłącz pod inny port.
  • Poziom 19  
    Wczoraj jeszcze odpaliłem w C taki program:
    Code:

    #include <avr/io.h>
    #include <util/delay.h>

    int main(void)
    {
       DDRD = 0xFF;
       while(1)
       {
          PORTD = ~_BV(5);
          _delay_ms(1000);
       }
    }

    i o dziwo NIE działał, mimo że kilka dni temu śmigał... Teraz ustawiłem fusebity jak sp3ots, konkretnie ten dodający 64ms do startu, czego wcześniej nie miałem. Program zadziałał i mrygał diodą na porcie D.5 (czy 6).

    Jednak program z bascoma:
    Code:

    $regfile = "m8def.dat"
    $crystal = 8000000
    Config Lcdpin = Pin , Db4 = Portc.2 , Db5 = Portc.3 , Db6 = Portc.4 , Db7 = Portc.5 , E = Portc.0 , Rs = Portc.1
    Config Lcd = 16 * 1
    Config Lcdbus = 4

    Dim Count As Integer
    Count = 0

    Do
      Locate 1 , 1
      Lcd "Hello! " ; Count
      Count = Count + 1
      Wait 1
      Toggle Portd.5
    Loop
    End

    Już nie działa w ogóle, nawet dioda nie mruga, czego kompletnie nie rozumiem.

    Idąc dalej za radą kekerott, przestawiłem port reset na normalny porty i/o (chociaż nie wiem po co, nie mam nic podpięte pod ten port). Efekt? Teraz w ogóle programator nie widzi procka...
  • Poziom 39  
    esh0 napisał:
    ...Już nie działa w ogóle, nawet dioda nie mruga, czego kompletnie nie rozumiem.

    W C jest ...
    Code:

    DDRD = 0xFF;

    ..., a Bascomie ...:?:
    esh0 napisał:

    Idąc dalej za radą kekerott, przestawiłem port reset na normalny porty i/o (chociaż nie wiem po co, nie mam nic podpięte pod ten port). Efekt? Teraz w ogóle programator nie widzi procka...

    No to "pozamiatałeś" :-P
    Leć do sklepu po następnego :|
  • Poziom 19  
    zumek niestety w sumie na C znam się lepiej niż na bascomie chyba, więc nie mam pojęcia czy takie coś trzeba w bascomie wpisać, jeśli tak - to jak? :)

    A koledze kekerott dziękuję :P Na szczęście mam jeszcze dwa w zapasie :]
  • Poziom 28  
    a co z zasilaniem? podlaczyles 5V na lcd?
  • Poziom 19  
    Nie, jak mi starczy czasu dzisiaj to przelutuję jeszcze to i sprawdzę.