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

Atmega328 / Bascom - Odbór DCF77 i wykrycie poprawnej synchronizacji

08 Paź 2013 20:56 2184 9
  • Poziom 13  
    Witam
    Chciałem zapytać, czy jest możliwość sprawdzenia, czy odbiornik DCF77 odebrał popranie sygnał DCF77 ?

    Występują sporadycznie u mnie takie sytuacje, że w nocy odbiornik DCF77 nie złapie sygnału i ponieważ mam na sztywno ustawioną aktualizacje, do PCF8563 zapisuje wartości Bhour, Bmin, Bsec, które niestety nieco się "rozbiegły" ( przeważnie minuty są opóźnione o kilkanaście od tych aktualnie pobieranych z PCF ) od poprzedniej aktualizacji i efekt jest taki, że do PCF8563 jest niewłaściwy czas.

    Konfiguracje DCF77 mam taką:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Chciałem wykorzystać Switchpower, czyli automatyczne wyłączenie po poprawnym odebraniu sygnału DCF, ale to coś nie działa. Może coś w konfiguracji nie tak ?
    Switchpower = 1, czyli ma wyłączyć po odebraniu i zdekodowaniu
    Powerlevel = 0, czyli odbiornik włączany stanem niskim ( jak chyba większość )

    Na razie mam taki pomysł, aby sprawdzać stan pinu sterującego włączaniem odbiorniki DCF, czyli po uruchomieniu odbiornika resetuje się licznik i flagę tego licznika i po przejściu powiedzmy 3,5 minuty sprawdzać, czy odbiornik jest włączony, czy wyłączony. Jeśli wyłączony to można zezwolić na zapis czasu do PCF. Jeśli nie to znaczy, że nie złapał sygnału i program czeka do wystąpienia drugiej flagi, powiedzmy po 6 minutach i wtedy wyłącza odbiornik. Ale do tego jest potrzebne działanie poprawne Switchpower.
  • Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
  • Poziom 9  
    Nie wiem, czy nadal aktualne, ale od tego jest bit DCF_Status.7, który przyjmuje wartość 1 gdy DCF poprawnie odbierze czas. Bit ten możesz, po zsynchronizowaniu czasu, wyzerować. Jego ponowne ustawienie nastąpi, gdy znowu czas zostanie odebrany. Zresztą, to wszystko jest napisane w HELP'ie Bascoma, przy opisie polecenia CONFIG DCF77, polecam poczytać.
  • Relpol przekaźniki nadzorczeRelpol przekaźniki nadzorcze
  • Poziom 11  
    Witam, Jak tam praca z dcf77 i Bascimem?
    Od jakiegoś czasu walczę z tym tematem z w miarę pozytywnym skutkiem, jednak od jakiegoś czasu się trochę wszystko sypie.
    Latem czas łapałem kilkadziesiąt razy na dobę, były godziny z prawie 100% poprawnych synchronizacji. Od jakiegoś czasu max ze dwa-trzy razy na dobę i to głównie w nocy. Często nie uda mi się wogóle złapać czasu przez kilka dni. W domu wszystko wyłączone i bez zmian,
    Może być że sąsiad jakiś używa czegoś co mnie zakłuca? nie wiem - jakiś piec elektryczny czy coś? Mieszkam w środku poznania.
  • Poziom 13  
    Witam
    Po tym jak zacząłem korzystać z zmiennej DCF_Status.7 działa jak trzeba.
    Przedtem nie maiłem problemu z synchronizacją, ale z wyłączeniem odbiornika w przypadku jej braku ( u mnie włączenie odbiornika DCF77 powoduje blokadę wywoływania innych funkcji - wywołanie czujników DS18B20 oraz wysyłanie przez RFM12 blokuje przerwania, a tego nie lubi biblioteka DCF77, bo podczas dekodowania potrzebny jest cały czas Timer ) blokował odczyty i wysyłanie danych.

    Układ działa poprawnie już kilka dni, co prawda dzisiaj się nie synchronizował, ale wczoraj bez problemu.

    Teraz zamówiłem płytkę pod Atmega644 i dołożyłem na niej obsługę modułu GSM SIM900 i zapis na karcie SD. Na razie mam to na osobnej płytce, która odbiera i przetwarza dane z nadajnika i na żądanie otrzymane przez SMS odsyła dane SMS ( rozróżnia 4 numery telefonów ). Dodatkowo można sterować czterema wyjściami lub np. kartą przekaźników podpiętą przez I2C.
  • Poziom 11  
    A udało Ci się wydobyć dzień tygodnia z dcf? Wiem że w samym kodzie jest nadawany numer dniatygodnia w trzech butach, ale nie mam pomysłu je wydobyć a help milczy na ten temat.
  • Poziom 13  
    Dzień tygodnia bez problemu, nawet informacje, czy czas jest letni, czy zimowy.

    Jeśli na początku na początku podpiąłeś $lib "dcf77.lbx" to zostały zdefiniowane zmienne

    to w Sectic daje
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Zapis czasu robię tak:
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Trzeba pamiętać o różnicach pomiędzy sposobem zapisu dnia tygodnia w DCF77 i PCF8563 ( PCF8583 )
  • Poziom 11  
    Witam, Dzięki za odp,
    Wpadłem na coś jeszcze innego, myślę ze jeszcze prostszego.
    Nie deklaruję na początku programu $lib "dcf77.lbx", bo po config dcf77 dodawane jest przez kompilator z automatu. potrzebne zmienne też.
    Ja nie obliczam tak jak Ty w settic nic. Używam gotowych zmiennych _hour _min _sec _day _month _year. Widzę że jest tworzona również zmienna _weekday więc powino działać bez obliczania. Jutro "złapię" świeży czas i napiszę zy sposób działa. myślę że będzie ok.

    Jak dobrze cię zrozumiałem, to różnice w dcf i pcf są tylko w niedzieli?? reszta dni tak samo?
    nie do końca rozumien zapis:
    If Bweekday = 6 Then
    Wk = 0
    Else
    Wk = Bweekday + 1
    End If
    nie powinno być
    If Bweek = 7 Then
    Wk=0
    Else
    Wk = Bweekday
    end if

    Rozjaśnisz mi trochę??
  • Poziom 13  
    mitsubishit napisał:


    Jak dobrze cię zrozumiałem, to różnice w dcf i pcf są tylko w niedzieli?? reszta dni tak samo?
    nie do końca rozumien zapis:
    If Bweekday = 6 Then
    Wk = 0
    Else
    Wk = Bweekday + 1
    End If
    nie powinno być
    If Bweek = 7 Then
    Wk=0
    Else
    Wk = Bweekday
    end if

    Rozjaśnisz mi trochę??


    Na początku wzorowałem się na Wikipedii
    bity 42-44 (w kolejności bity 44,43,42) dni tygodnia w BCD (1 = poniedziałek; 7 = niedziela)
    ale też coś nie grało, tzn niedziela DCF77 powinna być 7, więc dałem warunek, że
    Kod: basic4gl
    Zaloguj się, aby zobaczyć kod


    Więc doszedłem do tego, że:

























    dzień DCF77PCF8563
    poniedziałek01
    wtorek12
    środa23
    czwartek34
    piątek45
    sobota56
    niedziela60


    i to działa
  • Poziom 11  
    Ciekawe jest to co piszesz, ale jeżeli jest tak jak piszesz że teraz działa, to uważam że działał będzie nawet jak przyjmiesz dowolne założenie,byle pilnować żeby dni szły po kolei i już. Pcf ma zwyczajny licznik na trzech bitach 000-110 i sobie liczy od zera do sześciu. Myślę że pcf nie jest świadomy jaki ma tak dzień. Po prostu sobie liczy. Jak przyjmiesz że poniedziałek to 4 wtorek 5 itd, też powinno chodzić. Ważne żeby pilnować kolejności i odpowiednio przeliczać. Więc bardziej do mnie przemawia wersja PON do SOB idzie równo, a niedziela jest inaczej. Ale w takim razie twoje założenie też będzie działać.
  • Poziom 13  
    Starałem się trzymać jednego "standardu". W odbiornikach też mam PCF8563 i wszędzie używam tego zapisu. Dodatkowo, zaraz po odebraniu i zdekodowaniu sygnału DCF77 ustawiam flagę i wszystkie odbiorniki wtedy jednorazowo aktualizują czas.

    Jak ktoś z tym zaczyna, to nie należy się denerwować, jeśli nie odbiera. Najlepszy odbiór jest 1-5 w nocy, czasem udaje się koło 23. No i wtedy nie blokować przerwań, bo nawet jak złapie sygnał to go nigdy nie zdekoduje. Jest to uciążliwe w przypadku, gdy jest odczyt z czujników DS18B20. Próbowałem blokować tylko INT0, INT1, INT2, ale wtedy nie odczytywał danych z czujników.

    W nowej płytce nadajnika RFM12 daję jeszcze zapis na SD, bo przekonałem się, że akwizycja danych w odbiorniku to nieporozumienie. Może się zdarzyć sytuacja, że podczas zapisu nadejdzie paczka danych z RFM12 i wtedy blokuje przerwania i timery, a Timer jest potrzebny do obsługi karty SD. No i efekt mam taki, że co paręnaście dni znikają pliki z karty, albo znikają katalogi.