Pages: [1]   Go Down
Author Topic: RTC Zeit auf SD-Karte oder im EEPROM speichern ?  (Read 985 times)
0 Members and 1 Guest are viewing this topic.
Offline Offline
Jr. Member
**
Karma: 0
Posts: 58
este es la leche
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo zusammen,
ich möchte die aktuelle Zeit aus der RTC (DS1307) auf Tastendruck(Interrupt) im EEPROM, bzw. auf der SD-Karte speichern. Die Zeit lese ich mit dem Code (Werte sind 'int') aus:
Code:
void rtcReceive()
{
  Wire.beginTransmission(DS1307RTC_ID);
  Wire.send(0x00);
  Wire.endTransmission();
  Second = bcd2dec(Wire.receive() & 0x7f);
  Minute = bcd2dec(Wire.receive() );
  Hour   = bcd2dec(Wire.receive() & 0x3f);
  WDay   = bcd2dec(Wire.receive() );
  Day    = bcd2dec(Wire.receive() );
  Month  = bcd2dec(Wire.receive() );
  Year   = bcd2dec(Wire.receive() );
  Wire.requestFrom(DS1307RTC_ID, NumberOfFields);
}
Die Uhrzeit soll im Format "hh:mm dd.mm.yy" gespeichert werden. Es soll auch ein Wert zusätzlich gespeichert werden (z.B. 'T1'). Die Anzeige erfolgt auf einem GLCD-Display. Leider bekomme ich die Zeit weder über Seriell, noch über Wire gespeichert. Kann mir jemand weiterhelfen ?.
Danke.
Logged

Offline Offline
Faraday Member
**
Karma: 120
Posts: 3988
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Was soll das requestFrom() am Ende? Damit fordert der Master Daten vom Slave an. Das muss vor dem Auslesen gemacht werden.

Das müsste eher so aussehen:
Code:
void rtcReceive()
{
  Wire.beginTransmission(DS1307RTC_ID);
  Wire.send((byte)0x00);
  Wire.endTransmission();

  Wire.requestFrom(DS1307RTC_ID, 7);

  Second = bcd2dec(Wire.read() & 0x7f);
  Minute = bcd2dec(Wire.read());
  Hour   = bcd2dec(Wire.read() & 0x3f);
  WDay   = bcd2dec(Wire.read());
  Day    = bcd2dec(Wire.read());
  Month  = bcd2dec(Wire.read());
  Year   = bcd2dec(Wire.read());
}
Logged

Germany
Offline Offline
Faraday Member
**
Karma: 59
Posts: 3060
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Warum speicherst du sie nicht im DS1307 ?
Logged

Offline Offline
Jr. Member
**
Karma: 0
Posts: 58
este es la leche
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@ michael_x
das speichern im DS1307 bringt nicht viel. Die Daten (Uhrzeit/Datum) sollen nach dem Tastendruck in einem Array  und zusätzlich auf SD-Karte oder im EEProm (extern) gespeichert werden. Bei neuem Tastendruck soll der Wert im Array überschrieben und im EEPROM/SD-Karte an den alten Wert angehängt werden. Es werden 8 Taster abgefragt und die aktuellen Daten im TFT-Display angezeigt. Abruf der SD-Karte/EEPROM soll dann über ein entsprechendes Menü oder den PC erfolgen.
Logged

Berlin
Offline Offline
Jr. Member
**
Karma: 2
Posts: 69
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hi,

wenn du die Zeit wirklich in dem Format gespeichert haben willst, dann musst du sie wahrscheinlich als Sting speichern.
Ich habe vor ein paar Wochen ein ähnliches Problem gehabtr und festgestellt, dass es sich am besten machst wenn du die Bestandteile des Stings als Int speicherst und beim auslesen wieder zusammensetzt.
Du könntest dir jeweils für Stunden, Minuten usw ein einzelnes Arry anlegen und dann immer mit i++ erweitern. Beim Auslesen fragst du im EEPROM nach i und ließt deine letzten Werte aus.
Logged

Pages: [1]   Go Up
Jump to: