ds1307 - Anschließen

Hallo,

ich habe zwar ein Anschlussbild gefunden:
http://www.arduino.cc/cgi-bin/yabb2/YaBB.pl?num=1235070596

Allerdings was muss da zw pin1 und pin2?

Steht doch da: Das ist ein Uhrenquarz mit bestimmter Frequenz (32,768 kHz).

Steht doch im Text: ein Quartz mit 32768kHz.

Edit: zu langsam :-?

lasst mich raten... es geht nicht ohne...

Auch ein ds1307 muss sich nach einem Takt richten.

Nur zur Information: ich habe mich nämlich auch gerade mit der Tausenderpotenz vertan. Im Amerikanischen setzt man kein Komma, sondern einen Punkt. Verwechselt man schnell mit 'nem Tausenderpunkt und liegt somit schnell mal um Größenordnungen daneben...

Der Hintergrund dieser scheinbar krummen Frequenz ist folgender: Ich muss diese Frequenz nur 15mal durch zwei teilen, um einen ziemlich exakten Sekundentakt herauszubekommen. 15 Flip-Flops hintereinander und du hast 'nen genauen Sekundenzähler.

lasst mich raten... es geht nicht ohne...

Zumindest nicht für eine sinnvolle Anwendung... :smiley:

Hi,

hier mal ein Schaltbild mit dem DS1307 an meinem Arduino.

Vorsicht bei der Quarzwahl. Es es muss ein Quarz mit 12,5 pF sein, andernfalls geht die Uhr deutlich falsch.

Gruß

Sebastian

Die 32.678 Quarze gibt es mit der Kapazität 12,5 und 6 pF.
ein 12,5 müßte der Richtige sein ansonsten geht die Uhr falsch (ca 20 Sekunden am Tag zu schnell)
Grüße Uwe

Kann mir jemad sagen, warum das Beispiel nicht läuft:

#include <WProgram.h>
#include <Wire.h>
#include <DS1307.h> // written by  mattt on the Arduino forum and modified by D. Sjunnesson

void setup()
{
  Serial.begin(9600);

  RTC.stop();
  RTC.set(DS1307_SEC,1);        //set the seconds
  RTC.set(DS1307_MIN,23);     //set the minutes
  RTC.set(DS1307_HR,12);       //set the hours
  RTC.set(DS1307_DOW,4);       //set the day of the week
  RTC.set(DS1307_DATE,5);       //set the date
  RTC.set(DS1307_MTH,3);        //set the month
  RTC.set(DS1307_YR,9);         //set the year
  RTC.start();

}

void loop()
{

  Serial.print(RTC.get(DS1307_HR,true)); //read the hour and also update all the values by pushing in true
  Serial.print(":");
  Serial.print(RTC.get(DS1307_MIN,false));//read minutes without update (false)
  Serial.print(":");
  Serial.print(RTC.get(DS1307_SEC,false));//read seconds
  Serial.print("      ");                 // some space for a more happy life
  Serial.print(RTC.get(DS1307_DATE,false));//read date
  Serial.print("/");
  Serial.print(RTC.get(DS1307_MTH,false));//read month
  Serial.print("/");
  Serial.print(RTC.get(DS1307_YR,false)); //read year 
  Serial.println();

  delay(1000);

}

Als Zeit kommt immer 0:0:0 0/0/2000

ich verwende folgende Library mit Erfolg: http://www.seeedstudio.com/depot/images/product/DS1307.rar

Hi,

ich habe es nach

http://www.scratchpad.thisandthose.org/joomla/index.php?option=com_content&view=article&id=1&Itemid=3

gemacht und es rannte.

Hi,

Hast Du schon überprüft wie genau die RTC geht? Ich habe ca. 2Sec pro Tag. Viel genauer ist wohl auch nicht möglich. Aber wie könnte eine "Trimmung" oder korrektur aussehen?

Gruß

Sebatsian

Hi Sebastian,

habe ich nicht geprüft. Kann gut sein, dass die Zeit abweicht. Ich konnte sie aber nicht mal korrekt stellen, da ich das beim ersten Kompilieren gemacht habe und seit dem ist Datum und Uhrzeit im DS. Das Setzen beim Kompilieren ist grundsätzlich nicht sekundengenau, weil man ja nie weiß wann der Code im Atmega ist und die Zeit im DS setzt... Im mir aber auch nicht so wichtig. Wenn ich's genau möchte würde ich ein DCF77 Modul zur Zeitsetzung nehmen....

Aber wie könnte eine "Trimmung" oder korrektur aussehen?

Ein paar Ideen für die Abfrage der genauen Uhrzeit:
-Webservice im Internet via Ethernet abfragen
-Abfrage NTP-Server via Ethernet
-täglicher Update via serieller Schnittstelle (Aktuelle Uhrzeit liefert PC)
-DCF77-Quelle abfragen
-Uhrzeit via GPS-Modul ermitteln

Das(2sec/Tag) sind immerhin 12Minuten pro Jahr :wink:

  • Ethernet zu aufwendig/mit Kanonen auf Tauben geschossen
  • serieller Abgleich leider bei einer autarken Anwendung nicht möglich
  • DCF finde ich gut, man müßte die Empfangsmöglichkeinten in massiven, geschlossenen Gebäuden klären
  • GPS das gleiche wie mit der Ethernet Lösung

Gruß

Sebastian

Wenn man mit einer Abweichung von 2 Sek. pro Tag nicht leben kann, muss das eine ganz wichtige Anwendung sein. :wink:
Bei diesen Anforderungen an die Genauigkeit der Zeit muss auch mit einem entsprechenden Aufwand für den Zeitabgleich gerechnet werden.

weitere Lösungen:
-Serieller Abgleich via RF-Funkverbindung
-Abgleich via Infrarot-Verbindung

Wo ist denn diese Uhrenanwendung im Einsatz, wenn meine genannten Möglichkeiten aus vielen Gründen nicht möglich sind:
-zu teuer
-nicht möglich infolge autarker Anwendung (was auch immer das heisst)
-kein Empfang

Scheinbar ist die DCF77-Lösung der einzige Ansatz, welcher halbwegs gehen könnte. Die Antenne kann mach auch ausserhalb montieren und das Signal mittels Kabel oder kabelloser Übertragung weitersenden.

Auch Radiosender mit RDS (hoffe ich hab mich nicht mit den Buchstabene verfehlt) und entsprechenden Empfänger gibt ein genaues Zeitsignal.

Andere genaue Zeitquelle ist ein GPS Empfänger, nur leider funktioniert der in Gebäuden nicht.

ZeitServer im Internet (weiß nich ob das Protokoll aufwändig ist und ob es auf Ardino schon implementiert ist).

Grüße Uwe

Nein, es ist nichts sehr wichtiges. Aber es geht um das Prinzip :wink: Sie Anwendung soll einfach ohne Wartung drei Jahre durch laufen & möglichst genaue Zeitangaben liefern.
Wie wird es denn eigentlich bei Uhren gemacht? Die bekommen den Takt ja auch von einem (ungenauen) Quarz?

Miss doch einfach die typische Tagesabweichung (ggf. die Wochenabweichung und teile durch 7) und setze pünktlich um Mitternacht die Uhr 2 Sekunden vor oder zurück, wie du es brauchst.
Alternativ mittags eine Sekunde vor/zurück und mitternachts eine Sekunde vor/zurück.

Das war halt auch meine Idee. Einmal die Woche x Sekunden korrigieren.