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

bascom, atmega - funkcja start/stop, zliczanie sekund/minut

paluch_gda 04 Lut 2013 15:06 2661 8
REKLAMA
  • #1 11886973
    paluch_gda
    Poziom 16  
    Witam, popełniłem takowy program do sterowania ogrzewaniem i zapętliłem się nieco na funkcji start/stop odliczania pozostałego czasu do wyłączenia urządzenia. Poniżej fragment kodu:

    Kod: text
    Zaloguj się, aby zobaczyć kod


    Ogólnie rzecz biorąc działa, ale nie mogę zaimplementować zatrzymania/uruchomienia odliczania w podprogramie Zegar: - jakaś pomroczność jasna :) oraz jak zrobić aby np po ustawieniu Ustawczas ponad 60 sekund pokazywał mi 1min i cośtam sekund i pokazywał to odpowiednio na lcd.
    Właśnie podczas pisania wpadłem na to że gdy Jakiczas jest > 60 then Minuty +1 - to chyba to? Ale jak to odliczyć w dół?
  • REKLAMA
  • #2 11890881
    tehaceole

    Poziom 28  
    Kod w C, ale powinieneś łatwo dojść co i jak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod

    Kod dla 8 niezależnych liczników zliczających w dół. Każdy z liczników można aktywować ustawiając odpowiedni bit w zmiennej zezwolNaOdliczanie. Status licznika zapisany jest pod odpowiednim bitem w zmiennej trwaOdliczanie. Dzięki użyciu tablic można w łatwy sposób "przemiatać" wyświetlanie wartości na LCD.
  • REKLAMA
  • #3 11890937
    paluch_gda
    Poziom 16  
    Popełniłem coś takiego, nie wiem czy w 100% poprawnie ale działa :)

    Kod: text
    Zaloguj się, aby zobaczyć kod


    ale mam jeszcze problem z nastawianiem odpowiedniego czasu w dół. Zakręciłem się w warunkach i schodzi mi poniżej czasu 00:00 o 10 sekund

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #4 11891294
    tehaceole

    Poziom 28  
    Nastawianie najprościej jest zrealizować przy pomocy dodatkowej zmiennej (o odpowiednim zakresie) i zmieniać ilość sekund:

    czas=minuty*60+sekundy

    czas++ lub czas--

    minuty=czas AND 60
    sekundy=czas MODULO 60

    Powyższa "kombinacja" wydaje się zasobożerna dla AVRka, ale przecież nie będzie ona wywoływana non stop, a jedynie w momencie naciśnięcia klawisza in/dekrementacji. Tylko trzeba sobie to wszystko policzyć, żeby nie "przekręcić" tej dodatkowej zmiennej.

    ps. Przepraszam za ten "pseudokod", ale nie znam składni bascoma, chodziło mi o pokazanie możliwej do użycia zasady.
  • REKLAMA
  • #5 11899533
    Konto nie istnieje
    Poziom 1  
  • REKLAMA
  • #6 11899570
    tehaceole

    Poziom 28  
    Dokładnie tak jak pisze Kolega emarcus. W moim przykładzie w programie operujemy na zmiennych minuty, sekundy. Ale do programowania czasu konwertujemy i tak wszystko do sekund.

    W ogólności można zrobić odwrotnie, tj. używać tylko zmiennej wyrażonej w sekundach i np. co sekundę konwertować tę wartość na wartość minut i sekund w celu ich wyświetlenia, przesłania itp. Wszystko zasadniczo sprowadza się do tego jak duży zakres czasu nas interesuje i jakich zmiennych chcemy użyć (8, 16, 32 bit). Zatem musimy to dobrać dla konkretnego przypadku.
    Osobiście preferuję metodę sprawdzenia założeń co do zmiennych przy pomocy arkusza kalkulacyjnego. W kilka chwil można w ten sposób sprawdzić, czy przyjęta koncepcja nie spowoduje np. wyjścia zmiennych poza zakres (np. wpisanie 65536 do zmiennej 16 bit). Dopiero wtedy biorę się za "kodzenie".
    Dzięki takiemu podejściu zrealizowałem ostatnio wielokanałowy timer zliczający w dół w którym podstawą czasu była 1 minuta, ale dokładność odmierzania była 1 sekundą.
  • #7 11912906
    paluch_gda
    Poziom 16  
    Już jest prawie ok, ale za nic nie mogę dojść dlaczego programik kol. emarcus błędnie pokazuje sekundy powyżej czasu 4min15sek czyli 255 sek. Zmienna tp jest word więc nie wychodzi z zakresu. Dzielenie mod też jest raczej ok. A poza tym jak zjadę poniżej 0sek. to pokazuje zawsze końcówkę 28 sek. Czas skróciłem do 10min w ustawieniach
  • #8 11912972
    Konto nie istnieje
    Poziom 1  
  • #9 11913157
    paluch_gda
    Poziom 16  
    Czyli jednak typ zmiennej :) Nie sądziłem że Ts będzie musiało być Word. Tak na zdrowy rozum to zakres nigdy nie wyjdzie poza 0-59 :). Dzięki wielkie. Przykład z góry, nie testowany, ale bardzo pomocny zwłaszcza z tym zapisem do pamięci. Jeżeli chodzi o warunki to już go tam sobie odpowiednio okroję :) Dzięki jeszcze raz, testy wieczorem a teraz jadę cekolować ściany :)
REKLAMA