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

ATMEGA16 i HD44780 - Jak wyeliminować miganie przy scrollowaniu tekstu?

maly_elektronik 26 Lip 2012 10:02 2892 11
REKLAMA
  • #1 11144653
    maly_elektronik
    Poziom 23  
    Witam,
    w projekcie nad którym pracuje zaszła potrzeba dodania scrollingu tekstu na wyświetlaczu (hd44780 2x16znaków).
    Niby wszystko pięknie ale podczas przewijania widzę coś na kształt migania i nakładania się tekstu :( Program działa na zasadzie pełnego zapisu 16 znaków jednej lini.

    Program działa na zasadzie szatkowania tablicy z tekstem na 16B paczki które później trafiają do bufora z którego to trafiają do LCD.

    Tak wyglądają efekty scrollingu (moim zdaniem powinno to wyglądać płynniej i bez opisywanego nakładania się i migania).




    Czas pomiędzy przeładowywaniem zawartości wyświetlacza to ok. 170ms (w przybliżeniu bo z timer przepełnia się o trosze mniej us).
  • REKLAMA
  • Pomocny post
    #2 11144840
    piotrva
    VIP Zasłużony dla elektroda
    Wyświetlacze na kontrolerze HD44780 mają pamięć 40 znaków/linię i możliwość scrolowania za pomocą odpowiedniej komendy sprzętowej.
    Jeśli 40 znaków to za mało to jak dokładnie realizujesz to przewijanie (pokaż kod). Czy czyścisz wyświetlacz za każdym razem, czy nadpisujesz zawartość.
    Poza tym niestety HD44780 nie należą do najszybszych wyświetlaczy jeśli chodzi o czas odświeżania i czasem występują takie duszki - taki urok tych tanich wyświetlaczy ;-)
  • #3 11145039
    maly_elektronik
    Poziom 23  
    Nie czyszczę, tylko powracam do pozycji 0,0 i nadpisuje :)
    Tak wygląda kod scrollingu:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    P.S Jak się nazywa ta opcja scrollingu sprzętowego bo nie mogę (nie znalazłem) go w manualu podczas pisania procedur obsługi :(
  • REKLAMA
  • Pomocny post
    #4 11145125
    LordBlick
    VIP Zasłużony dla elektroda
    1. Entry Mode Set - Najstarszy bit 0x03.
    2. Bity S/C oraz R/L - "Cursor and Display Shift". Najstarszy bit 0x10 | 0x04(Scroll/Const) | 0x02 (Right/Left).
  • REKLAMA
  • #5 11145140
    Konto nie istnieje
    Konto nie istnieje  
  • #6 11145150
    maly_elektronik
    Poziom 23  
    Rzeczywiście znalazłem taką komendę w datasheet'cie :)
    Niestety nie mam możliwości kontroli flagi E :( więc jadę na delayach i szczerze mówiąc nie wiem jak się ich elegancko pozbyć (myślałem o ewentualnej while liczącej do N cykli, ale czy to takie eleganckie...)
  • #7 11145160
    Konto nie istnieje
    Konto nie istnieje  
  • #8 11145167
    maly_elektronik
    Poziom 23  
    W projekcie docelowym brak wolnego pinu :) a na płytce prototypowej nawet jeślibym chciał to go nie ma :(
  • REKLAMA
  • #9 11145183
    Konto nie istnieje
    Konto nie istnieje  
  • #10 11145196
    maly_elektronik
    Poziom 23  
    Chyba jednak ta flaga jest gdzie indziej, wg tego zdjęcia to osobny pin.

    Przepraszam trochę namieszałem, nie mam sprzętowej możliwości zmiany stanu pinu R/W
  • Pomocny post
    #11 11145210
    Konto nie istnieje
    Konto nie istnieje  
  • #12 11145278
    maly_elektronik
    Poziom 23  
    Myślałem ze jest na to jakaś inna metoda... ale trudno bd musiało się trochę wolniej przewijać i tyle.
    Miał to być tylko dodatkowy walor estetyczny :)

    W związku z tym iż moje wątpliwości zostały rozwiane wkrótce zamykam temat i wszystkim dziękuje za pomoc :)

    Pozdrawiam maly_elektronik
REKLAMA