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

Atmega16 - Sterownik włącznika czasowego nie włącza się ponownie o 20:00

axel223 30 Mar 2015 18:38 1179 8
  • #1 14574779
    axel223
    Poziom 9  
    Witam. Mam taki problem iż gdy ustawiam czas załączania np: 20:00 i czas wyłączania np: 20:15. To się włącza o 20:00 i wyłącza o 20:15 a następnie nie chce się ponownie włączyć o godzinie 20:00. W czym może być problem?

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


    Kod wywołania funkcji
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    [/spoiler]
  • #2 14575005
    gaskoin
    Poziom 38  
    Sformatuj kod i ponazywaj jakoś po ludzku te zmienne, tak, żeby dało się go przeczytać.
  • #3 14575191
    axel223
    Poziom 9  
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #4 14575435
    BlueDraco
    Specjalista - Mikrokontrolery
    Problem leży zapewne w kodzie, którego nie pokazałeś. Nie rozumiem też, czemy ma służyć ten warunek:
    if(Zalacz->godziny>Wylacz->godziny)
  • #5 14575504
    axel223
    Poziom 9  
    warunek if(Zalacz->godziny>Wylacz->godziny) miał służyć temu żeby jeżeli jest spełniony to miał przechodzić dalej czyli wyłączać leda tak znalazłem gdzieś na forum ale nie działa

    reszta kodu to jest tylko odczyt z zegara ds1307 po i2c ustawianie godziny/daty
    i wywoływanie tej funkcji załączania oświetlenia

    chyba ze ktoś ma inny pomysł lub koncepcję jak to zrobić by działało tak ze załącza się led o godzinie np 20:00 a wyłącza się o godzinie 20:10 i tak w kółko
  • #6 14575525
    QuadMan
    Poziom 14  
    Witam,

    Kolega BlueDraco mnie ubiegł :-). Domyślam się, że ten warunek, o który On zapytał, miał być próbą zapanowania nad tym, że po godzinie 23:59 jest godzina 0:00. Ale mówię Ci nie idź tą drogą ;-).

    Zrób po prostu tak:
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    a jeśli chodzi o ten problem, który chciałeś rozwiązać, to ja zrobiłbym po prostu dodatkową funkcję inicjalizacji tego timera, wywoływaną tylko po restarcie urządzenia i jednorazowo określałbym, w jakim stanie powinno być wyjście w zależności ot tego jak są ustawione czasy załączania i wyłączania. Inna rzecz, że ja odpuściłbym sobie też sekundy i sprawdzałbym jedynie pełne minuty, a i tą funkcję wlacz_osw wywoływałbym jedynie raz na minutę.

    Dopisane:

    Spróbowałem napisać tą funkcję, która ustawiałaby ten timer po restarcie urządzenia, nie testowałem, wydaje mi się ok ( choć jak znam życie, to jednak gdzieś się "walnęłem"). Poza tym, tak teraz patrzę, że ona w sumie powinna działać ok też zamiast tej funkcji wlacz_osw, bo dlaczego niby nie. Oto ona :
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    P.S. Panowie, jak to sformatować, by dało się czytać ??? Przekleiłem z eclipse, tam było dobrze, a tu... tragedia :-(.

    Pozdrawiam, QuadMan.
  • #7 14576736
    axel223
    Poziom 9  
    ten kod działać działa ale nie do końca tak jak bym chciał
    działa jak ustawie godzinę na 10:00 godzinę załączania na 9:01 a godzinę wyłączania na godzinę 10:01 to od godziny 9:01 do 10:01 jest załączona a od 10:01 do 9:01 jest wyłączona ale jak dam godzinę załączania na 10:01 a godzinę wyłączania na godzinę 9:01 to dioda jest cały czas załączona dopiero jak 2 raz przejdzie przez godzinę 9:01 to się wyłącza

    program główny
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    defnicję
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #8 14576856
    QuadMan
    Poziom 14  
    Witam,

    Nie miałem czasu przetestować tej funkcji. Nie wiem, czy dobrze zrozumiałem:

    - jeśli godzina załączenia jest np. 9:01, a godzina wyłączenia 10:01, to działa dobrze, tzn. dioda jest załączona od 9:01 do 10:01.

    - jeśli godzina załączenia jest np. 10:01 a godzina wyłączenia 9:01 to .... Tu nie rozumiem, czy :

    a) dioda załącza się o godzinie 10:01 i jest cały czas załączona aż do godziny 9:01 - według mnie ok,

    b) dioda jest cały czas załączona - czyli jest np. godzina 9:59, uruchamiasz urządzenie, dioda się załącza, mija 10:01, jest załączona dalej aż do godziny 9:01 - jeśli tak to źle .

    Napisz proszę, z którym przypadkiem mamy do czynienia.

    Pozdrawiam, QuadMan.
  • #9 14577148
    axel223
    Poziom 9  
    chodzi o to że mam ustawiony czas załączania na godzinę 10:05 a czas wyłączenia na godzinę 9:01 i gdy uruchomię program i jest godzina 10:00 to jest załączony a powinien być wyłączony gdyż od 9:01 do 10:05 ma być wyłączony
REKLAMA