No, a nebylo to ono . Koupil jsem 9 krystalů (ať mám z čeho vybírat a výsledek je stejný. Vl.
Divné. Mě to udělá tak půl vteřiny za měsíc. Možná, že máš vadný kousek, ale to je nepravděpodobné. Jak jsem psal, měl jsem problémy jedině z důvodu blbě umístěného krystalu. A jakejkoliv zásah ke krystalu jako přidání kondiků nebo odporu způsobí zástavu.
A tobě se zastavý ty vteřiny a ostatní registry jdou? Jako minuty jdou dál? Pokud jdou a vteřiny ne, tak nebude chyba v DS1302.
Ne, je to jinak - už jsem to tu popisoval. Pokud běží program a je připojeno hlavní napájení , je vše OK. Jakmile vypnu hlavní napájení a nechám to pár sekund na záložní baterce, rozjedou se při obnovení napájení sekundy. Ale teď mne napadla ještě jedna věc: Já to prozatím emuluji přes MPLAB ICD2 a PICDEM 2 Plus. RTC tam mám nabastlený na volném kontaktním poli. Když odpojuji to hlavní napájení, tak vlastně odpojuji celou desku, i s procesorem. Zkusím to ještě tak, že vše nechám běžet a odpojím jen napájení RTC. Pak ho znovu připojím a uvidím, zda je to způsobeno opravdu odpojením napájení od RTC nebo něčím, co souvisí s odpojením řídící desky, procesoru, zástavou běhu řídícího programu atd. Zkusím to takto eliminovat a uvidím. Možná mám nakonec chybu v programu … . Vl.
Odděl si napájení DS1302 diodou od všeho ostatního, aby při připojení a vypnutí napájení nedocházelo k rušení. A dal bych k němu i kondik apoň 100u, aby vyrovnal ty napětové nárazy.
Diodu už tam mám, kondík mám zatím jen blokovací 100nF. Zkusím i ten ellyt. Honzo, můžeš mi říci, zda před každým přenosem dat nuluješ Write Protect bit a po ukončení přenosu jej opět nastavuješ? Je to nutno dělat? Vl.
S Write Protect bit nedělám nic. Akorát při inicializaci. Pak jen volám SET_TIME a GET_TIME. Podprogram PROTECT_BIT_CLR nepoužívám vůbec.
Hm… Ptal jsem se hlavně proto, že už jsem “v zoufalství” uvažoval nad tím, zda se do registrů nemůže něco náhodně zapsat v okamžiku, kdy padá hlavní napájení a v tu chvíli i “havaruje” program. Proto (pro jistotu) po každém přístupu do RTC, WP bit nastavuji a bláhově jsem si myslel, že to pomůže. Nepomohlo . Ještě zítra zkontroluji program, jestli v něm nemám nějaký bug. Zdá se mi totiž, že k tomu přepisu sekund dochází ne po odpojoení hlavního Vcc, ale po jeho obnovení. Dnes odpoledne jsem odpojil krystal a zkoušel jsem bez běžících hodin jen zapisovat do registrů a číst z nich. Měl jsem dojem, že se mi v určitých okamžicích v reg. sekund něco objevuje, ale už jsem toho měl plné kecky, tak jsem toho nechal (dělám to v práci . Zkusím to pořádně proklepnout zítra s čistou hlavou a dám vědět, pokud na něco přijdu. Zatím díky za pomoc a dobrou noc! Zdraví Vlasťa
Ahoj, tak jsem pokročilo zase trošku dál. A hned zpočátku se musím omluvit, protože chyba je zřejmě někde jinde, než v samotném obvodu a jeho zálohování. Zkusil jsem následující:
- Nechal jsem běžet program, který periodicky vyčítá registry RTC a zobrazuje na displeji a několikrát jsem odpojil a připojil VCC2 DS1302 (jen tento samotný pin). Bez problémů.
- Několikrát po sobě jsem zastavil a znovu spustil program (MPLAB + ICD2) a to z téhož místa, kde byl program zastaven (jen HALT a RUN). Bez problémů, hodiny vždy zobrazily správně updatovaný čas.
- Několikrát po sobě jsem zastavil a znovu spustil program, ale včetně jeho resetu - tedy za situace, kdy by došlo ke skutečnému výpadku napájení řídícího mikrořadiče. V tu chvíli sekundy zobrazily nesprávný údaj.
Takže mi z toho vychází chyba v mém programu, která způsobí buďto vynulování nebo přepsání registru sekund v RTC v okamžiku restartu programu. Což je pro mne ten lepší výsledek, protože chyba se najde … . Jen mne mrzí, že jsi musel kvůli tomu sundávat hodiny a “šachovat” s krystalem . Takže sorry a díky za pomoc!
Zdraví Vlasťa
Aspoň máš 9 krystalů A že jsem je sundal, nebylo na škodu, dodělal jsem aspoň dodělávky.
Ahoj, jen pro pořádek, abys věděl, čím to bylo. Pochopitelně chybou v programu (jak už jsem v závěru začínal tušit). Díky chybně použité instrukci přenosu jsem v inicializaci přepisoval “natvrdo” registr sekund nějakým nesmyslem. Teď se zdá, že to běží spolehlivě, jen přesnost by mohla být trošku lepší. Zpožďuje se to asi o 2s za den. Možná to bude tím, že je tam 12pF krystal (výrobce doporučuje 6pF). Zkusím tam dát do série 12 pF kondík, třeba oscilátor nevypadne . Vl.
A že máš chybu v programu jsem tušil od začátku.
U DS1302 není žádnej kondik u krystalu! Těch 6pF je kapacita krystalu, ne kapacita kondenzátoru. Bez kondiku to jde v poho, cca 1 vteřinu za měsíc.
Jasně, špatně jsm se vyjádřil, sorry …
Jde o tzv. Load Capacitance krystalu. Uvidím, co to bude dělat, až to hodím na konečnou DPS. V katalogovém listu výrobce klade velký důraz na správné umístění krystalu a jeho stínění. Taky mohu zkusit změřit, jak se liší kmitočty různých krystalů, když jich mám teď 9 ks ). Zkusím zapojit nějaký jednoduchý oscilátor z hradel a uvidím.
Vl.