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][BASCOM] Problem z LCD 2x16

marek19951 26 Sty 2010 16:32 8178 48
REKLAMA
  • #1 7595195
    marek19951
    Poziom 16  
    Witam,

    Zakupiłem LCD u Lispola, ale niestety jest chyba z nim coś nie tak. No ale od poczatku...
    Złożyłem układ na płytce uniwersalnej ze schematu, który sobie narysowałem, wygląda on tak:
    [ATMEGA8][BASCOM] Problem z LCD 2x16
    Płytkę zlutowałem z tego schematu i do tego na AGND dałem masę a na AVCC dałem napięcie, bo wyczytałem później w internecie, że tak trzeba.

    Zrobiłem sobie najprostszy programator LPT - parę rezystorów i kondensator.
    Programuje się dobrze, ale nic nie wyświetla na wyświelaczu.
    Wgrywam taki program:
    $regfile = "m8def.dat"
    $crystal = 1000000
    
    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Cls
    Do
    Locate 2 , 2
    Lcd "TEST PROGRAMU"
    Loop
    End

    I wyświetlacz pokazuje tylko zaczernioną jedną linię a drugą pustą. Podczas programowania nic się na nim nie zmienia.

    ATmega8 działa poprawnie, bo napisałem i wgrałem najprostszy programator żeby zasterować tymi tranzystorami i steruje poprawnie.

    Dodam jeszcze, że zwykle się zaprogramuje dobrze, ale czasem wyskakuje błąd Difference at ... i różne liczby np. 000F4.

    Połączenie od samych nóżek ATmega8 do samego LCD jest dobre, sprawdzałem miernikiem.

    Wyświetlacz z aukcji numer 877922352.

    Mam nadzieję, że pomożecie rozwiązać problem, bo siedzę nad tym już od rana.

    PS. Programuje przez BASCOM-AVR.
  • REKLAMA
  • Pomocny post
    #2 7595290
    landy13
    Poziom 31  
    Na schemacie masz nie podłączony R/W. Dla zapisu powinien być do masy.
  • #3 7595298
    marek19951
    Poziom 16  
    Zapomniałem tego dopisać, a na schemacie nie jest to narysowane. R/W jest podłączony do masy, nie wisi w powietrzu.
  • Pomocny post
    #4 7595632
    Logan
    Poziom 30  
    Program działa, tylko ma pewien błąd logiczny, zastanów się co się dzieje w pętli i jak szybko.
  • #5 7596213
    marek19951
    Poziom 16  
    Po lini Lcd "TEST PROGRAMU" dałem wait 100, dalej to samo...
  • REKLAMA
  • Pomocny post
    #6 7596315
    janbernat
    Poziom 38  
    Najpierw podłącz AVCC i AGND odpowiednio.
    Bez tego portC jest źle zasilany.
    Potem wklej to:

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Cls
    Do
    'Locate 2 , 2
    Lcd "TEST PROGRAMU"
    wait 1
    Loop
    End
  • #7 7596453
    marek19951
    Poziom 16  
    janbernat, przeczytaj dokładniej temat, AVCC i AGND podłączyłem, tylko nie jest to uwzględnione na schemacie.
  • Pomocny post
    #8 7596922
    M. S.
    Poziom 34  
    Jest jeszcze coś takiego w Bascomie jak INITLCD. Spróbuj po opóźnieniu, a przed wejściem do pętli użyć tej instrukcji, która inicjuje LCD. Sam w sobie program powinien inicjować LCD, ale wpisać INITLCD nie zaszkodzi. Sprawdź jeszcze czy przy uC nikt nie majstrował wcześniej i nie ustalił mu taktowania wyżej niż wskazane w programie - 1MHz.
  • REKLAMA
  • Pomocny post
    #9 7597111
    janbernat
    Poziom 38  
    No to wykonaj pkt.2- wklej kod, skompiluj i wgraj.
    Nie rób INITLCD- to jest potrzebne tylko wtedy gdy na jakiś czas zmieniasz funkcje wyprowadzeń używanych przez LCD.
    Zmień programator na STK200/300- są naprawdę tanie.
    Na takim z oporników z LPT spalisz wkrótce procesor albo LPT na płycie w komputerze.
    Skęć potencjometr kontrastu do GND na początek.
  • Pomocny post
    #10 7597268
    landy13
    Poziom 31  
    Panowie nie kombinujcie z programem, bo jest dobry (z pierwszego postu - bez waitów). Z zegarem 1MHz i 2MHz działa zgodnie z planem. Z zegarem 4MHz efekt uboczny to napis wyświetlany także w pierwszej linii od pierwszego znaku, a przy zegarze 8MHz w pierwszej linii tylko słowo "PROGRAMU" od pierwszego znaku. Druga linia cały czas prawidłowa. Przy szybszych zegarach nie sprawdzałem. Mimo iż autor napisał:
    Cytat:
    Połączenie od samych nóżek ATmega8 do samego LCD jest dobre, sprawdzałem miernikiem.
    to zalecałbym powtórzenie sprawdzania.
  • #11 7599685
    marek19951
    Poziom 16  
    Cytat:
    Najpierw podłącz AVCC i AGND odpowiednio.
    Bez tego portC jest źle zasilany.
    Potem wklej to:

    $regfile = "m8def.dat"
    $crystal = 1000000

    Config Lcd = 16 * 2
    Config Lcdpin = Pin , Db4 = Portc.3 , Db5 = Portc.2 , Db6 = Portc.1 , Db7 = Portc.0 , E = Portc.4 , Rs = Portc.5
    Cls
    Do
    'Locate 2 , 2
    Lcd "TEST PROGRAMU"
    wait 1
    Loop
    End


    Wgrałem, efekt ten sam.

    Cytat:
    Jest jeszcze coś takiego w Bascomie jak INITLCD. Spróbuj po opóźnieniu, a przed wejściem do pętli użyć tej instrukcji, która inicjuje LCD. Sam w sobie program powinien inicjować LCD, ale wpisać INITLCD nie zaszkodzi. Sprawdź jeszcze czy przy uC nikt nie majstrował wcześniej i nie ustalił mu taktowania wyżej niż wskazane w programie - 1MHz.


    Nie działa, dalej to samo.

    Cytat:
    No to wykonaj pkt.2- wklej kod, skompiluj i wgraj.
    Nie rób INITLCD- to jest potrzebne tylko wtedy gdy na jakiś czas zmieniasz funkcje wyprowadzeń używanych przez LCD.
    Zmień programator na STK200/300- są naprawdę tanie.
    Na takim z oporników z LPT spalisz wkrótce procesor albo LPT na płycie w komputerze.
    Skęć potencjometr kontrastu do GND na początek.


    Nie będę kupował programatora do zaprogramowania jednej ATmegi, to nie wina programatora, bo jak już pisałem, krótki program, który napisałem do sterowania tranzystorów - działa.
    Gdy sprawdzam czy działa LCD to za każdym razem przejadę powoli po całym zakresie potencjometra i w jednym skrajnym punkcie są kwadraciki a gdy kręcę w 2-gą stronę to nie ma nic.

    Cytat:
    Panowie nie kombinujcie z programem, bo jest dobry (z pierwszego postu - bez waitów). Z zegarem 1MHz i 2MHz działa zgodnie z planem. Z zegarem 4MHz efekt uboczny to napis wyświetlany także w pierwszej linii od pierwszego znaku, a przy zegarze 8MHz w pierwszej linii tylko słowo "PROGRAMU" od pierwszego znaku. Druga linia cały czas prawidłowa. Przy szybszych zegarach nie sprawdzałem. Mimo iż autor napisał: Cytat:
    Połączenie od samych nóżek ATmega8 do samego LCD jest dobre, sprawdzałem miernikiem.

    to zalecałbym powtórzenie sprawdzania.


    Sprawdziłem jeszcze raz miernikiem uniwersalnym (M890C) na dźwięk gdy obwód będzie zamknięty i jeden koniec miernika do nóżki ATmegi a drugi do styków na LCD i przejście jest przy każdym pinie, nie ma spięcia na żaden inny pin. LCD podłączam na goldpinach, ale wątpię aby to była wina połączenia.


    Macie jeszcze jakieś propozycje?

    EDIT:
    Podpiąłem teraz w inny sposób LCD:
    PD2 - D7
    PD3 - D6
    PD4 - D5
    PD7 - D4
    PD6 - RS
    PD5 - E
    Niestety efekt ten sam, na kilku programach (config lcd oczywiście zmieniłem). Czyli skoro program można wykluczyć, połączenie LCD-ATmega można wykluczyć, to gdzie tkwi problem?
  • Pomocny post
    #12 7600959
    marco47
    Poziom 41  
    Masz możliwość sprawdzenia na innym wyświetlaczu LCD ?
    Bo wpisując program z Twojego pierwszego postu do układu testowego , na LCD pokazuje się napis TEST PROGRAMU. Czyli wynika że kod masz dobry .
    W takim razie musisz sprawdzić czy na pewno masz dobre połączenia z LCD.
  • #13 7600978
    marek19951
    Poziom 16  
    Połączenie teraz zrobiłem od nowa innymi kablami i z innych portów. LCD innego niestety nie posiadam...
  • Pomocny post
    #14 7600986
    marco47
    Poziom 41  
    No więc jaki z tego wniosek ?
  • #15 7601009
    marek19951
    Poziom 16  
    Nie wiem, chyba coś jest nie tak z tym LCD...
  • Pomocny post
    #16 7601060
    polprzewodnikowy
    Poziom 26  
    Pewnie LCD uszkodzone, wgrałem twój kod na atmegę16 i zadziałał więc winy szukaj w wyświetlaczu.
  • Pomocny post
    #17 7601068
    marco47
    Poziom 41  
    Jeżeli program jest dobry , procesor jest dobry , połączenia są dobre (według Ciebie) , programowanie przebiega dobrze to wniosek LCD jest do (...niedomówienie).
  • REKLAMA
  • Pomocny post
    #19 7601176
    marco47
    Poziom 41  
    Piny D0...D3 nie podłączamy do masy , jeżeli nie korzystamy z nich .
    I nie negujemy że kolega kupił zły wyświetlacz u tego sprzedawcy, tylko szukamy przyczyny niewyświetlania na LCD napisów .
  • #21 7601425
    marco47
    Poziom 41  
    W przypadku LCD (kompatybilne z HD44780) nie ma musu podłączać do masy.
  • Pomocny post
    #22 7601468
    l3sz3k
    Poziom 18  
    Witam,
    Jakim kwarcem kolega popędza ten układ?
    Podłącz diodę led do portu (przez rezystor) i migaj nią co 1 sekundę (programowo).
    Wtedy będziesz miał pewność, że procek popędzasz takim zegarem jak zadeklarowałeś.
  • #23 7601501
    marek19951
    Poziom 16  
    Nie mam zewnętrznego kwarcu podłączonego, w fuse bitach jest ustawiony 1MHz, nic nie zmieniałem tam. Pewność mam, bo tranzystorami steruje dobrze z odpowiednimi czasami.
  • #24 7601569
    marco47
    Poziom 41  
    Kolego marek19951
    Zacznijmy od początku .
    Pokaż schemat według którego podłączyłeś LCD , zaznaczam schemat ma być dobrze narysowany bo ten który pokazałeś na początku jest zły .
  • Pomocny post
    #25 7601629
    janbernat
    Poziom 38  
    Jeszcze sprawdź potencjometr przy wyświetlaczu- czy ma na pewno 10k i czy na suwaku napięcie zmienia się 0-5V.
  • #26 7601631
    marek19951
    Poziom 16  
    Dlaczego jest zły?
    Na początku był podłączony tak jak na 1-wszym schemacie.
    Teraz dla sprawdzenia podpiąłem go w ten sposób:
    PD2 - D7
    PD3 - D6
    PD4 - D5
    PD7 - D4
    PD6 - RS
    PD5 - E

    Niestety ciągle to samo.
  • #27 7601691
    marco47
    Poziom 41  
    A masz możliwość sprawdzenia czy są wysyłane rozkazy do LCD : oscyloskop , analizator inne paści (dioda LED i zmniejszenie szybkości procka + zwolnienie szybkości pętli )
  • Pomocny post
    #28 7601909
    morson
    Poziom 14  
    Spotkałem się z tym, że wyświetlacz SDEC nieinicjalizował mi się, gdy ustawiałem bity D7 do D4 przy kwarcu 1MHz (co prawda pisałem w C, ale zasada jest ta sama przy obsłudze bitowej), dopiero przy 8MHz mi poprawnie zainicjował się wyświetlacz.
  • #29 7602067
    marek19951
    Poziom 16  
    Nie mam oscyloskopu ani analizatora.
    Zmieniłem w fusebitach na 8MHz, niestety dalej to samo.
  • Pomocny post
    #30 7602594
    l3sz3k
    Poziom 18  
    marek19951 napisał:
    Nie mam zewnętrznego kwarcu podłączonego, w fuse bitach jest ustawiony 1MHz, nic nie zmieniałem tam. Pewność mam, bo tranzystorami steruje dobrze z odpowiednimi czasami.


    Kolego czemu jesteś taki uparty - przecież chcemy Ci pomóc.
    Nic nie stoi na przeszkodzie (oprócz Twojego uporu), abyś dodał w tej pętli co wyświetlasz tekst na LCD zapalanie i gaszenie jakiejś linii, co sekundę.

    czyli :
    while
    {
    wyświetlanie na LCD;
    zmiana stanu linii LED;
    opóźnienie 1s;
    }

    Jak trochę poprogramujesz to nauczysz się wstawiać taki kod i robić diagnostykę i procedury testujące często i gęsto.

    Nie programuję w BASCOMie dlatego napisałem ogólnie co ma być robione w pętli.
REKLAMA