Fórum témák
» Több friss téma |
Fórum
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.
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)
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.
É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.
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.
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.
É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.
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! |
Bejelentkezés
Hirdetés |


.