Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

LCD 2x16 HD44780 napisanie programu

gillala 08 Mar 2017 11:36 1122 20
  • #1 08 Mar 2017 11:36
    gillala
    Poziom 8  

    Witam, mam pytanie może dla fachowców banalne. Nie mogę dac sobie rady z napisaniem programu na LCD 2x16 HD44780 takiego żeby w pierwszej linii napis migał a w drugiej linii wyświetlał się sale licznik sekund. Jakby ktoś mógł mi pomóc byłoby super.

  • #2 08 Mar 2017 12:07
    viayner
    Poziom 31  

    Witam,
    Bo tak naprawde jest to nie mozliwe i nie wykonalne.
    HD44780 to rodzaj sterownika wyswietlacza LCD i nie da sie na niego nic napisac.
    Program mozesz napisac na mikrokontorler nim sterujacy a sam program zalezy od tego jaki chip wybierzesz i czym on ma sterowac czy z czym sie komunikowac.
    Twoj problem jest banalny ale musisz najpier wybrac mikrokontroler i sprecyzowac problem.
    Pozdrawiam

  • #3 08 Mar 2017 13:23
    gillala
    Poziom 8  

    Faktycznie nie sprecyzowałem , sorry : mikrokontroler atmega 328p-pu na płytce arduino uno3. Chciałbym żeby napis na pierwszej linii włączał się i wyłączał a w drugiej linii żeby był licznik cały czas widoczny.

  • #5 08 Mar 2017 13:30
    gillala
    Poziom 8  

    Próbowałem i wychodzi tak, że ten licznik też miga.

  • #7 08 Mar 2017 15:51
    gillala
    Poziom 8  

    Kod: c
    Zaloguj się, aby zobaczyć kod


    schemat:
    LCD 2x16 HD44780 napisanie programu

  • #8 08 Mar 2017 16:34
    krzysiek_krm
    Poziom 22  

    Witam,
    w napisie, który ma migać, można naprzemiennie, z jakimś okresem i współczynnikiem wypełnienia, wyświetlać jego treść oraz pustkę, czyli spacje.

    Pozdrawiam

  • #9 08 Mar 2017 17:45
    gillala
    Poziom 8  

    Krzysiek a czy mógłbyś mi to jakoś napisać bo ja jeszcze na tym poziomie nie jestem. Plisss

  • #10 09 Mar 2017 11:51
    krzysiek_krm
    Poziom 22  

    Witam,
    w pierwszej wersji, bazującej na Twoim programie, możesz w pętli loop:
    - wyświetlić w pierwszej linii napis
    - wyświetlić w drugiej linii czas
    - odczekać 500 ms
    - wyświetlić w pierwszej linii spacje zamiast napisu
    - wyświetlić w drugiej linii czas
    - odczekać 500 ms
    Pętla loop kręci się w kółko, więc efekt będzie następujący:
    - wyświetli się napis i czas
    - po pół sekundy zgaśnie napis i wyświetli się nowy czas
    - po kolejnej pół sekundy pętla zacznie się na nowo
    i tak w nieskończoność.

    To rozwiązanie jest niestety metodą "łoma i siekiery", ze względu na użycie funkcji "delay", która odbiera sterowanie na czas swojego trwania, komputer poza czekaniem nic innego nie robi.

    Bardziej sensownie możesz to zrobić twórczo modyfikując przykład pod tytułem "blink without delay".
    Warto jeszcze zrozumieć zasady manipulowania danymi z funkcji typu "millis", opisane tutaj:
    http://playground.arduino.cc/Code/TimingRollover

    Pozdrawiam

  • #11 10 Mar 2017 06:28
    gillala
    Poziom 8  

    Nie dam rady raczej z tego przykładu, może jakiś inny łatwiejszy pomysł? Niby banał a problem. Może jeszcze kogoś to zainteresuje.....

  • #12 10 Mar 2017 11:10
    el2010tmp
    Poziom 24  

    Zamiast lcd.noDisplay(); napisz:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    zamiast lcd.display(); napisz:
    Kod: c
    Zaloguj się, aby zobaczyć kod


    To chyba nie jest takie trudne.


    edit
    Mój błąd, poprawiłem lcd.begin na lcd.setCursor.

  • #13 10 Mar 2017 14:29
    krzysiek_krm
    Poziom 22  

    Witam,
    nie jestem znawcą biblioteki "lcd", ale

    el2010tmp napisał:
    Zamiast lcd.noDisplay(); napisz:
    lcd.begin(16, 2);
    lcd.print("        ");// siedem spacji

    zamiast lcd.display(); napisz:
    lcd.begin(16, 2);
    lcd.print(" CZESC ");

    To chyba nie jest takie trudne.

    prawdopodobnie jest bez sensu.
    Sądząc po nazwie, metoda "lcd.begin" inicjuje wyświetlacz, czego raczej nie należy robić w kółko, w pętli. Zapewne jej wykonanie trwa dłużej niż "zwykłego" wyświetlania. Być może również czyści ekran, co będzie powodowało jakieś "miganie i błyskanie".

    Pozdrawiam

  • #14 10 Mar 2017 15:52
    adasikp
    Poziom 12  

    A zamiast lcd.begin(16,2) napisz lcd.setCursor(0,0); czy inna pozycja .

  • #15 11 Mar 2017 09:00
    el2010tmp
    Poziom 24  

    adasikp napisał:
    A zamiast lcd.begin(16,2) napisz lcd.setCursor(0,0); czy inna pozycja .


    Mój błąd, poprawiłem.

  • #16 11 Mar 2017 11:22
    adasikp
    Poziom 12  

    Cytat:
    Mój błąd, poprawiłem.

    Kod: c
    Zaloguj się, aby zobaczyć kod

    Gdzie to wyświetli jak wyświetlacz ma dwie linie numerowane od zera ?

  • #17 15 Mar 2017 18:27
    gillala
    Poziom 8  

    Witam, sprawdziłem to co mi poradził kolega el2010tmp no i niestety krzysiek miał rację to tylko jakieś błyski bez sensu.
    Może jakaś porada z sensem ?

  • #18 15 Mar 2017 19:00
    Karaczan
    Poziom 38  

    To z sensem napisz która wersja środowiska Arduino i która wersja biblioteki LCD.
    Było ich kilka i się różniły czasem dość znacznie.

    Na tyle że czasem nawet programy pisane dla innej wersji biblioteki LiquidCrystal nie współpracują wogóle bez przeróbek kodu.

  • #19 15 Mar 2017 19:50
    gillala
    Poziom 8  

    Środowisko Arduino IDE 1.8.2 , biblioteka LiquidCrystal.

  • Pomocny post
    #20 19 Mar 2017 13:03
    Crayou
    Poziom 11  

    Zdaje się, że używałem tej biblioteki.

    lcd.begin - używasz raz, do inicjalizacji - w funkcji setup.

    W loopie dajesz:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    To w najprostszej postaci. Potem wypadałoby uniknąć delay().

  • #21 25 Mar 2017 15:51
    gillala
    Poziom 8  

    WIELKIE DIĘKI Crayou twój pomysł mi pomógł, po małej modyfikacji : w pierwszej linii napis miga co sekundę a w drugiej licznik liczy sekundowo bez migania. Jest OK. Wklejam może komuś się przyda.


    Kod: c
    Zaloguj się, aby zobaczyć kod