Hallo,
kann es sein, dass man (Frau) diese (<DS1307RTC.h> <Time.h>) Lib´s nicht
wirklich braucht.
Diese RT´C haben doch alle einen Kalender on Board. D.h. ich sage der doch
nur, was "heute" ist. Den "Rest" zählt doch die RTC hoch?
Das muß doch auch mit Datum und Wochentag gehen?
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
// clear /EOSC bit
// Sometimes necessary to ensure that the clock
// keeps running on just battery power. Once set,
// it shouldn't need to be reset but it's a good
// idea to make sure.
Wire.beginTransmission(0x68); // address DS3231
Wire.send(0x0E); // select register
Wire.send(0b00011100); // write register bitmap, bit 7 is /EOSC
Wire.endTransmission();
}
void loop()
{
// send request to receive data starting at register 0
Wire.beginTransmission(0x68); // 0x68 is DS3231 device address
Wire.send(0); // start at register 0
Wire.endTransmission();
Wire.requestFrom(0x68, 3); // request three bytes (seconds, minutes, hours)
while(Wire.available())
{
int seconds = Wire.receive(); // get seconds
int minutes = Wire.receive(); // get minutes
int hours = Wire.receive(); // get hours
seconds = (((seconds & 0b11110000)>>4)*10 + (seconds & 0b00001111)); // convert BCD to decimal
minutes = (((minutes & 0b11110000)>>4)*10 + (minutes & 0b00001111)); // convert BCD to decimal
hours = (((hours & 0b00110000)>>4)*10 + (hours & 0b00001111)); // convert BCD to decimal (assume 24 hour mode)
Serial.print(hours); Serial.print(":"); Serial.print(minutes); Serial.print(":"); Serial.println(seconds);
}
delay(1000);
}
Wie "schnell" mag das sein, hält es meinen Code länger auf als die Lib´s?
Gruß und Dank
Andreas
hi,
nein, das machen eigentlich viele so, sobald sie draufkommen, wie es geht...
gruß stefan
Nicht unbedingt.
Ich habe Time.h verwendet weil ich noch mit TimeAlarms, Alarme auslöse, also z.B. Relais zu einer bestimmten Zeit schalten. Und wollte das nicht per Hand programmieren.
Es ist auch ganz nett wenn man keine RTC hat und sich die Zeit über das Internet holt. Dann kann man die Zeit zwischendurch lokal zählen.
Aber du kannst auch RTC Libs Standalone verwenden. Hier ist z.B. noch eine:
http://www.henningkarlsen.com/electronics/library.php?id=34
Oder hier:
Die RTC komplett per Hand auszulesen kann man machen auch machen.
Wenn du die Zeit nur brauchst, um sie (z.B.) auf einer LCD Anzeige darzustellen, kannst du dir sogar das *10 sparen und die Zeit gleich nach ascii wandeln 
static char timestring[9] = "00:00:00";
char* p=timestring+7; // start at end
Wire.requestFrom(0x68, 3); // request three bytes (seconds, minutes, hours)
for (byte i = 0; i<3; i++)
{
byte b = Wire.receive();
*p = *p & 0x30 | ( b & 0x0f) ; p--; // low nibble : replace old by new
*p = *p & 0x30 | (( b >> 4 )& 0x07 ; p-- ; // high nibble
p--; // skip ':'
}
lcd.write(timestring);
Das & 0x07
kann man sich sogar sparen, wenn die Uhr richtig (24h modus) gestellt ist 
Hallo,
jetzt wird mir auch klar, warum es Lib`s gibt…
RTC ohne Lib funktioniert ja, aber- das mußt Du erst einmal in die Birne
bekommen. Wenn man dann noch mit "Zeit" rechnen möchte, das ganze auch
noch hübsch anzuschauen ist, dann ufert das ganz schön aus.
Das geht schon ziemlich in die Tiefe, soweit bin ich aber noch nicht. Werde
das also erst einmal lassen. Fest steht aber, das die Lib´s rausfliegen.
Lieber heute als morgen. Da kannst Du die Kalte Wut bei kriegen.
Aber vielen Dank für die Hilfe und Anregungen.
Gruß und Spaß
Andreas
Die Time.h Lib bietet vor allem zwei Sachen an:
1.) Du kannst die Zeit lokal auf dem Prozessor zählen ohne ständig die RTC abzufragen und dich nur ab und zu synchronisieren. Bei einer RTC vielleicht nicht so wichtig, aber wie gesagt bei anderen Zeitquellen wie Internet und DFC wo man nicht dauernd abfragen kann.
2.) Die Zeit wird mit dem time_t in Sekunden seit 1970 (ähnlich zur Unix-Zeit) verwaltet. Daher kann man wie du sagst einfach Zeiten voneinander abziehen und Differenzen berechnen. Da gibt es dann noch eine Funktion um eine time_t in eine Menschenlesbare Zeit zu verwandeln (im tm struct).