Fórum témák

» Több friss téma
Fórum
Keresés
Lapozás: OK   7 / 7
(#) gyengus válasza fookos hozzászólására (») Jan 29, 2008
Az init_rc()-ben csak a control regisztert (07H) nullázom.
A CH bitet csak időbeállításkor.
Lehet, hogy nem gondoltam minden eshetőségre, de szerintem ennyi elég. Eddig működni látszik.
Ha hülyeséget ír ki, akkor meg úgyis beállítom.
(#) levy_k hozzászólása Jan 29, 2008
Az aksit (backup-osra gondolok) rákötöd az analóg bemenetre vagy egy interruptos lábra, és figyeled a feszt vagy az interruptot.Amikor megjelenik egy felfutó impulzus (az aksit beteszed az órába) vagy a fesz szintet ellenőrzöd.(ez arra is jó lehet, hogy jelezze az alacsony aksi szintet)
(#) fookos válasza gyengus hozzászólására (») Jan 29, 2008
Bár én asm-ben dolgozom linuxról (gpasm, gplink, gputils, picprog) az init_rtc()-ben kinullázod a teljes másodpercet. Vagyis, ha ezt minden PIC resetnél/bootnál felhívod, akkor eléggé hamar sokat fog késni az órád (pl, ha xx:yy:59-kor 00-t írsz a másodpercek helyébe).

Pont ez a dilemma, ami foglalkoztat. Hogy teljes reset-et csak egyszer kell a DS1307-nek adni, méghozzá legelső alkalommal. Utána már erre nincs szükség. De pontosan honnan tudjam, hogy melyik a legelső alkalom?

Ha a CH-bit 1-ben van, akkor ruti, hogy első bekapcsolás történt. Ilyenkor nyugodtan lehet mindent resetelni.

De ha a CH-bit 0-ban van, akkor fut az óra, és bármilyen értéke lehet. Erre volt a sztringírós javaslatom. Annak az esélye, hogy egy sztring vagy számsor pontosan ugyan úgy megtalálható legyen az óra RAM-jában az eléggé alacsony. Vagyis ha CH=0 és van string, akkor fut az óra. Ha CH=0 de nincs string, akkor teljes resetet kell végrehajtani.

De ez még mindignem 100%-os megoldás, és lehet, hogy x millió bekapcsolásból 1-szer téved az algoritmus.

Tehát a kérdés továbbra is fennáll, hogy hogyan lehet 100%-osan kitalálni, hogy a chip még nem volt inicializálva.

(#) gyengus válasza fookos hozzászólására (») Jan 29, 2008
Én is pices órán dolgozok DS1307-el .
Én gombelemet raktam rá.
Abból indultam ki, hogy 1. bekapcsoláskor úgyis beállítom az időt, ez esetben a CH bit 0 lesz, a későbbiekben úgyis ott az elem.
Mellékelem a forrást, hátha érdekel vkit, C18-hoz van.
Még csak maóta megy, volt pic reset, áramtalanítás, jónak tűnik.
(#) levy_k hozzászólása Jan 29, 2008
Nem úgy van feltüntetve mint "NV" RAM szal, sztem felejt, de próba cseresznye.Nekem október óta megy egy DS egy kis akkun, külső táp nélkül.A DS-ben van egy kis töltő is, ami a külső táp megjelenésekor tölti az aksit.Nagyon el van találva.
(#) fookos válasza levy_k hozzászólására (») Jan 29, 2008
Természetesen van aksi a DS-en.

A reset gombot jó ötletnek, de azért tulzásnak tartom. Plusz HW ás plusz SW egyben.

Egyébként azon gondolkodtam, hogy beírok az SD RAM-jába a 0x3C-től kezdődöen (x3F-4) egy 4 szavas szót (pl: "AZ1+"), és initkor kiaolvasom és ellenörzöm, hogy benne van-e. Ha nincs, akkor tuti, hogy még nem használtam a csipet és teljes initet hajtok végre.

Ez a módszer viszont felveti azt a kérdést, hogy a csip RAM-ja elveszti-e a tartalmát, ha az aksit kiveszem a foglalatból.
(#) levy_k hozzászólása Jan 29, 2008
Én egy aksit raktam a DS-re, így nem kell ellenőrizgetni állandóan, hogy első beállítás vagy sem.Tegyél egy reset gombot is az órára, ami minden regisztert alapállapotba tesz (pl. 00 óra 00 perc stb.).
Üdv.
(#) fookos hozzászólása Jan 29, 2008
Sziasztok!

PIC órát építek, és DS1307-et használok hozzá. Minden szépen működik, de a teljesség kedvéért nem hagy nyugodni, hogy hogyan kezeljem le az első bekapcsolásnál a DS1307 inicializálását. Az adatlapjában a következők állnak:

1.) "Note that the initial power-on state of all registers is not defined. Therefore, it is important to enable the oscillator (CH bit = 0) during initial configuration."

2.) "Illogical time and date entries result in undefined operation. Bit 7 of Register 0 is the clock halt (CH) bit. When this bit is set to 1, the oscillator is disabled. When cleared to 0, the oscillator is enabled.

Vagyis, lehet, hogy szemét fog a csipben állni bekapcsoláskor, és ha csak a CH bitet állítom 0-ba, akkor is mindent nullára kell állítanom inicializálnom.

De az is lehet, hogy a CH bit már nulla az első bekapcsoláskor (hisz ez is belefér a nem definiált fogalmába). Ilyenkor viszont, ha nincs szerencsém akár 29:87-t is állhat az óráknál (hiszen nem definiált) ami viszont hibás működéshez vezethet.

Szóval nekem úgy tünik, hogy a CH bit vizsgálata sem elégséges ahhoz, hogy tudjam, hogy első bekapcsolás történik, vagy már be lett az óra állítva, és minden OK.

Sokat keresgéltem a neten, és sok progit átrágtam, de erre a kérdésemre nem kaptam választ.

Szóvala kérdéss röviden: mi a helyes módja a DS1307 üzembevételének, és hogyan tudom, hogy már allítottam be helyes időt (vagyis korrekt a tartalma) illetve, hogy még nem lett beállítva semmi, és lehet hogy a chip tartalma hibás és csak szemét.

Segítségeteket előre is köszönöm!
Következő: »»   7 / 7
Bejelentkezés

Belépés

Hirdetés
XDT.hu
Az oldalon sütiket használunk a helyes működéshez. Bővebb információt az adatvédelmi szabályzatban olvashatsz. Megértettem