RTC läuft nicht

Hallo Zusammen,

ich wollte mir mal eine "primitive" Uhr mit dem RTC DS1307 basteln.
Ich weiß das DS1307 läuft nicht ganz so genau - ist in dem Beispiel jetzt eig auch erstmal unwichtig.

Folgendes Problem wenn ich den Sketch hochgeladen habe und das Programm mittels dem Serial Monitor ausgeben will:

Im Display taucht auf: Synchronisation mit Echtzeituhr fehlgeschlagen und startet dann am 01.01.1970 um 00:00 Uhr

Folgenden Code habe ich aus dem Ardunio Kochbuch verwendet:

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h>

void setup()
{
 Serial.begin(9600);
setSyncProvider(RTC.get);
if(timeStatus() != timeSet)
{Serial.println("Synchronisation mit Echtzeituhr fehlgeschlagen");}
else
{Serial.println("Systemzeit über Echtzeituhr gesetzt");}
}

void loop()
{
  if(Serial.available())
  {
    time_t t = processSyncMessage();
    if(t > 0)
    {
      RTC.set(t);
      setTime(t);
    }
  }
  digitalClockDisplay();
  delay(1000);
}

void digitalClockDisplay()
{
  Serial.print(hour());
  printDigits(minute());
  printDigits(second());
  Serial.print(" ");
  Serial.print(day());
  Serial.print(" ");
  Serial.print(month());
  Serial.print(" ");
  Serial.print(year());
  Serial.println();
}

void printDigits(int digits)
{
  Serial.print(":");
  if(digits < 10) Serial.print('0');
  Serial.print(digits);
}


#define TIME_MSG_LEN 11
#define TIME_HEADER 'T'
time_t processSyncMessage()
{
  while(Serial.available() >= TIME_MSG_LEN)
  {
    char c = Serial.read();
    Serial.print(c);
    if(c == TIME_HEADER)
    {
      time_t pctime = 0;
      for(int i = 0; i < TIME_MSG_LEN -1; i++)
      {
        c = Serial.read();
        if(c >= '0' && c <= '9')
        {
          pctime =(10*pctime) + (c - '0');
        }
      }
      return pctime;
    }
  }
  return 0;
}

Verwendet habe ich das Tiny RTC I2C Modul und....
... Angeschlossen habe ich aus auch so wie beschrieben: Vcc an 5V; GND an die Masse; SCL an A5 und SDA an A4...
... Batterie ist eingelegt

Hat es evtl eine Bedeutung, dass die Wire.h gelb markiert ist und die beiden anderen Library nicht? :~

Danke für eure Hilfe :slight_smile:

Hallo,

wenn ich das richtig verstehe soll der Sketch versuchen die aktuelle Zeit aus dem Internet zu holen und die RTC dann zu stellen? Ich glaube die Internetverbindung schlägt fehl.

A4 ist SDA und A5 ist SCL. Das haste richtig.

Hast Du schon versucht nur die Zeit aus der RTC auszulesen? Oder das Datum? Nihts weiter. Klappt das?

Und wo hast Du die I2C Adresse der RTC angegeben? Oder suchst sich die Library die selbst?

Hallo Doc_Arduino,

na also du bringst mich ganz schön ins grübeln...

Also ich weiß jetzt nicht ob ich das richtig verstanden habe bisher. Muss ich dem RTC nicht erst eine Zeit zuweisen, bevor ich eine Auslesen kann?

Zu der anderen Frage ob die I2C-Adresse automatisch angegeben wird habe ich ehrlich gesagt keine Antwort, da ich das Programm bisher eig. nur so abgeschrieben habe und mir die Library so runtergeladen habe.

Ist nicht die eleganteste Lösung einfach copy und paste aber leider bin ich noch nicht so weit das ich mir da alles selbst zusammenschreiben kann :frowning:

Du must die RTC erstmal einstellen, also mit dem PC auf der Seriellen ein "T" schicken und dann die Zeit.

Doc_Arduino:
wenn ich das richtig verstehe soll der Sketch versuchen die aktuelle Zeit aus dem Internet zu holen und die RTC dann zu stellen? Ich glaube die Internetverbindung schlägt fehl.

Nein. Die Time Lib zählt die Zeit lokal auf dem Arduino und synchronisiert sich ab und zu mit der RTC. Je nachdem was man bei setSyncInterval(seconds) einstellt.

http://www.pjrc.com/teensy/td_libs_Time.html

Um die Uhr zu Stellen musst du auf Serial 'T' + eine Unixzeit eingeben. Wobei das da leicht fehlschlagen kann, da da nicht berücksichtigt wird, dass Serial mehrere ms dauert. Das TimeRTCSet Beispiel in der Lib verwendet da ParseInt() was eine bestimmte Zeit wartet.

Hallo,

setzen muß man die RTC nicht damit die funktioniert. Man sollte sie aber stellen damit sie die richtige Zeit und Datum ausgibt. Wenn man nicht einstellt gibt sie dennoch eben irgendeine Zeit nach dem Mond aus.

Copy & Paste funktioniert in den seltesten Fällen. Hat die Time Library keine Bsp. zum probieren?

Ich gebe Dir mal 2 Sketche an die Hand. Der Multiscanner scannt den I2C Bus nach allen angeschlossenen I2C Geräten. Hatte ich mal im Netz gefunden und funktioniert einwandfrei. Da sollte Deine RTC auftauchen, dann kennst Du Ihre Adresse. Vielleicht taucht noch eine 2. Adresse auf, falls ein EEprom mit verbaut wurde. Bei meinem DS3231 Modul lautet die Adresse der RTC zum Bsp. 0x68.

Der 2. Sketch ist hier aus dem Forum von jurs. Der liest aller 10 sec. die Zeit und Datum aus. Funktioniert auch mit Deiner DS1307, weil die ersten Register 00h bis 06h gleich sind. Und Du kannst damit Deine RTC gleich noch stellen. 1A Funktion von jurs. :slight_smile: immer wieder gern genommen.

Sketche.rar (3.72 KB)

Wenn man nicht einstellt gibt sie dennoch eben irgendeine Zeit nach dem Mond aus.

Vor allem läuft sie dann nicht... :wink:

Bit 7 of Register 0 is the clock halt (CH) bit. When this bit is set to 1, the oscillator is disabled. When cleared to 0, the oscillator is enabled. On first application of power to the device the time and date registers are typically reset to 01/01/00 01 00:00:00 (MM/DD/YY DOW HH:MM:SS). The CH bit in the seconds register will be set to a 1. The clock can be halted whenever the timekeeping functions are not required, which minimizes current

Datasheets sind immer gut: http://datasheets.maximintegrated.com/en/ds/DS1307.pdf