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

DS1307 na ATmega328p nie odmierza czasu

17 Cze 2019 10:02 342 5
  • Poziom 2  
    Witam
    Od jakiegoś czasu próbuję uruchomić pierwszy projekt na mikrokontrolerze ATmega328P. Ma to być zegarek oparty o moduł RTC DS1307. W Internecie znalazłem dość dobrze opisany kod autorstwa Bruce E. Hall, na stronie internetowej W8BH (nie mogę wklejać linków, ale bardzo łatwo go znaleźć w Google), który postanowiłem wykorzystać. Przypisałem wszystkie piny i porty, podłączyłem wszystko według schematu, program kompiluje się bezproblemowo, jednakże po podłączeniu do zasilania przez około minutę wyświetlacz pokazuje:
    Ready.
    Found a0 d0


    po czym wyskakuje wartość
    00:00:80
    01/01/00


    i na tym działanie programu się kończy, zegarek po prostu nie odmierza czasu. Odpowiedzi szukałem zarówno tutaj jak i na wielu innych forach, ale niestety nie znalazłem rozwiązania mojego problemu :( z góry dziękuję za pomoc

    Lekko zmodyfikowany przeze mnie kod:
    Kod: c
    Zaloguj się, aby zobaczyć kod
  • Pomocny post
    Poziom 19  
    Mogę się mylić bo dawno nie używałem DS1307, zamiast niego używam kompatybilny DS2331, niemniej zmierzam do puenty.
    Ten drugi nie rusza dopóki nie ustawisz w nim jakiegoś czasu. Spróbuj, po prostu, użyć tej funkcji SetTimeDate()
    Jeśli nadal nie będzie chciał ruszyć to przyjrzyj się temu rezonatorowi kwarcowemu. W przypadku jego uszkodzenia można się z układem komunikować, ale zegar właśnie stoi. Rezonatorek może mieć zwarte nóżki bądź którąś zwartą np. do masy.
  • Poziom 2  
    Rzeczywiście, wrzucenie funkcji SetTimeDate() do głównej części programu pomogło, dzięki za pomoc :D
  • Poziom 8  
    Witam

    Dołączę się do tematu

    Pobrałem przykładowe kody stąd Link

    Wywołuję funkcję RTC_Clock_Write() i po jednym wysłaniu blokuje się procek (wysyłane są wszystkie dane). Dla testu zakomentowałem wszystkie I2C_Write() i wtedy nie blokuje się. Nie wiem gdzie jest problem

    Kod: c
    Zaloguj się, aby zobaczyć kod

    ATmega32A-AU
    8MHz internal
    SCL PC0
    SCA PC1

    Dodano po 1 [godziny] 13 [minuty]:

    Podobnie jest z kodem, który podał szanowny kolega

    Kod: c
    Zaloguj się, aby zobaczyć kod


    Dobrze odczytuje czas (sprawdziłem analizatorem stanów logicznych) ale tylko raz potem blokuje się
  • Poziom 8  
    Dobra teraz za głośno się nie śmiejcie ale brakowało rezystorów pullup na liniach I2C. Dawno lutowałem i byłem przekonany, że przylutowałem, a jednak ich nie było :D

    Sekundy zlicza 2-3x szybciej czy to wina rezonatora ?