logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak zainicjować wyświetlacz HD44780 z Atmega16 w C?

korneliusz 22 Gru 2007 16:42 2021 5
REKLAMA
  • #1 4613966
    korneliusz
    Poziom 16  
    Posty: 288
    Pomógł: 4
    Ocena: 124
    Witam

    Mam problem z oprogramowaniem wyświetlacza HD44780 i atmegą 16, mam dwa wyświetlacze 2x16 i 4x16, oraz dwa procesory Atmega16, próbowałem gotowce znalezione na elektrodzie i w Internecie, oraz te z dokumentacji HD44780 od Hitachi, ale nie udaje mi się nawet zainicjować wyświetlaczy, a piszę w Avr studio i języku C. Próbowałem również na szybko sprawdzić w Bascomie, ale też bez skutków, ciągle widzę tylko pierwszą linię całą w czarnych prostokątach... Sprawdzałem na praktycznie wszystkich portach tego procesora, oraz na trybach 4 i 8 bitowych wyświetlacza oraz różnych zegarach atmegi. Jtag mam wyłączone więc nie blokuje mi on portów I/O. W takim razie co jeszcze sprawdzić w moim układzie? Bo co do połączeń to próbowałem kilkanaście razy, tyle samo razy sprawdzałem poprawność i niby wszystko gra... Powiem jeszcze że kiedyś ten wyświetlacz 4x16 działał w pewnym układzie, pisałem wówczas w Bascomie i nie było problemów, ale teraz za nic nie chce ruszyć...

    Gdzie szukać przyczyny braku inicjacji wyświetlacza i niepoprawnego działania? Oba wyświetlacze są sprawne (nowe).
  • REKLAMA
  • #2 4615084
    ser1983
    Poziom 12  
    Posty: 116
    Pomógł: 3
    Ocena: 7
    Może prościej będzie jeżeli zamieścisz schemat, niż żebyśmy Ci mówili gdzie szukać błędu. Z tego co wiem Bascom jeżeli chodzi o LCD jest banalny i niezawodny. Więc może o ile jesteś pewien co do połączeń i programu, to jednak nie do końca są to sprawne wyświetlacze.

    Niedawno sam miałem problemy z LCD ale w C. Pod Bascomem mi śmigał. Zamieszczam "program" choć to za duże słowo :)

    $regfile = "m8def.dat"
    $crystal = 4000000
    
    Config Lcdpin = Pin , Db4 = Portd.4 , Db5 = Portd.5 , Db6 = Portd.6 , Db7 = Portd.7 , E = Portd.3 , Rs = Portd.2
    Config Lcd = 16 * 2
    Cursor Off
    Cls
    Lcd "Ho ho ho"
    Lowerline
    Lcd "Merry Christmass"
    Do
    Loop


    Ps. Miałem raz padnięty wyświetlacz który zachowywał sie niby normalnie, jak sprawny niezainicjowany, czyli kwadraty w pierwszej linii. Po podłączeniu nowego, program działał bez zarzutów.
  • REKLAMA
  • #3 4615425
    korneliusz
    Poziom 16  
    Posty: 288
    Pomógł: 4
    Ocena: 124
    Schemat jak podłączyłem wyświetlacz do Atmegi? ;) Żadna mi to filozofia podłączyć 4 linie danych do 4 portów procesora + R/S oraz E do procka, no i RW do masy układu... Nie robię tego po raz pierwszy, ale po raz pierwszy mam z nim takie problemy, co do bascoma korzystam z gotowca, w którym kod jest praktycznie identyczny jak w tym podanym przez Ciebie i który kiedyś działał...

    Co do wyświetlaczy wydaje mi się że powinny działać, jeden jest prosto ze sklepu, drugi był tylko sprawdzany...
  • REKLAMA
  • #4 4615869
    szod
    Poziom 33  
    Posty: 1663
    Pomógł: 215
    Ocena: 120
    Zajrzyj do fusebitów i sprawdź na jakiej częstotliwości chodzi ATmega.
    Musisz dostosować procedury opóźnień do szybkości zegara. Procedury
    możesz mieć pisane pod 1MHz a µC chodzi np. na 8MHz. Lepiej jak
    opóźnienia będą za długie niż za krótkie bo wtedy LCD odmówi współpracy.
    Co do BASCOMA to nie znam go, ale zdaje się że można ustawić częstotliwość
    pracy µC i on sam dobierze wtedy właściwe opóźnienia.
  • REKLAMA
  • #5 4620695
    _vince
    Poziom 2  
    Posty: 2
    W zalaczniku jest oblsuga lcd w C dla trybu 4bitowego, dane na mlodszej czesci portu procka. Pisane po WinAVR. delay(100) to kilkadziesiat ms, dla kwarcu 16MHz dzialalo.
    Załączniki:
    • LCD.txt (1.19 KB) Musisz być zalogowany, aby pobrać ten załącznik.
  • #6 4622531
    korneliusz
    Poziom 16  
    Posty: 288
    Pomógł: 4
    Ocena: 124
    _vince napisał:
    W zalaczniku jest oblsuga lcd w C dla trybu 4bitowego, dane na mlodszej czesci portu procka. Pisane po WinAVR. delay(100) to kilkadziesiat ms, dla kwarcu 16MHz dzialalo.


    A mógłbym jeszcze prosić o plik h do tego programu?

    Udało mi się zmusić wyświetlacz do współpracy z Bascomem, w sumie nie wiem jak to się stało, bo łączę tak jak dawniej, ale ważne że działa, tyle że o Bascomie nie mam prawie żadnego pojęcia, więc wolałbym pisać w C, tym bardziej że teraz w szkole programujemy 8051 właśnie w C...
REKLAMA