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

Atmga8 Bascom - LCD tekst przeskakuje do drugiej linijki.

Gunslinger 21 Lis 2015 19:35 1032 10
  • #1 21 Lis 2015 19:35
    Gunslinger
    Poziom 29  

    Witam. Robię mini komputer pokładowy. Funkcje to pomiar poziomu paliwa, temperatury w i na zewnątrz, i napięcia aku. Na razie mam paliwo i jedną temperaturę. Poziom paliwa symuluje na razie potencjometrem. Do pewnego poziomu fajnie wypełnia mi kolejne kwadraty, jednak gdy zapełnię pierwszą linię, i przekręcę jeszcze trochę potencjometr, to wypełnia mi również linię poniżej za temperaturą. Dlaczego się tak dzieje.

    Kod: Bascom
    Zaloguj się, aby zobaczyć kod


    Mam jeszcze jedno pytanie. Wyświetlacz to negatyw 2x16 z niebieskim podświetleniem. Gdy patrzę na niego prosto, to działa normalnie. Ale wystarczy się spojrzeć pod kątem i wyraźnie widać jak miga. To norma?

    0 10
  • #3 21 Lis 2015 22:16
    landy13
    Poziom 29  

    Gunslinger napisał:
    ...wyraźnie widać jak miga. To norma?


    Usuń "Cls" z pętli głównej, to przestanie.

    0
  • Pomocny post
    #4 21 Lis 2015 22:22
    Press
    Poziom 22  

    Robisz CLS potem na bieżąco obliczenia i wyświetlanie. To wszystko trwa. Dlatego miga.
    Najpierw obliczenia a potem CLS i od razu wyświetlić wszystko.
    Rada landy13 By usunąć CLS też dobra tylko wtedy nawigacja za pomocą LOCATE X,Y.

    0
  • Pomocny post
    #5 21 Lis 2015 22:34
    373522
    Użytkownik usunął konto  
  • Pomocny post
    #6 22 Lis 2015 07:12
    emarcus
    Poziom 35  

    Gunslinger napisał:
    Witam. Robię mini komputer pokładowy. Funkcje to pomiar poziomu paliwa, temperatury w i na zewnątrz, i napięcia aku. Na razie mam paliwo i jedną temperaturę. Poziom paliwa symuluje na razie potencjometrem. Do pewnego poziomu fajnie wypełnia mi kolejne kwadraty, jednak gdy zapełnię pierwszą linię, i przekręcę jeszcze trochę potencjometr, to wypełnia mi również linię poniżej za temperaturą. Dlaczego się tak dzieje.


    Buffer wyświetlacza LCD HD44780 zawiera miejsce na 80 znaków/linię do wyświetlenia.
    W tej formie co twój program jest pisany (kolejne linie sa dopisywane jako jeden ciąg) i pomimo że 'brakuje' miejsca na wyświetlaczu (16 znaków) to są one jednak rejestrowane w jego buffer aż do przepełnienia, a natępnie akumulowane/przenoszone do następnej linii. Niektóre wyświetlacze (kompatybilne), mogą miec buffer o innej pojemności; na przykład 40.
    To tylko wygłąda że są one dopisywane za temperaturą.
    One są wpisane wcześniej i nadpisane kolejną instrukcją wyniku temperatury.

    Jeżeli chcesz wyświetlic wynik w postaci graficznej jako bargraf, to musiałbyś zastosowac inną metodę, z nadpisywaniem znaków w formie matrix, w kombinowanej zależności wypełnienia pól LCD od wartości ADC.
    Poniżej masz taki przykład, choc dla możliwych 16 znaków (całej sali LCD) otrzymasz bardzo kiepską rozdzielczośc.

    Kod: vbnet
    Zaloguj się, aby zobaczyć kod


    Zechcesz zastosowac inny wyświetlacz, zajdzie potrzeba naniesienia zmian.

    Odczyt i rachunek temperatury masz również błędny (trochę bezsensowne i zbędne kombinacje).

    e masrcus

    0
  • #7 22 Lis 2015 10:21
    Gunslinger
    Poziom 29  

    Ogólnie za dużo nie umiem na razie, więc kleje z różnych kodów. Kod te temperatury zerżnięty z strony znalezionej w google. Zaczynam rozumieć o co chodzi z tym bufferem i przepełnieniem. Tak, miała to być linijka wskazująca poziom. Cls wstawiłem do pętli, bo bez niego zwiększanie poziomu paliwa szło fajnie, ale po zmniejszeniu zawieszał się na największej wartości.

    Potem na spokojnie przeanalizuję wasze podpowiedzi z moim kodem, i dam znać, co udało się wykrzesać.


    Edit. Zrobiłem to dzieło kombinatoryki, i teraz już nie mruga. Za to mam problem z temperaturą. W pokoju mam 20, może 22 stopnie, a termometry pokazują 25, a przy niektórych włączeniach, nawet 29 stopni. Pomiędzy jednym a drugim 0.2, 0.3 stopnia różnicy. Rezystor podciągający użyłem 3.3K, zamiast 4.7K, ale to chyba nie jest wina tego.

    Kod: Bascom
    Zaloguj się, aby zobaczyć kod

    0
  • Pomocny post
    #8 22 Lis 2015 22:29
    emarcus
    Poziom 35  

    Gunslinger napisał:
    Za to mam problem z temperaturą. W pokoju mam 20, może 22 stopnie, a termometry pokazują 25, a przy niektórych włączeniach, nawet 29 stopni. Pomiędzy jednym a drugim 0.2, 0.3 stopnia różnicy. Rezystor podciągający użyłem 3.3K, zamiast 4.7K, ale to chyba nie jest wina tego.

    Wartośc rezystora podciągającego magistralę 1-wire nie jest krytyczna i to w żaden sposób nie fałszuje wyniku pomiaru (odczytu) temperatury.
    Problem u ciebie jest powodowany zbyt częstym odczytem temperatury z DS, jeszcze nawet przed ukończeniem konversji.
    Popatrz raz jeszcze na swój kod:
    - w pętli głównej zaraz po instrukcji 'konvert T', masz obsługę ADC oraz wyświetlenie wyników na LCD i troche prostych rachunków obliczenia i przygotowania temperatury do wyświetlenia co w sumie zabiera najwyżej kilkadziesiąt milisec.
    Dalej, processor powraca na początek pętli i odczytuje temperaturę z DS, która nie jest jeszcze gotowa (na konversję potrzeba min. 750 msec).
    Czas ten nie musi byc odczekany w formie 'waitms 750'; może byc dłuższy, może też byc mierzony timerem. W bardzo prosty sposób możesz skonfigurowac timer1 do odmierzania czasu (powiedzmy 1 sec lub dowolny przedział) w trybie CTC i wykorzystac jego flagę OCF1A albo ICF1 do startu odczytu temperatury. Flaga ta nie jest automatycznie kasowana (nie stosujesz interruptu), więc po jej wykorzystaniu należy ja samemu skasowac, tak aby przy następnym porównaniu rejestrów Timer1 mógł ja ponownie postawic.

    e marcus

    0
  • #9 23 Lis 2015 19:38
    Gunslinger
    Poziom 29  

    Rzeczywiście zapomniałem o tych 750ms. Spróbuję poprawić i dam znać. Na razie dokładam jeszcze pomiar napięcia aku.

    0
  • Pomocny post
    #10 23 Lis 2015 19:50
    373522
    Użytkownik usunął konto  
  • #11 23 Lis 2015 21:20
    Gunslinger
    Poziom 29  

    Dzięki za rady. Mam dużo nauki, więc od razu nie przeanalizuje.

    Locate 1 , 1 zastosowałem bo przerzucał mi tą linijkę, do drugiej. "Old_val" brzmi ciekawie, ale nie wiem o co chodzi. Na razie nie mam czasu szukać, więc kolejne rezultaty wstawię możliwe że dopiero w czwartek.

    0