RTC: Timekeeper Register

Gast #1880573
Lesenswert?

Liebe Community,

ich versuche gerade meinen RTC (DS1337) mit meinem ATMega48 zu vernetzen 
und einzustellen. Endresultat soll sein, dass der RTC alle 24 h den µC 
via Interrupt aus dem Stromsparmodus holt.

Nun werd ich allerdings aus dem Datenblatt nicht so ganz schlau. Im 
Datenblatt ist das Timekeeper Register abgebildet. Dort zu sehen ist die 
Startadresse des Pointers und anschließend die Information, welche 
Funktion eine 8 Bit (0-7) lange Nachricht beinhaltet. Genau hier stehe 
ich auf dem Schlauch. Wenn ich an die Startadresse 0x07h eine Nachricht 
schicken möchte, wo Bit 7 adressiert wird, käme ich auf den Wert 0x0E 
(0x07h + 7). Damit würde ich dann aber an einer ganz anderen Stelle der 
Adress Map landen ?!
Gast #1881129
Lesenswert?

>> wo Bit 7 adressiert wird, käme ich auf den Wert 0x0E
>> (0x07h + 7).

Nur so nebenbei, ich käme dann auf 0x87 (0x07 + 0x80)

Die Adresse und die Register sind getrennte Bytes und werden nicht 
addiert.

Der Ablauf ist folgender:
- I2C start
- write DS1337 (0xD0)
- write Adresse Alarmregister (0x07)
- write Wert Sek Register
- write Wert Min Register
- write Wert Std Register
- I2C stop

bei dem Werte schreiben wird das Adressregister automatisch erhöht.
Gast #1881190
Lesenswert?

argh sowas blödes.... das

R2D2 schrieb:
>>> wo Bit 7 adressiert wird, käme ich auf den Wert 0x0E
>>> (0x07h + 7).
>
> Nur so nebenbei, ich käme dann auf 0x87 (0x07 + 0x80)

Argh ich depp. Stimmt natürlich.

> Die Adresse und die Register sind getrennte Bytes und werden nicht
> addiert.

> Der Ablauf ist folgender:
> - I2C start
> - write DS1337 (0xD0)

Die Adresse 0xD0 hab ich bisher in allen Codebeispielen gesehen, ich seh 
aber nicht was das sein soll ? Dient das lediglich zur initialisierung ?

> - write Adresse Alarmregister (0x07)
> - write Wert Sek Register
> - write Wert Min Register
> - write Wert Std Register
> - I2C stop

Versteh ich das richtig: mit "write Adresse Alarmregister (0x07)" leg 
ich erstmal fest, in welchem Register ich mich gerade bewegen möchte. 
Die RTC weis nun ich das ich mich im 1. Alarmregister bewegen möchte. 
Dort geb ich dann die Alarmwerte ein (sek, min, std)? Weil laut Adress 
Map kommen in  07h nur die sek, in 08h die min und in 09h die std

> bei dem Werte schreiben wird das Adressregister automatisch erhöht.

d.h. wenn ich an z.B. 0x07h (Alarm 1 sek) bit 0 auf high setze wäre die 
Startadresse für Alarm 1 min nicht die 0x08h sonder 0x09h ?


Danke für deine Hilfe

Gruß Sanja
Gast #1881237
Lesenswert?

>> Die Adresse 0xD0 hab ich bisher in allen Codebeispielen gesehen, ich seh
>> aber nicht was das sein soll ? Dient das lediglich zur initialisierung ?

Du hast das Datenblatt also doch nicht gelesen.
Siehe Seite 14 <Slave Address> + <R/W> Bit.
Binär zu Hex wirst du doch allein hinbekommen.

>> d.h. wenn ich an z.B. 0x07h (Alarm 1 sek) bit 0 auf high setze wäre die
>> Startadresse für Alarm 1 min nicht die 0x08h sonder 0x09h ?

Nein, wenn Adresse 07 gewählt ist, wird der folgende Wert (Sek) in 
Adresse 07 geschrieben. Folgen vor dem I2C stop noch weitere Werte, wird 
intern die Adresse erhöht und der nächste Wert in Adresse 08 (Min) und 
der nächste Wert in 09 (Std) geschrieben.
Gast #1881238
Lesenswert?

Hi

>Die Adresse 0xD0 hab ich bisher in allen Codebeispielen gesehen, ich seh
>aber nicht was das sein soll ? Dient das lediglich zur initialisierung ?

Das ist die Adresse deiner RTC. Die Register werden mit der 
'Word-Address' adressiert. Lies die einfach mal das Datenblatt richtig 
durch.

MfG Spess

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren