ds1307 keine kommunikation

Hallo liebe Arduino-Gemeinde,

ich versuche einen RTC zum laufen zu bekommen.
Erster Schritt war mit einem pcf 8583 da ich diesen kurzzeitig von einem bekannten bekommen konnte. Leider hat dieser sporadisch unterschiedliche Daten(Datum) ausgegeben und ich bin nicht hinter das prob gestiegen. Bei meiner nächsten Bestellung habe ich mir also einen DS1307 geholt und angeschlossen.
Leider gibt der RTC gibt nichts aus...Ich habe nun schon mit mehreren Libs aus dem Netz versucht diesen zum Laufen zu bekommen - vergebens. Entweder zeigt der RTC die Zeit 00:00:00 dauerhaft an oder ich habe das prob, wenn ich die Time.lib von Arduino benutze, dass ich dann das Datum setzten kann, doch jedes mal wenn ich den Serial Monitor wieder öffne wird das Datum zurück gesetzt(Siehe Anhang).

Hier mein Code:
/*

  • TimeRTC.pde
  • example code illustrating Time library with Real Time Clock.
  • date inputformat YYMMDDHHMMSSenter
    */

#include <Time.h>
#include <Wire.h>
#include <DS1307RTC.h> // a basic DS1307 library that returns time as a time_t

char time[25];
int uiyr,uimt,uidy,uihr,uimin,uisec;
int i;

void setup() {
Serial.begin(9600);
setSyncProvider(RTC.get); // the function to get the time from the RTC
if(timeStatus()!= timeSet)
Serial.println("Unable to sync with the RTC");
else
Serial.println("RTC has set the system time");

}

void loop()
{
digitalClockDisplay();
delay(1000);

if(Serial.available() > 0)
{
uiyr = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48) + 2000);
uimt = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
uidy = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
uihr = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
uimin = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
uisec = (byte) ((Serial.read() - 48) *10 + (Serial.read() - 48));
if(Serial.read() == 13)
{
setTime(uihr,uimin,uisec,uidy,uimt,uiyr);
RTC.set(now());
}
}

}

void digitalClockDisplay()
{
// digital clock display of the time
sprintf(time, "%02d/%02d/%02d %02d:%02d:%02d",
year(), month(), day(), hour(), minute(), second());
Serial.println(time);

}

Hat jemand eine Idee woran das liegen könnte?

Viele Grüße und Danke im Voraus!

schau mal http://www.arduino.cc/playground/Code/Time

now();             // returns the current time as seconds

Das ist der Grund.
Zum setzen der Zeit muss eine Variable vom Typ time_t übergeben werden.
Versuchs mal in zwei Schritten:

  time_t t = now(); // store the current time in time variable t 
setTime(t);
RTC.set(t);

Moin erni-berni,

also am Code liegt es net. Der läuft jetzt so wie ich es hatte....habe rausgefunden, dass die Batterie Spannung unbedingt erforderlich ist....würde aber mal gerne wissen wieso!?!?ich wollte den RTC eigentlich ohne betreiben?
Weiß da jemand was drüber? :cold_sweat:

Grüße

Hallo norb,
poste mal die genaue Beschaltung des DS1307 und vom Anschluß an das Board.
gruss

macht ein RTC ohne Batterie überhaupt Sinn?

Hängt der VBatt bei Dir in der Luft oder ist es an GND angeschlossen?

Alternativ könntest Du Vbat mit Vcc versorgen (aber nur zwischen 2 bis max. 3,5V).
Doku:

Battery voltage must be held between 2.0V and 3.5V for proper operation.

Besser kann ich das gerade nicht darstellen....hoffe das reicht....
Die Belegung ist:

Arduino - Ds1307

3,3V - Vbat (Vorher nicht vorhanden)
5V - Vcc und an SDA,SCL über 10k
GND - GND
A4 - SDA
A5 - SCL

@ itac
für mich macht das ganze sinn, da ich das Uno Board dauerhaft betrieben möchte und somit immer eine Spannungsquelle zur verfügung habe. Wenn nach einem Jahr mal die Spannung unterbrochen werden sollte kann ich die Uhr eh nachstellen. Allein weil sie nicht 100% synchron läuft. Der RTC pcf 8583 hat auch keine Spannung über eine Batterie vorgesehen....

Grüße

Achso...bevor ich die 3,3V an Vbat angeschlossen habe hingt der PIN des RTC in der Luft....

Grüße

Hallo,
ich habe in einem anderen Blog gelesen, dass der Vbat auf GND gezogen werden soll, wenn keine Batterie benutzt wird.
Das sollte angeblich im Datenblatt stehen. Ich habe daraufhin das Datenblatt gescannt, aber nichts dazu gefunden.
Ein Versuch könnte aber nicht schaden.
Gruß

Hallo,

If a backup supply is not required, VBAT must be grounded.

so hab ichs im Datenblatt gefunden.

Die 2x 10KOhm von SDA und SCL kannst Du Dir meines Wissens sparen. Das macht (glaub ich) schon Dein Arduino.

Was macht eigenlich setSyncProvider

Was wird ausgegeben, wenn Du einfach die Sekunden direkt ausliest, ohne die Library zu verwenden?

Gruß Reinhard

Jawoll! Wenn ich Vbat auf GND ziehe funzt es auch...Danke!

@ spaceball:

nee die 10k kann ich mir leider nicht sparen. Habe ich schon probiert. Zumindest lief dann mein HMC6352 nicht mehr....
setsyncprovider setzt die zeitquelle(ntc,rtc,oder irgendwas anderes) die immer periodisch mit der bib synchronisiert wird. man kann auch noch einstellen in welcher zeit die zeit abgeglichen wird. Hierzu der Auszug aus der Readme der bib:

setSyncProvider(getTimeFunction); // set the external time provider
setSyncInterval(interval); // set the number of seconds between re-sync

Grüße