Forum: Mikrocontroller und Digitale Elektronik RTC: Timekeeper Register


von Sanja (Gast)


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 ?!

von Sanja (Gast)


Lesenswert?

Keiner eine Idee?

von R2D2 (Gast)


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.

von Sanja (Gast)


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

von R2D2 (Gast)


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.

von spess53 (Gast)


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

von Sanja (Gast)


Lesenswert?

Ah okay nun kann ich das auch einordnen. Danke für die Hilfe. Dann werd 
ich nun mal ein wenig rumprobieren :-)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.