Go Down

Topic: DS1302 charging einschalten (Read 596 times) previous topic - next topic

farbtoaster

Hallo zusammen,

ich habe in meiner wordclock einen DS1302 RTC am laufen, hab ihm jetzt auch einen Goldcap an VCC2 spendiert. Schaffe es nur nicht das er den Goldcap auch lädt.
Nach meiner Ansicht müsste in der Setuproutine folgender Code
Code: [Select]
rtc.write_register(0x90,0xa6);
das charging freischalten.
???

in der verwendeten lib (ds1302 von Matt Sparks) ist zum write.register folgendes zu finden
Code: [Select]
void DS1302::write_register(reg_t reg, uint8_t value)
{
  uint8_t cmd_byte = (128 | (reg << 1));

  digitalWrite(_sclk_pin, LOW);
  digitalWrite(_ce_pin, HIGH);

  _write_out(cmd_byte);
  _write_out(value);

  digitalWrite(_ce_pin, LOW);
}

leider sind meine Kentnisse im bitschubsen etwas eingerostet, was macht folgende Zeile?
Code: [Select]
uint8_t cmd_byte = (128 | (reg << 1));
oder stimmt die Reg.Adresse nicht???
oder ????

wäre für Hilfe dankbar  :)



rz259

Was macht der Ausdruck

(128 | (reg << 1));

?

reg << 1 shiftet den Wert reg um 1 Bit nach links, effektiv ist das eine Multiplikation mit dem Wert 2. Anschließend wird das per ODER mit dem Wert 128 verknüpft.

In Hexadezimaldarstellung sieht man das dann ganz gut:

Nehmen wir an, reg hätte den Wert 1, dann ergibt (reg << 1) den Wert

0x80 | 0x02 ergibt dann den Wert 0x82






farbtoaster

Oh danke,

Trickle Charge Register ist 0x90
und ein write sollte lt. datenblatt auf 0x91 erfolgen?

die write_register funktion macht ja aber dann 0x92 daraus???

Hm? nicht das ich dauernd auf die falsche Adresse schreibe! werd das morgen mal testen!


farbtoaster

jetzt schaut's besser aus.
Code: [Select]
rtc.write_register(0x48,0xa6);

ansteigende Spannung an VCC2.  :)

Danke und Grüsse
Christian

Go Up