Hallo, ich habe nun schon das 2.mal eine RTC gebaut und bin mit der Genauigkeit alles andere als zufrieden. Ich habe immer einen DS1307 oder 1337 mit einem Uhrenquarz von Reichelt verwendet und diese nach dem Datenblatt aufgebaut! Nun habe ich beim letzten Versuch auch riesiege Masseflächen um den Quarz platziert, nur die Genauigkeit ist immer noch bescheiden. Im Moment habe ich +10s am Tag (ca. 120ppm), was weit mehr als die Angaben des Datenblattes ist! Bei meiner Messung war auch die Restschaltung außer Betrieb, d.h. die RTC lief nur alleine, gespeißt aus einem GoldCAP. HAt jeamnd eine Idee? Muss ich das Gehäuse noch an MAsse löten? Ich bin echt ratlos! Danke im voraus... Matthias
Ich glaube das liegt an deinem Quellcode. Denn so ungenau kann kein Quarz sein. Poste mal am besten wie du die RTC ansprichst.
Welche Lastkapazität ist für den Quarz angegeben und welche verwendest du?
Hallo, am Quellcode wird es wohl nicht liegen, da dieser I2C-BUS funktioniert und ich alle Daten auslesen und setzen kann (fehlerfrei)! Laut Datenblatt besitzt der Quarz ein LoadCapacitance von 6pF , genau wie für den DS1337 vorgeschrieben. Ich habe keine weiteren Quarze verbaut, genau so wie in der Beschreibung des DS1337 vorgegeben.
Hier noch die Schaltung... Können die unterschiedlichen Leitungslängen die Kapazität vertrimmen?
Mein Tipp: nimm ne RTC von EPSON, die haben integrierte Quarze, kannst dir den ganzen Abgleich sparen. Wir sind EINMAL reingefallen mit anderen RTCs, das reicht. Möglicherweise haben die sogar softwarekompatiblen Ersatz, bei uns hat's geklappt.
@ Matthias Werner (macho2000)
>Können die unterschiedlichen Leitungslängen die Kapazität vertrimmen?
Jain. Aber wie es scheint hast du unter dem Quarz und dessen Zuleitungen
Masseflächen. Das kann die Kapazität der Leitung wesentlich erhöhen.
MfG
Falk
> Hier noch die Schaltung... Das weicht aber sehr von den Maxim-Vorgaben ab. Ziemlich lange Zuleitungen zum Quarz, Leiterbahnen in einem "verbotenen" Bereich, keine erkennbare separate Massefläche. http://www.maxim-ic.com/appnotes.cfm/appnote_number/58 Mein Layout im Anhang. Habe ich aber noch nicht auf Genauigkeit gestest.
Soweit ich weiß, braucht ein Quarz immer nen Trimmer in Reihe zum Abgleich. Besser wäre natürlich ein RTC-IC mit Softwareabgleich (reziproker Teiler), sowas müßte es eigentlich geben. Ich hab mich aber noch nie dafür interessiert, da ich immer den Hauptquarz (z.B. 11,0592MHz) als Uhrenfunktion nehme, dann ist ein Softwareabgleich einfach. Außerdem brauche ich keine komplizierten Kommunikations- und Formatwandlungsroutinen, die Sekunden, Minuten usw. sind ja schon fix und fertig in SRAM-Variablen des MC und nen Timerinterrupt braucht ja eh jede Anwendung. Ganz ohne Abgleich gehen nur spezielle ICs mit internem Quarz, z.B. DS32khz. Peter
> brauche ich keine komplizierten Kommunikations- und
Formatwandlungsroutinen
In dem IC sind die Sekunden und Minuten auch schon fix und fertig und
zudem noch der Wochentag. Schaltjahr-Berücksichtigung, Alarmton und vor
allem Akku-Pufferung für 10+ Jahre. Ausserdem hat es etwas
Akku-gepufferten Speicher ohne Beschränkung der Schreibzyklen - ideal
für oft veränderte Konfigurationsdaten. Für ein Umsonst-IC nicht
schlecht.
Hallo, @Dietmar Im Moment ist eine Massefläche unter der Quarz. Auf der gegenüberliegenden Seite ist eine größere durchgängige Massefläche. Ich könnte den Quarz noch einmal umsetzen und zwar auf die gegenüberliegende Seite der Platine und Ihn direkt an die Beinchen des DS1337 anlöten. Aus der großen Massefläache lässt sich eine kleine Massefläche abtrennen. Auf der oberen Platinenseite kann ich die Massefläche dann wegnehmen. @Peter Wie würde eine Schaltung mit Trimmkondensator aussehen? Mal sehen ob die Platine noch zu retten ist....
Um RTC kommt man meist nich rum, wenn die Uhrzeit/Datum auch bei ausgeschalteten Gerät weiterlaufen muß. RTC braucht in der Regel unschlagbar wenig Strom. Das geht kaum mit einer reinen Controller-Uhr. Ich nehme auch nur noch RTCs mit internen Quarz. In der Regel werden diese mit 50 oder 30ppm Genauigkeit angegeben. In der Praxis sind gute RTCs mit internen Quarz aber besser, oft ist die Abweichung unter 3 Sek. / Monat.
> Ich könnte den Quarz noch einmal umsetzen und zwar auf die gegenüberliegende Seite der Platine Wieso das Quarz nicht direkt an die Anschlüsse legen, also 90 Grad gegen Uhrzeigersinn drehen? Datenblatt: "It is important to place the crystal as close as possible to the X1 and X2 pins". Mach mal folgenden Versuch: Quarz direkt an IC-Pins löten (die keinen Kontakt zur Platine haben!). Wenn es dann genau geht, liegt es am Layout. > Im Moment ist eine Massefläche unter der Quarz Umfasst die das Quarz? "Place a guard ring (connected to ground) around the crystal". > größere durchgängige Massefläche Es sollte laut Datenblatt eine abgetrennte (kleine) lokale Massefläche sein. Je grösser, desto eher kriegst Du Probleme.
Also ich habe nun noch einemal folgendes gemacht: 1. die Leiterzüge zum Quarz direkt am Chip abgetrennt. 2mm weggefräst;) 2. den Quarz direkt an die PINs gelötet - Quarz steht nach oben... 3. die Uhr neu gestellt und die Restschaltung ausgeschaltet Nun Warte ich noch mal 2 Tage und berichte dann... Vielen Dank bis jetzt! Gruß Matthias
>> am Quellcode wird es wohl nicht liegen, da dieser I2C-BUS funktioniert
Das heißt aber noch nicht, dass es fehlerfrei ist. Ich kenne diese RTC
und hatte genau das gleiche Problem. Das lag am Lesezugriff auf die RTC.
Schöne Grüße
Artur
Zur zum Vergleich:
1 | void rtc_read_time(RTC_struct_typ* date_time) |
2 | {
|
3 | unsigned char Seconds, Minutes, Hour ,Day, Date ,Month, Year; |
4 | //~~~~~~~~~~~~~ Set Register Pointer to 0
|
5 | i2c_start(); // Start condition |
6 | i2c_write(RTC_SLAVE_ADDR);// Write RTC Address + write mode |
7 | i2c_write(0x00); // Adresspointer auf 0 setzen |
8 | //~~~~~~~~~~~~~ Recive Date from Slave
|
9 | i2c_start(); // Start condition |
10 | i2c_write(RTC_SLAVE_ADDR | 0b00000001); // RTC Adressee schreiben + read mode |
11 | |
12 | Seconds = i2c_read(ACK); |
13 | Minutes = i2c_read(ACK); |
14 | Hour = i2c_read(ACK); |
15 | Day = i2c_read(ACK); |
16 | Date = i2c_read(ACK); |
17 | Month = i2c_read(ACK); |
18 | Year = i2c_read(NACK); |
19 | i2c_stop(); // Stop condition |
20 | //~~~~~~~~~~~~~ Strukturvariablen initialisieren
|
21 | date_time->sec = Bcd_2_Dec(Seconds); |
22 | date_time->min = Bcd_2_Dec(Minutes); |
23 | date_time->hour = Bcd_2_Dec(Hour); |
24 | date_time->day = Bcd_2_Dec(Day); |
25 | date_time->date = Bcd_2_Dec(Date); |
26 | date_time->mon = Bcd_2_Dec(Month); |
27 | date_time->year = Bcd_2_Dec(Year); |
28 | }
|
Bei mir war der Fehler, dass ich beim Setzen des Adresspointers die Sekunden überschrieben habe, an der Stelle: i2c_start(); // Start condition i2c_write(RTC_SLAVE_ADDR);// Write RTC Address + write mode i2c_write(0x00); // Adresspointer auf 0 setzen i2c_write(0x00); // Adresspointer auf 0 setzen //~~~~~~~~~~~~~ Recive Date from Slave i2c_start(); // Start condition
Moin ... Peter sagte schon, das er vermute, ein Kondensator sei beim Quarz nötig. Du sagst, du hättest es wie im Datenblatt angeschlossen, aber der Platinen- ausschnitt zeigt ja, das es nicht so ist. Im Datenblatt findest du einen Trimm-C am Quarz, und dieser ist wichtig! Genau den Fehler, den du hast, hatte ich auch, weil ich dachte, den weg- lassen zu können.. nachdem ich mir den Fehler nicht erklären konnte, habe ich gegooglet, die Lösung stand glaub ich sogar hier im Forum.. Nach hinzufügen des Trimm-C hat die Schaltung wunderbar funktioniert, frei auf Lochraster aufgebaut und so genau, das ich nicht wirklich die Nötigkeit sah, mehr als ne Woche drauf zu achten .. Gruss, Timmey
> Im Datenblatt findest du einen Trimm-C am Quarz Im Datenblatt der Dallas-Bausteine (z.B. DS1307) ist kein Trimm-C vorgesehen, ergibt auch keinen Sinn, denn wie sollte man die Kapazität beispielsweise verringern, wenn alles schon im Chip eingebaut ist? Der Chip stellt Cl = 12.5pF bereit. Das Quarz muss dazu passen, wie "0,032768-L6" von Reichelt.
Hallo zusammen, hier das ernüchternde Ergebnis seit gestern Abend: + 16sec Ich habe jetzt noch einmal in allen Datenblättern nachgelesen und stelle folgendes fest! 1. von zusätzlichen Kapazitäten zum Trimmen steht beim DS1337 und der AN58 von Maxim nichts!!! 2. bei den Uhrenquarzen die Reichelt so vertreibt gibt es kleine aber feine Unterschiede: -> der von mir verwendete 0,032768 Uhrenquarz (8mm x 3.1mm)besitzt 10pF Dazu ein Auszug aus der AN58 - von Maxim
1 | Fast Clocks: |
2 | |
3 | For example, using a crystal with a CL of 12pF on an RTC designed with a 6pF CL causes the RTC to be about 3 to 4 minutes per |
4 | month fast. |
-> der 0,032768-L6 Uhrenquarz (6mmx2mm) hat genau die benötigten 6pF (zu meiner Verteidigung, ich dachte ich habe den im selben Datenblatt dargestellten 8mm Quarz, welcher auch 6pF hat) Ich werde jetzt nochmal den Quarz austauschen (habe noch einen 0,032768-L6) und diesmal auch die 2 Beine des Chips von der Platine abheben... Morgen um diese Zeit sind wir dann wieder schlauer ;) Danke für die rege Beteilgung! Gruß Matthias
@Matthias: Moment mal, am Threadanfang ging die Uhr 10s am Tag vor, jetzt sind es bereits 16 Sekunden. Ich würde mal sagen da gehört wohl noch etwas Kapazität dazu, anstatt sie durch Ablöten und Platine abfräsen wegzunehmen. Die normalen Reichelt-Uhrenquarze sind bei mir am ATMega16 am 2. Oszillator recht genau, 1-3 Sekunden am Tag. Der Controller knallt dabei auf jeden Pin intern 36pF mit drauf. Klemm da probehalber einen Trimmkondensator mit drauf und gleich das Teil damit mal ab. Gruß Jadeclaw.
Hallo, nach langer Zeit hat der Verstand doch noch obsiegt. ;))))) Der letzte Aufbau hat ein Abweichung von <1s in den letzten 24Stunden. Ich freue mich das mein Glaube an die Technik wieder hergestellt ist.... Hauptproblem war also der 8mm Quarz von Reichelt, welcher nicht einfach der größere Bruder des 0,032768-L6 ist, sondern 10pf anstatt der 6pf Loadcapacitance besitzt. Daher noch einmal Vorsicht mit dem Datenblatt des 0,032768-L6 auf Reichelt.de, da ist auch eine 8mm Version mit 6pF, welche Reichelt aber nicht vertreibt!!!! Ich habe nun desweiteren aus der großen Groundplatte eine kleinere Massefläche herausgefräst (2mm Ring) oben und unten auf der Platine, welche mit einen feinen Steg an die Restmasse angeschlossen sind. Der Quarz schwebt frei, direkt an die Beines des ICs angelötet. Dies ist nun noch meine letzte Frage: Ich muss den Quarz fixieren (mechanisch wird das Gerät später stark beansprucht durch Vibrationen), vielleicht mit einen Klebstoffpunkt zwischen Platine und Quarzgehäuse?? Gibt es was zubeachten oder einen Tip? Danke noch einmal für die Unterstützung. Ich beobachte mal weiter die Genauigkeit und Poste wieder Gruß Matthias
@ Matthias Werner (macho2000) >Ich muss den Quarz fixieren (mechanisch wird das Gerät später stark >beansprucht durch Vibrationen), vielleicht mit einen Klebstoffpunkt >zwischen Platine und Quarzgehäuse?? Die Quarze gibt es im Metallgehäuse, die kann man auflöten. MFG Falk
> 10pf anstatt der 6pf Loadcapacitance besitzt
Quarze "besitzen" keine Load-Capacitance, sondern erforden eine. Der
Dallas-Chip ist für Quarze geeignet, die 12.5pF benötigen. Davon
abgesehen: wie kommst Du auf die Werte? Die Uhrenquarze bei Reichelt
erfordern, soweit ich das erkennen kann, entweder Cl = 12pF oder Cl =
12.5 pF (passt). Für das SMD-Quarz ist keine korrekte Load-Capacitance
angegeben. Ich habe es mal ausprobiert und es funktioniert nicht
richtig.
Moin, kurzer Input zur Genauigkeit: Ich habe seit September 07 eine Quarzuhr (keine DCF77-Synchronisation) laufen, die den Takt aus einem 8Mhz Quarzoszillator bekommt. Meine Uhrensoftware enthält eine Routine, die die Gang(un)genauigkeit des Quarzes ermittelt und eine (manuelle) Korrektur über eine Konstante zuläßt. Nach 8 Wochen laufzeit hatte ich die Uhr soweit abgeglichen (regelmäßiger Vergleich mit einem DCF77-Wecker und Änderung des Korrekturfaktors), daß sie im Moment (nach 10 Wochen Laufzeit) weniger als 1 Sekunde von der DCF77-Zeit abweicht. Gruß Andreas
Hallo, ich muss mich leider noch einmal melden und berichten das meine RTC wieder so falsch geht, wie am Anfang! Ich habe jetzt seit Di jeden abend um 8Uhr die Uhr für 10s angeschaltet und die Abweichung aufgeschrieben. Am Di. waren dies <1s, am Mi. schon 10s, gestern waren es 25s und heute 45s!!! Sie scheint immer schneller zu werden. Sehr komisch... mein Verdacht, ich mache mit dem Kondensator für das TimeKeeping was falsch. Also sich versorge über eine BAT43 einen 0.1µF GoldCAP, welcher direkt am DS1337 hängt. Die Diode soll verhindern, dass der GoldCap die Restschaltung speißt. Kann da was falsch sein, dass vielleicht den Quarz verstimmt??? gruß MAtthias
Hallo Matthias, eine geniale Idee habe ich leider nicht zu dem Problem. Es interessiert mich aber sehr. Ungeeignete Quarze äußern sich aber gewöhnlich in einer konstanten Abweichung - dass sie bei Raumtemperatur zufällige Abweichungen haben sollen, ist ungewöhnlich. Schau Dir mal die Versorgungsspannung an, wenn die Uhr längere Zeit aus dem Goldcap gespeist wird: sinkt die Spannung vielleicht unerwartet stark ab? Die BAT43 hat meiner Erfahrung nach einen recht hohen Rückwärtsstrom und es kann sein, dass sich der Goldcap schnell entleert. Bei meinen RTCs äußerten sich fast leere Batterien häufig in einer zu schnell laufenden Uhr. Ein 100nF Kondensator zwischen Vcc und GND an der DS1337 kann auch nicht schaden. Viel Glück, Michael
> Restschaltung außer Betrieb, d.h. die RTC lief nur alleine [...] mein Verdacht,
ich mache mit dem Kondensator für das TimeKeeping was
falsch.
Die Genauigkeit bei angeschalteter Versorgung (nach dem Anlöten des
Quarz) schon gemessen?
Hallo alle zusammen, ich habe jetzt noch einmal einen 100nF Kondensator direkt an die RTC angeschlossen, aber keine Verbesserung erzielt. Den GoldCap habe ich mal vermessen und der hat nach einem Tag noch 4,1V. Wenn die Schaltung aktiv ist ändert sich die Genauigkeit nicht großartig. Wenn die Schaltung aktiv ist wird im Moment ca. alle 100ms Datum und Zeit ausgelesen (Worst Case, da das Zeitschlitzverfahren noch nicht läuft in meiner Software). Ich habe heute morgen mal meine RTC-Entwicklungsplatine reaktiviert und schaue mal nach der Genauigkeit. Ich muss schon sagen, dass ich mittlerweile ziemlich deprimiert bin, da ich diesen Teil meines Projektes wirklich nicht als so problematisch eingestuft hatte. Gruß
HAllo, so da bin ich wieder... Ich habe nun seit So. 10Uhr meine RTC (SOIC) und die RTC-Testplatine (PDIP im Sockel)(beide mit DS1337 und 0,032768-L6) laufen. Die Testplatine hat ebenfalls einen 0.1µF GoldCAP. Bei den Beiden habe ich jetzt eine Abweichung von +10s (Mo. 18.00Uhr) die sich konstant im Gleichgang entwickelt. Nun habe ich noch mal in den ganzen Datenblättern gewühlt und habe folgendes gefunden. Der DS1337 benötigt ja unbedingt eine Last Kapazität von 6pF. Ist die Last Kapazität größer geht die Uhr zu schnell. In dem Datenblatt des 0,032768-L6 bei Reichelt steht zur Last Kapazität (C4Type) "CL: 6pF to unlimit ; please specify" Im Reichelt Katalog steht "CL: 12pF" Das heißt, ich gehe nun davon aus, dass meine Quarze für eine Last Kapazität CL=12pF ausgelegt sind. Dies könnte die simultane Abweichung erklären... Nun meine Frage: 1. Hat überhaupt schon mal jemand mit den Quarzen von Reichelt und den DS1337/1307 etc. eine genaue RTC gebaut? 2. Ich habe versucht Quarze mit 6pF im Internet ausfindig zu machen, konnte aber keinen Onlinshop finden, der diese Quarze vertreibt. Fast alle angebotenen Quarze sind für 12pF ausgelegt. Gruß Matthias
Tausch doch einfach den Chip und nimm DS1307 statt DS1337. DS1307 benötigt 12.5pF und ist damit genau passend für das Reichelt-Quarz - und pinkompatibel (ohne Gewähr).
> benötigt 12.5p
Jetzt fange ich auch schon mit dem Quatsch an. Bietet 12.5pF.
wenigstens ist jetzt die Ursache klar! Ich arbeite bisher nur mit der DS1307, weil ich gerne die 56Bytes SRAM für Variablen (Einstelldaten, Zeiger auf das EEPROM, etc.) verwende. Und die läuft meiner Erfahrung nach tatsächlich recht genau. Pass aber bei der Beschaltung auf, die DS1307 ist nicht pinkompatibel zur DS1337! Sie verwendet vor allem eine andere Batterie-Beschaltung. Ein Goldcap ist dafür nicht gut geeignet (Datenblatt!), ich verwende immer eine 3V Lithium-Zelle. Recht genau und langzeitstabil arbeitet meiner Erfahrung nach auch ein PCF8583, wenn man mit dem vorgeschlagenen Trimmkondensator einen Abgleich durchführt. Gruß Michael
HAllo zusammen, da bin ich aber froh das es sich doch noch aufgeklärt hat. danke noch mal Dietmar für die Guten Tips. Ich habe doch tatsächlich einen DS1307 in meiner Kiste noch gefunden und der läuft seit 5h in meinem Testboard. fehlerfrei... ;) jetzt habe ich nur noch ein Problem. Der DS1307 ist wie Michael richtig schreibt nicht ganz PIN - Kompartibel, wegen der Batterie. Weiss jemand ob ich den GoldCAP mit einer geringen Beschaltungsänderung anstatt der Batterie einsetzen kann? Wie müsste so eine Schaltung aussehen, damit der GoldCap an U_bat angeschlossen werden kann? Oder alternativ, wo bekomme ich einen kleinen 3V-Akku her? Oder nehmt Ihr alle Batterien. Vielen Dank
Hallo Matthias, den DS1307 verwende ich ausschließlich mit einer Batterie, meist CR2032. Er sollte damit über 10 Jahre laufen, zum Lagern kann man mittels Befehl die Uhr abschalten und sich so die "beliebten" Plastikstreifen im Batteriefach sparen. Die hohe Spannung (bis 5V möglich) des Goldcap sind m. E. der Genauigkeit nicht zuträglich. Den PCF8583 verwende ich dagegen ausschließlich mit Goldcap. Den kann man mittels Trimmkondensator leicht auf die durchschnittliche Ubatt abgleichen. Gruß Michael
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.