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 ?!
>> 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.
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
>> 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.
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
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.