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

BASCOM AVR obsługa wyświetlacza LCD + DS18B20 + PCF8583

23 Mar 2013 13:24 3549 16
  • Poziom 13  
    Witam!

    Uczę się programowania w BASCOM i mam problem z procedurami.
    Chciałem sobie napisać procedurę tak jak w kodzie, który podałem niżej aby zwiększać wartość zmiennej A.
    Program działa, zmienna się zwiększa ale wyświetlacz jakoś dziwnie mruga.
    Gdy procedurę wyjmę z pętli to jest dobrze z wyświetlaczem, ale za to zmienną A zlicza tylko od zera do jednego.

    Co jest źle napisane?

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 34  
    Co jest źle napisane? CLS!!!

    Nie kasuj wyświetlacza tylko nadpisuj.

    Użyj Locate y, x lub podobnych instrukcji.
  • Poziom 13  
    Dzięki, wyświetlacz już nie mruga, ale za to koło zmiennej na wyświetlaczu pojawiają się taki białe prostokąty.
    Co zrobić aby ich nie było?

    Dodano po 2 [minuty]:

    Ok, niema już problemu z niczym.
    Dzięki za pomoc.

    Dodano po 20 [minuty]:

    Jednak jeszcze jest jeden problem.
    Gdy zwiększam zmienną A to ma być ona zliczona do 24.
    Jeżeli wartość jest większa niż 24 to ma być zero.
    Ok, to działa.
    Ale gdy chcę zmniejszać zmienną A i gdy ona dojdzie do zera to ma się na tym zerze zatrzymać.
    A tu jest problem bo ona gdy dojdzie już do zera zaczyna zliczać 95, 93... itd.
    Co zrobić aby tak nie zliczała?

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 34  
    Trzeba dopisać warunek co ma uC zrobić jak zmienna osiągnie "0".

    Mikroprocesorowi musisz wskazać jak się ma zachować w każdej z możliwych sytuacji bo on niestety nie chce myśleć za Ciebie.
  • Pomocny post
    Użytkownik usunął konto  
  • Poziom 13  
    Działa, ale tematu jeszcze nie zamykam bo może będę miał jeszcze jakiś problem.
  • Poziom 13  
    Witam ponownie,

    Może mi ktoś poweidzieć co jest źle, bo mryga mi cały czas napis z tej linijki:
    Lcd "0" ; Chr(1) ; "C 10" ; Chr(1) ; "C 20" ; Chr(1) ; "C 30".
    Jeżeli nikt nie będzie wiedział o co chodzi w tym programie to jutro dodam filmik z tego programu.

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod

    Pozdrawiam
    Mateusz.
  • Poziom 37  
    mateusz19955 napisał:
    Witam ponownie,

    Może mi ktoś poweidzieć co jest źle, bo mryga mi cały czas napis z tej linijki:
    Lcd "0" ; Chr(1) ; "C 10" ; Chr(1) ; "C 20" ; Chr(1) ; "C 30".


    Chodzi tu zapewne o graficzne przedstawienie na alfanumerycznym LCD wartości "Wart_temp" (temperatura(?)
    Pomysł nie jest wcale zły, ale gorzej z jego realizacją.
    Ogólnie brak jest poprawnej synchronizacji położenia suwaka z legendą przedstawioną w linii drugiej. Pomijam tu ujemne wartości opisu legendy (brak liniowości).
    W pierwszej części programu masz warunek:
    If Wart_temp >= 0 then..........

    natomiast druga częśc zawiera:
    If Wart_temp > 30 Then..........
    który praktycznie jest spełniony również w warunku poprzednim, dlatego te wyswietlenia są pomieszane ze sobą.
    Spróbuj zmienic pierwszy warunek na:

    If Wart_temp >= 0 And Wart_temp < 30 Then
    a drugi na:

    Elseif Wart_temp > 30 Then

    Dobrym przykładem do przestudiowania może byc program na ADC ze strony:
    http://www.avrprojects.net/attachments/ad_convertor.bas

    e marcus
  • Poziom 13  
    Mam jeszcze problem z multipleksowaniem wyświetlaczy 7-seg.
    Napisałem sobie taki program żeby co sekundę zwiększała mi się wartość zmiennej "wysw" i zmienna ta zwiększa swoją wartość.
    Tylko jest taki problem, że wyświetlacze zachowują się dziwnie.
    Wyświetlacz jedności działa normalnie a wyświetlacz dziesiątek strasznie słabo świeci (praktycznie wcale go nie widać). Cyferki zmieniają się na nim ale do tego, że słabo bardzo świeci to jeszcze mruga jak na wyświetlaczu jedności zmienia się cyfra.
    Co może być źle napisane?

    Oto kod:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod
  • Poziom 37  
    Witam !
    Jak usuniesz te linie:
    Incr Wysw
    Wait 1
    Gosub Wyswietlanie
    czy wyświetlanie jest poprawne (00) ?, zera nie pulsują ?
    Zastanów się nad "wait 1" czy to zamienić ?
    Pozdrawiam. Stefan
  • Poziom 13  
    Jak to usunę to jest tak samo.
  • Poziom 37  
    mateusz19955 napisał:
    Jak to usunę to jest tak samo.

    zamiast wait 1 sec;
    W przerwaniu od timera0 icrementuj zmienną np "S" i gdy ona osiągnie S=250 postaw flagę Fsec, wyzeruj zmienną S.
    W do....Loop
    If Fsec =1 , wyzeruj tą flagę i incrementuj 'Wysw'.
    Dalej, przenieś wszystkie rachunki i 'lookups' do petli głównej pozostawiając w subrytynie 'wyswietlanie' tylko multiplexing z porawnie kluczowanymi wyjściami B0 i B1. W obecnym programie masz momenty że ta sama data jest podawana na obie cyfry równocześnie, co właśnie jest przyczyną błędów.

    e marcus
  • Poziom 13  
    Witam,

    Chciałem sobie napisać program do obsługi PCF8583 i DS18B20.
    Popróbowałem trochę i wyszło mi coś takiego:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Termometr DS18B20 działa ale PCF8583 nie mogę sprawdzić bo jeszcze go nie kupiłem.
    Może mi ktoś sprawdzić czy ten kod jest poprawnie napisany?
    Oczywiście nie chodzi mi o to aby ktoś specjalnie programował procesor tylko o to aby przeczytał ten kod i powiedział czy jest dobrze napisany, a jeżeli nie to powiedzieć dlaczego.
    BASCOM kompiluje go bez żadnych błędów.

    Pozdrawiam.
  • Poziom 37  
    mateusz19955 napisał:
    Witam,

    Chciałem sobie napisać program do obsługi PCF8583 i DS18B20.
    Popróbowałem trochę i wyszło mi coś takiego:

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod



    Może mi ktoś sprawdzić czy ten kod jest poprawnie napisany?
    Oczywiście nie chodzi mi o to aby ktoś specjalnie programował procesor tylko o to aby przeczytał ten kod i powiedział czy jest dobrze napisany, a jeżeli nie to powiedzieć dlaczego.
    BASCOM kompiluje go bez żadnych błędów.

    Pozdrawiam.

    Kod nie jest poprawny.
    Z listingu powyżej pozostawiłem tylko znaczące tytuły do których odnosi się moja opinia.
    Masz tam kilka "SUB" i subrytyn (labels) do których nie ma w programie odwołań, inaczej mówiąc nie są one w żaden sposób uruchamiane. Bascom je pomija tak samo jak 'rem' i dlatego nie zwraca 'errors' przy kompilowaniu.
    Jedyne wywołanie ostatniej label 'wyswietlanie' masz wykorzystane przy wyświetleniu temperatury, ale już nie nastąpi wywołanie z sub odczyt bo nawet tam nie masz wejścia./

    e marcus
  • Poziom 13  
    Kolego emarcus, mógłbyś mi ten kod doprowadzić do poprawnej postaci i wystawić tu na elektrodzie?
    Przeanalizował bym sobie swoje błędy i później może bym ich nie popełniał przy pisaniu następnych programów.
  • Poziom 37  
    mateusz19955 napisał:
    Kolego emarcus, mugłbyś mi ten kod doprowadzić do poprawnej postaci i wystawić tu na elektrodzie?


    Nie ma takiej potrzeby...
    Ten przykad (zasadnicza częśc, z którą masz problem), masz gotowy na twoim komputerze...... (o czym pewnie nie wiesz).
    Poszukaj, (jeżeli Win7) :
    C:\Program Files (x86)\MCS Electronics\BASCOM-AVR\SAMPLES\I2C\clock.bas
    albo
    C:\users\.........\Documents\MCS Electronics\BASCOM-AVR\Samples\I2C\clock.bas

    e marcus
  • Poziom 13  
    Witam,

    A czy ten kod jest poprawnie napisany?

    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Jeżeli nie to niech ktoś poprawi, bo ja nie wiem co tu jeszcze poprawiać.
    Kod działa, zajmuje 2,5kB pamięci.

    Pozdrawiam.