Zegarek (RTC) na I2C

Oct 07, 2003 5 Replies

Bawiê sie w³a¶nie zegarkiem firmy Dallas (DS1338) i ju¿ mi tyka ;-)



Mam jednak pytanko - wyczyta³em ¿e podczas czytania zegarka trzeba wys³aæ tylko adres urz±dzenia (w tym wypadku 0xD1) a zegarek zacznie wysy³aæ bajty ze swojej pamiêci po kolei. Nie widzê mo¿liwo¶ci wskazania mu adresu jaki chcê przeczytaæ. Albo ja ¼le czytam, albo nie ma innej mo¿liwo¶ci jak tylko wpisaæ jak±¶ warto¶æ pod adres np. 0x3F i wtedy nastêpny odczyt bêdzie dotyczy³ komórki o adresie zero... Widzê bowiem, ¿e podczas transakcji zapisu podaje siê adres jaki chce siê zapisaæ, natomiast przy odczycie nie ma adresu rejestru...



Czy ka¿de zatem odczytanie tych 7 bajtów z aktualnym czasem powinno byæ poprzedzone zapisem czego¶ pod (adres-1) ?



Ma kto¶ pod rêk± jaki¶ przyk³ad aplikacji która korzysta z takiego lub podobnego zegarka gdzie by³yby widoczne procedury inicjalizacji, czytania i zapisu czasu? Chêtnie sobie popatrzê jak to zrobili inni... :-)


Odczyt sk³ada siê z dwóch faz pierwsza zapisu adresu komórki - start, adres uk³adu, adres komórki (brak stopu !!) druga - w³a¶ciwy odczyt danych - znowu start, adres ukladu, a dalej ju¿ tylko dane.

Dok³adny opis mo¿na znale¼æ w specyfikacji i2c lub w pdfach do pamiêci eeprom i2c.

Czy zjad³e¶ tu bajt zapisywany do komórki czy rzeczywi¶cie go brakuje?

Czyli start bez stopu i potem adres urz±dzenia z bitem READ. Kapujê. Idê przeæwiczyæ :-)

W datasheet tego zegarka niestety nie by³o opisu procedurek. Ale znalaz³em adres serwerka ftp maxima, wiêc co¶ tam te¿ moze znajdê... ftp://ftp.dalsemi.com/pub/

Dziêki za odpowied¼.

O, znalaz³em przyk³adzik w folderze timekeeping:

uchar Sec, Min, Hrs, Dte, Mon, Day, Yr, Cr;

Start2W(); WriteByte2W(0xD0); /* write slave address, write 1307 */ WriteByte2W(0x00); /* write register address, 1st clock register */ Start2W(); WriteByte2W(0xD1); /* write slave address, read 1307 */ Sec = ReadByte2W(ACK); /* starts w/last address stored in register pointer */ Min = ReadByte2W(ACK); Hrs = ReadByte2W(ACK); Day = ReadByte2W(ACK); Dte = ReadByte2W(ACK); Mon = ReadByte2W(ACK); Yr = ReadByte2W(ACK); Cr = ReadByte2W(NACK); Stop2W();

Wszystko siê zgadza z Twoim opisem - jeszcze raz dziêki.

Mam jeszcze jeden problem z DS1338, tym razem bardziej elektryczny. Otó¿ zegarek mi traci ustawienia gdy wy³±czam zasilanie Vcc...

Vbat jest ok na poziomie 3V z bateryjki litowej ale przy wy³±czaniu urz±dzenia widzê, ¿e oscylator zamiera i potem przy ponownym starcie mam czas wyzerowany i OSF bit ustawiony.

Obserwowa³em na oscyloskopie Vcc i zauwa¿y³em, ¿e tu mo¿e byæ problem - otó¿ w ci±gu ok 50us napiêcie Vcc spada do zera a potem mam dosyæ du¿y "overshot" opadaj±cego zbocza tak ¿e Vcc pozostaje pod poziomem zera jakie¶ 250us... Minimum do³ka siêga ¶rednio 700mV (raz 680, innym razem 720). Uk³ad RTC jest zblokowany tantalem 10uF i ceramikiem 100nF (SMD).

Czy s±dzicie ¿e taki do³ek w minusie mo¿e mi uk³ad wy³±czyæ?

Jak siê tego do³ka na Vcc pozbyæ?!? Zasilacz jest wykonany w oparciu o MAX1715EEI steruj±cym dwoma N-HEXFET_MOSFETAMI w ka¿dej z dwu ga³êzi (zasilacz jest podwójny: 5 i 3.3V). Z pomiêdzy MOSFETów napiêcie jest zblokowane diod± schotkiego ale potem wy³azi przez filtr indukcyjny na resztê uk³adów. Cewka przy 3.3V ma indukcyjno¶æ 2.5uH i p³ynie przez ni± pr±d rzêdu 380-400mA podczas normalnej pracy uk³adu... Cewka na 5V ma indukcyjno¶æ 5.1uH ale 5V mnie nie obchodzi. Za cewk± 3.3V jest bezpiecznik - gdy wyjmê go z podstawki to napiêcie Vcc opada p³ynnie z roz³adowuj±cych siê kondziorów. Wnioskujê z tego, ¿e sterowanie POWER ON/OFF podawane z wy³±cznika na uk³ad przetwornicy zwiera dolnego MOSFETA aby roz³adowa³ on kondensatory przez cewkê do masy... To prawdopodobnie powoduje ten do³ek na Vcc. Macie jakie¶ pomys³y co tu mo¿naby zrobiæ z uk³adem zasilacza lub RTC??

U¿ytkownik Pszemol snipped-for-privacy@PolBox.com w wiadomo¶ci do grup dyskusyjnych napisa³: snipped-for-privacy@poczta.onet.pl...

Mo¿e dioda szeregowa przed kondziolem , to niedopu¶ci do roz³adowania C . Ale nap. wej. bedzie musia³o byæ wy¿sze o 0,6V .Chyba ¿e obni¿one nap. to nieporoblem

Join the Discussion

Have something to add? Share your thoughts — no account required.

Didn't find your answer?

Ask the community — no account required