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

DS1302 i ATmega128: brak 4 godzin w trybie 24h i problem z trybem AM/PM - poszukiwanie rozwiązania

prociomen007 22 Sty 2023 16:50 345 1
REKLAMA
  • #1 20399354
    prociomen007
    Poziom 18  
    Próbuje skomunikować się z modułem DS1302. Korzystam do tego celu z biblioteki:

    https://github.com/naquad/AVR-DS1302

    niby sprawdzone niby wszystko powinno hulać a a trybie 24 godinnym zegar o 20.00 przechodzi na godzine 00.00 i zaczyna liczyć od początku. Czyli nie ma jakby 4 godzin.
    W trybie AM PM. Po przełączeniu na AM nie mogę zmienić godziny zawsze wskakuje mi 12. część PM działa prawidłowo.

    Najlepiej by mi pasował tryb 24 godziny ale nie rozumiem co się dzieje z 4 godzinami. Czy ktoś może coś podpowiedzieć. Całość skopiowana identycznie jak w repozytorium a mimo to nie działa.

    Ewentualnie może ktoś ma jakąś sprawdzoną bibliotekę do tego zegara działającą pod atemga 128. ?
  • REKLAMA
  • #2 20399459
    Sam Sung
    Poziom 33  
    Przeglądnąłem kod pod podanym linkiem i wydaje mi się, że on nie ma szans poprawnie przeliczyć godziny w trybie 24-godzinnym...
    Na wartości z rejestru godzin (#define RTC2_HOURS_READ 0x85) robione jest coś takiego:
    Cytat:

    #define RTC2_FORMAT_PM 0xA0

    // hours format is passed along with the hour itself
    val = (val & RTC2_FORMAT_PM) | ((val & 0x0F) + ((val & 0x10) >> 4) * 10);
    // hours format is passed along with the hour itself
    ptr->format = val & RTC2_FORMAT_PM;
    ptr->hours = val & ~RTC2_FORMAT_PM;

    O ile dobrze rozumiem, to z tego może wyjść co najwyżej godzina 19 w polu hours, a o 20 będzie tam znowu 0, za to w polu format będzie wtedy 1.
    W trybie 24-godzinnym ten bit (tj.#5) powinien być brany pod uwagę przy obliczaniu godziny, a nie jest.
REKLAMA