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

Inicjalizacja sterownika HD44780 w trybie 8-bit - problem z kodem funkcji

gunnersson 26 Mar 2017 23:22 930 8
REKLAMA
  • #1 16373960
    gunnersson
    Poziom 7  
    Witam. Postanowiłem sam napisać obsługę sterownika hd44780. Mam problem z inicjalizacją. Oto kod funkcji inicjalizacyjnej:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Efekt tej inicjalizacji jest taki, że cały ekran 4x20 jest zapełniony (każdy piksel jest aktywny). Co robię nie tak? Czy to może problem z lcd_run()? Od //1 do //2 używałem lcd_e() zamiast lcd_run() ale nic to nie dało. Gdy dopiszę jeszcze //3 do //4 to mam niemrugający kursor na pierwszej pozycji (świeci się minimalnie mocniej niż inne piksele). Pin od kontrastu mam wpięty przez rezystor 10k do masy (i nie chcę mieć na kontraście regulacji - ma on być stały). Wiem, że podaję dosyć duże wartości opóźnień w _delay_ms/us, ale to chyba nie jest problemem?
  • REKLAMA
  • #2 16373999
    dasej
    Poziom 32  
    Witam.

    Poszukaj biblioteki "radzia". Wyważasz otwarte drzwi.
    A dlaczego nie po I2C. Miej zajmuje szyn procesora.
  • REKLAMA
  • Pomocny post
    #3 16374010
    michalko12
    Specjalista - Mikrokontrolery
    gunnersson napisał:
    Pin od kontrastu mam wpięty przez rezystor 10k do masy (i nie chcę mieć na kontraście regulacji - ma on być stały)

    Ale to nie tak reguluje się kontrast. Równie dobrze mógłbyś podłączyć ten pin bezpośrednio do masy. Dołącz dodatkowo jeszcze rezystor jakieś 47k między zasilanie a pin kontrastu i zobacz czy coś się zmienia.
  • REKLAMA
  • #4 16374228
    BlueDraco
    Specjalista - Mikrokontrolery
    Michałko: piszesz rzeczy nieprawdziwe. W zdecydowanej większości wyświetlaczy znakowych regulacja kontrastu polega na dobraniu wartości rezystora pomiędzy wejściem kontrastu i masą. Zazwyczaj powinien on mieć wartość od kilkuset Ohm do kilku kOhm. Rezystor do plusa nie jest w takim przypadku do niczego potrzebny.
    10k do masy to jednak zwykle ciut za dużo.
  • REKLAMA
  • Pomocny post
    #5 16374272
    Sparrowhawk
    Poziom 22  
    @gunnersonn: Ja rozumiem, że się uczysz, ale uważasz, że mamy rozszyfrowywać te zmienne bitowe. Ja nie wiem, co to robi: LCDW=0b0111000; Po za tym, ten kod:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Zamiast używania funkcji do sterowania pinami E, RW, RS, skorzystaj z makr. Natomiast funkcje przydadzą Ci się do wysyłania komend, lub danych. Ponadto skonfigurowałeś porty od linii E, RW, RS, jako wyjścia, bo nie widzę tego w twoim kodzie?
  • #6 16374299
    michalko12
    Specjalista - Mikrokontrolery
    BlueDraco napisał:
    Michałko: piszesz rzeczy nieprawdziwe. W zdecydowanej większości wyświetlaczy znakowych regulacja kontrastu polega na dobraniu wartości rezystora pomiędzy wejściem kontrastu i masą. Zazwyczaj powinien on mieć wartość od kilkuset Ohm do kilku kOhm. Rezystor do plusa nie jest w takim przypadku do niczego potrzebny.
    10k do masy to jednak zwykle ciut za dużo.


    A mnie zawsze zdawało się, że kontrast reguluje się napięciem a nie rezystancją. Może się pozmieniało, mało ostatnio mam do czynienia z takimi wyświetlaczami, a jak już zdarzyło się czasami nimi pobawić to regulacja napięciem zawsze działała.

    Z drugiej strony gdzie nie spojrzysz to wszyscy stosują regulację napięciem
    Link
  • Pomocny post
    #7 16374541
    trol.six
    Poziom 31  
    michalko12 napisał:
    A mnie zawsze zdawało się, że kontrast reguluje się napięciem a nie rezystancją

    Z tymi co ja miałem do czynienia, steruję sie napięciem, i to nie względem GND a względem VCC.
    Czasem oczywiście wystarczy rezystorek.
    Lub ja czasem tak robie że zasilam z napięcia np 4V6. I kontrast przez małą oporność łącze z GND.
  • #8 16374779
    Konto nie istnieje
    Konto nie istnieje  
  • #9 16375968
    gunnersson
    Poziom 7  
    Problem rozwiązany. Zaimplementowałem makrodefinicje do moich wypocin i nawet kod lepiej wygląda, wyświetlanie działa jak ma działać - prawidłowo, opóźnienia w _delay_ zmniejszyłem.
    Problem kontrastu natomiast rozwiązałem potencjometrem 1k, jutro zastąpię go dzielnikiem rezystancyjnym - właśnie kontrast był przyczyną tych wszechobecnych kwadracików.

    dasej napisał:
    Poszukaj biblioteki "radzia". Wyważasz otwarte drzwi.
    A dlaczego nie po I2C. Miej zajmuje szyn procesora.

    Ja jako początkujący chcę się czegoś nauczyć i dlatego utrudniam sobie życie :)

    Za pomoc dziękuję i życzę dobranoc ;)
REKLAMA