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

[ATmega] [ATmega][C][HD44780] Jak narysować wykres z 40 próbek na wyświetlaczu?

boss87 08 Sty 2013 01:34 4677 14
  • #1 11758271
    boss87
    Poziom 12  
    Witajcie,

    Przy okazji robienia monitora do kotła CO, zrobiłem funkcję dla hd44780 która pozwala rysować prosty wykres używając 8 własnych znaków użytkownika.

    Na wykresie mieści się 40 próbek, co o tym sądzicie?
    Dodam, że całkiem fajnie działa z enkoderem jako przewijanie góra/dół.

    Był by ktoś zainteresowany? To udostępnię [C]

    [ATmega] [ATmega][C][HD44780] Jak narysować wykres z 40 próbek na wyświetlaczu?
  • #2 11759095
    Konto nie istnieje
    Konto nie istnieje  
  • #3 11759297
    boss87
    Poziom 12  
    Kto mi za to zapłaci ? :)
    Chciałem to przygotować trochę staranniej, ale wrzucę w takiej wersji,

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    dodajemy nowa próbkę w ten sposób: (0 to nr wykresu, można ich mieć kilka, ale wyświetlać jednocześnie tylko jeden)
    dodaj_do_historii(0, wartosc + korekta);


    a rysujemy tak:
    rysuj_historie(0, x, y);


    zmienna korekta służy do przewijania góra dol, zmieniamy ją o +-1 i rysujemy od nowa, wtedy ładnie to się przewija
  • #4 11759814
    Konto nie istnieje
    Konto nie istnieje  
  • #6 11759896
    boss87
    Poziom 12  
    @mrsajm0n racja, jak znajdę chwilę to przerobię na wielowymiarową, nie wiem skąd dwa m w LCD_ProgrammChar, nie ja pisałem tą bibliotekę do lcd :). Generalnie nie jest to zoptymalizowane bo to wersja działająca, a nie wyglądająca, chciałem Wam pokazać ideę wykresu na takim prostym wyświetlaczu jak hd44780:)

    @snnaap nie wiem czy do końca o to Ci chodzi, każdy znak ma 8 pixeli wysokości, mając w tablicy 0,1,2,3,4,5,6,7,8,0 uzyskasz takie coś jak na obrazku, oczywiście próbek może być max 40, (8 znaków)
    [ATmega] [ATmega][C][HD44780] Jak narysować wykres z 40 próbek na wyświetlaczu?
  • #7 11759950
    snnaap
    Poziom 25  
    A, to już wiem o co chodzi, jedna próbka to jeden słupek.
    Całkiem fajnie.
    I tu pojawia nam się ograniczenia tego poczciwego wyświetlacza, że można definiować jedynie 8 znaków, powinna być możliwość definiowania min 80 znaków tak aby można było swobodnie zapełnić np wyświetlacz 20x4.

    A tak musimy się męczyć z multipleksowaniem.
    Pozdrawiam
  • #8 11760322
    boss87
    Poziom 12  
    Masz jakiś sprawdzony sposób na multipleksowanie? Walczyłem z tym i nie udało mi się dobrać sensownych czasów, zawsze było widać znaczne migotanie.
  • #9 11760599
    piotrva
    VIP Zasłużony dla elektroda
    To zależy od prędkości pracy wyświetlacza - pomóc może używanie pinu R/W, ale zwykle i tak widać migotanie...
  • #10 11761425
    uzi18
    Poziom 24  
    Pomysl fajny, dla czystosci wyswietlacza warto ten jeden znak "wykresu" po lewej usunac - bedzie rowniej ;)

    Wyglada na to, ze mozna spokojnie ta funkcje przerobic aby uzywala
    tylko jednego znaku i wysylala go po w petli jako 0-7, czyli bez tablicy wielowymiarowej.

    np.:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 11762100
    boss87
    Poziom 12  
    @uzi18 Faktycznie niezła poprawka, zaoszczędzone około 650 bajtów :), poprawnie będzie tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    A przy okazji chciałem pokazać jak to działa w ruchu:
    (przykładowo z ADC i potencjometrem)


  • #13 11798168
    boss87
    Poziom 12  
    Dopiero teraz zauważyłem że edytowałeś..
    Rozbiłem ponieważ po każdym LCD_WriteData(); wyświetlacz wraca do pozycji 0,0
  • #15 11809201
    boss87
    Poziom 12  
    No to chyba wszystko w temacie, można zamknąć. Jak by ktoś miał pytania, zapraszam na PW
REKLAMA