SunRiver ma rację w całej rozciągłości ale ja dodam, że:
mam swój stareńki zegarek zrobiony na PCF8583:
http://www.elektroda.pl/rtvforum/viewto ... 4297e52994chodzi już sobie od kilku lat i nie odnotowałem ani jednej zwiechy. Ja w ogóle zawsze powtarzam, że jak ktoś pisze, że układy scalone (nie ważne jakie) mu się zawieszają i są wadliwie zrobione - to warto żeby bardzo dobrze zrewidował swoje podejście do elektroniki. Bo w ten sposób to można o każdym układzie napisać z którym nie potrafimy sobie poradzić. W ogóle próba zrzucania winy na układy zamiast doszukiwania się przyczyn tego dlaczego coś na mnie wychodzi - to niestety ZGROZA

Owszem też uważam, że DS'ki bywają lepsze niż PCFki - ale czy to miałoby oznaczać że dlatego lepsze bo się nie zawieszają - a te drugie zawieszają ? .... tak jak mówi SunRiver szukaj panie kolego rozwiązania problemu a nie staraj się go obchodzić.
Dobra przechodząc do meritum, i uznając że kolega już raz na zawsze pozbędzie się takiego podejścia spróbujmy pomóc w rozwiązaniu problemów. Najpierw może zajmiemy się tym nieszczęsnym zawieszaniem.
Kolega pisze że wgrał program z książki - tzn z książki ? przepisany palcami ? czy ten z płyty DVD ? bo przy przepisywaniu palcami już nie jedna osoba popełniła błędy i doszukiwała się ich w tym że kody z książki są nieteges.
Jeśli zaś kolega wgrał program z DVD to teraz który? ten ze sprzętową obsługą I2C ????? A jeśli ten to czy kolega był łaskaw pobrać aktualizację do tego programu i to z tego forum?
topic27.htmlchodzi właśnie o lekcję ze sprzętowym TWI ponieważ na DVD zabrakło mi jakoś funkcji do ustawiania prędkości magistrali I2C, chodzi o to:
08_TWI - dodano funkcję void i2cSetBitrate(uint16_t bitrateKHz)
poza tym jaką częstotliwością kolega taktuje procka 8MHz ??? bo jeśli akurat taką - to mogło się okazać że nawet bez ustawiania tą funkcją prędkości na 100kHz też będzie wszystko śmigać ale jeśli większą np 11,0592MHz albo jeszcze wyższą taktujesz procka i nie ustawisz i2cSetBitrate na 100kHz to nie dziw się że ci się transmisja zawiesza co jakiś czas - bo to wtedy normalne zjawisko

poza tym - transmisja się zawiesza .... a doczytałeś w książce szczegóły tworzenia biblioteki do obsługi sprzętowej I2C ??? oj chyba nie. A pisałem tam że pokazuję najprostsze przykłady, w których są pętle nieskończone while() i jeśli wystąpi jakiś błąd na magistrali to niestety zakończy się to zawieszeniem dlatego jeśli już to można sobie je dalej przerobić tak żeby brały pod uwagę TimeOuty i się nie zawieszały. Ale jakbym ja je tak przedstawił to rzadko kto z początkujących by zrozumiał o co tu chodzi - tymczasem na takich najprostszych wersjach można się nauczyć szybko podstaw. A jak się ustawi transmisję I2C i prawidłowo zrobi magistralę (podciąganie rezystorami 4,7k do VCC linii SDA i SCL) to nawet na tych zwykłych najprostszych funkcjach nigdy ci się nic nie zawiesi. I ja najczęściej je w takiej postaci używam. A jak padnie magistrala I2C jakoś sprzętowo i to i tak cały układ o naprawy i tak
-------------------------------------------------------
drugi problem - dokładności czasu. Przede wszystkim to fakt - nie porównuj do jakichś takich dziwnych zegarków bo to żaden wzorzec - już lepszy wzorzec możesz sobie na kompie zorganizować odpalając byle co - co będzie ci synchronizować czas kompa przez sieć z wzorcami czasu SNTP
kolejna rzecz - takie układy RTC to żadne atomowe wzorce czasu i to normalne że będą się późnić lub nieco śpieszyć - chociaż byś nie wiem jak chciał. Ale spokojnie - nie muszą to być ogromne różnice - tylko warto zajrzeć do noty PDF takiego układu i zastanowić się np po co tam jest TRYMER panie kochany TRYMER a nie kondensator 22pF jaki ja pokazałem w książce. Bo oczywiście jak się znajdzie ktoś kto potrzebuje atomowego wzorca czasu - to powinien zamiast tego kondka dać właśnie trymerek i mając jakieś przyrządy - wyregulować sobie dokładną częstotliwość - ustawiając na wyjściu RTC programowo nie 1Hz to kalibracji tylko maksymalną - zdaje się coś koło 4kHz .... a potem możesz myśleć o lepszej dokładności, ale też bez przesady - bo jak wyłączysz zasilanie i RTC będzie podtrzymywany z baterii czy kondensatora 1F to już się nieco zmienią warunki i może chodzić szybciej albo wolniej. Podobnie zależy to od temperatury jak i od samego użytego egzemplarza kwarca zegarkowego.
Generalnie to sprawdź sobie czas nie po 1 dobie tylko np po miesiącu a najepiej pół roku. To się zdziwisz bo się okaże że tego typu układy potrafią się czasem lekko przyśpieszać a czasem spowalniać i wtedy średnia odchyłka wcale nie wychodzi taka duża w dłuższym czasie.
eeeeeh generalnie tyle razy już na różnych forach o tym pisałem że już mnie palce bolą - panowie jak chcecie mieć dokładny czas - SUPER dokładny - to się robi po prostu synchronizację. Poczytaj sobie w tym linku co podałem na górze jak ja ją zrobiłem sobie. A można jeszcze lepiej nie przez kompa a od razu dołożyć moduł ethernetowy na ENC28J60 i zrobić przez sieć Ethernet z internetem z jakimś serwerem SNTP i już masz.
a nie tam bawić się w super regulacje układów RTC .... ciekawe czy po roku czasu będziesz wciąż spoglądał i obserwował swój zegarek czy przypadkiem aby nie śpieszy się albo nie późni ileś tam sekund. Dopiero jak się późni albo śpieszy o kilka minut - to wtedy dopiero chce się komuś podejść do zegarka i go nastawiać

to tyle