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]Nieprawidłowe działanie wyświetlacza LCD

esh0 03 Gru 2008 21:56 2366 23
REKLAMA
  • #1 5814846
    esh0
    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:
    
    $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]
  • REKLAMA
  • #3 5814919
    esh0
    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.
  • REKLAMA
  • #4 5814946
    wader_669
    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.
  • #5 5814986
    esh0
    Poziom 19  
    &crystal też dodawałem :) Teraz zaprogramowałem takim:
    
    $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
  • #6 5814998
    wader_669
    Poziom 28  
    popraw ten schemat, bo masz troche walniety. 10k na diody swiecace ?!!
    To weź odlacz BT i wytestuj wszystko na 5V powinno dzialac.
  • #7 5815042
    esh0
    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...
  • REKLAMA
  • #8 5815069
    nouki
    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.
  • #9 5815105
    sq3fyk
    Poziom 11  
    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
  • #10 5815207
    esh0
    Poziom 19  
    Zamieniłem w konfiguracji RS z E i ciągle pełna linia...
  • #11 5815293
    wader_669
    Poziom 28  
    ja stawiam na roznice napiec ale dodatkowo radze ci wszystkie nie wykorzystane piny podlaczyc do masy
  • #12 5815306
    dawid512
    Poziom 32  
    Wyrzuć cls z pętli i zastosuj locate. Dopisz także
    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.
  • REKLAMA
  • #13 5815346
    nouki
    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.
  • #14 5816761
    fiflak666
    Poziom 12  
    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
  • #15 5816815
    wader_669
    Poziom 28  
    watpie zeby to bylo przyczyna jak wroce do domu, to sprawdze czy mi dziala na porcie c.
  • #16 5816855
    fiflak666
    Poziom 12  
    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ł
  • #17 5817167
    sp3ots
    Poziom 38  
    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.
  • #18 5817378
    wader_669
    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.
  • #19 5817455
    kekerott
    Poziom 11  
    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.
  • #20 5817692
    esh0
    Poziom 19  
    Wczoraj jeszcze odpaliłem w C taki program:
    
    #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:
    
    $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...
  • #21 5817736
    zumek
    Poziom 39  
    esh0 napisał:
    ...Już nie działa w ogóle, nawet dioda nie mruga, czego kompletnie nie rozumiem.

    W C jest ...
    
    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 :|
  • #22 5817806
    esh0
    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 :]
  • #23 5817923
    wader_669
    Poziom 28  
    a co z zasilaniem? podlaczyles 5V na lcd?
  • #24 5817968
    esh0
    Poziom 19  
    Nie, jak mi starczy czasu dzisiaj to przelutuję jeszcze to i sprawdzę.
REKLAMA