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

PCF8583 - Czy zegar automatycznie zmienia czas letni na zimowy?

xamrex 12 Lut 2012 13:09 3705 15
  • #1 10533491
    xamrex
    Poziom 28  
    Witam,
    Czy zegar PCF8583 sam przestawia się z czasu letniego na zimowy?
    Wiem, że nie ma problemu z rokiem przestępnym, ale co ze zmianą czasu o 1 godzinę?
  • #3 10533653
    xamrex
    Poziom 28  
    A w ogóle są jakieś RTC, które to potrafią ?
  • #4 10533665
    mirekk36
    Poziom 42  
    No a z rokiem przestępnym to wcale nie powiedziałbym "że nie ma takiego problemu" ;) na jakiej podstawie tak sądzisz, że to niewielki problem - to też trzeba sobie programowo przeliczać.

    Dodano po 35 [sekundy]:

    xamrex napisał:
    A w ogóle są jakieś RTC, które to potrafią ?


    Tak są chyba Dallasa/Maxima - trzeba w notach poszperać ale na pewno są - teraz niestety nie pamiętam które.
  • #5 10534095
    Wojtek75
    Poziom 24  
    Szukaj pod hasłem "RTC daylight saving time"
    Sprawa nie jest do końca taka prosta z wbudowaniem takiej funkcji w układ scalony ponieważ zmiana czasu z zimowego na letni w różnych krajach odbywa się na różnych zasadach. Wiele krajów co roku zmienia przepisy dotyczące zmiany czasu zimowy <-> letni. U nas akurat sytuacja na razie jest dość jasna co wcale nie oznacza że w przyszłości nie ulegnie zmianie.
  • #6 10595044
    WOBI
    Poziom 19  
    Ja w Bascomie ułożyłem taka procedurę która działa.

    Kod: text
    Zaloguj się, aby zobaczyć kod
  • #7 10649438
    coolrob
    Poziom 15  
    To jeszcze ja dorzucę od siebie procedurkę w C, napisaną w postaci jednej instrukcji warunkowej:

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


    Warunek przetestowany w następującej pętli, która symuluje przebieg wszystkich godzin i dat w całym roku:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #8 13392959
    gpi_unit
    Poziom 12  
    Witam,

    Wiem, że odkopuje stary temat, ale mam problem z warunkiem dodawania oraz odejmowania godziny na przejściu czas zimowy -> letni i na odwrót. W moim programie przy zmianie czasu z letniego na zimowy uzyskuje zapętlenie non stop odejmuje oraz dodaje godzinę. Jest to związane z tym, że zmiana czasu następuje o godz. 3.00 następuje zmiana czasu więc odejmuje godzinę, ale po godzinie znowu dochodzi do godz. 3.00 i znowu próbuje odejmować godzine i tak w kółko. Próbowałem już dodawać zmienne, które niby miały blokować te zdarzenia, ale jakoś nie chcą działać.

    Zapisując w pseudokodzie początkowo program wygląda tak
    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    Przy takim programie problem jest również z nastawą czasu, bo program próbuje od razu dodać godzinę lub ją odjąć. Ustawiając godz 00:00 program z automatu doda +1 lub -1.

    Może już ktoś z Was rozwiązał taki problem...

    Pozdrawiam
  • #9 13394118
    Konto nie istnieje
    Poziom 1  
  • #10 13396812
    gpi_unit
    Poziom 12  
    Próbowałem dołączyć flagę, ale zazębia mi się to między wspomnianymi wcześniej warunkami raz wchodzi w jeden warunek a raz w drugi bo jak cofnę o godzinę (przejście z letniego na zimowy) to program twierdzi, że nadal jest czas letni (w sumie ma rację) ale przechodząc drugi raz nie powinien odejmować tej godziny

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
  • #11 13397048
    mi14chal
    Poziom 28  
    Nie wiem co robisz ze zmienną dst1. Ale można zrobić coś takiego ten pcf ma opcję alarmu, więc możesz zrobić tak, że szukasz daty kiedy następuje zmiana czasu i jak nadejdzie ta data to pcf generuje przerwanie, które obsługujesz w atmedze i zmieniasz godzinę w przód albo w tył potem szukasz kolejnej daty kiedy następuje zmiana czasu i zapisujesz to w pcf i potem już wiadomo co dalej.
  • #12 13397187
    gpi_unit
    Poziom 12  
    Nie wiedziałem, że to będzie aż tak kosztowna zmiana w kodzie. Do zmienna dst1 przypisuje wynik obliczeń czy aktualna data i czas są w dst czy też nie. Wspomniane sprawdzenie odbywa się w każdej iteracji pętli.
    Nie da się jakoś bez tego alarmu tego zrobić?
  • #13 13397464
    mi14chal
    Poziom 28  
    Można wystarczy do ifa dodać jeszcze sprawdzanie miesiąca. Bo nie wiem co reszta kodu tam u Ciebie robi a w if sprawdzasz tylko czas, więc jak dodasz jeszcze sprawdzanie miesiącu powinno być. Po za tym w twoim kodzie nic nie wiadomo a już w szczególności to, że przy obu if jest komentarz: "Jest czas zimowy"...
  • #14 13397765
    gpi_unit
    Poziom 12  
    Super chyba o to chodziło. Brakowało sprawdzenia miesiąca.

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


    Pytanie czy dla takiego kodu zmiana czasu i daty (ale taka przez użytkownika) nie spowoduje błędów przy algorytmie DST... ale z moich testów wynika, że nie, ale głowy nie daje.

    P.S. We wcześniejszym kodzie faktycznie na UART wysyłałem ten sam komunikat, który mógł wprowadzać w błąd za co przepraszam.
  • #15 13397954
    Konto nie istnieje
    Poziom 1  
  • #16 13398851
    gpi_unit
    Poziom 12  
    Dodałem dwie dodatkowe zmienne:
    dst1 - zwraca czy dla aktualnego czasu i daty jest w zakresie dst czy też nie
    dst_ok - czy już zmieniono godzinę (+/-)

    Bez zmiennej dst_ok to by się zapętliło chyba...
REKLAMA