Forum: Mikrocontroller und Digitale Elektronik RTC PCF 8583 Uhrenprobleme


von Daniel (Gast)


Lesenswert?

Hallo,

ich habe mir einen kleinen I2C Bus mit PCF8583 und ATMega8 aufgebaut.
Am RTC hängt ein 32kHz Quarz und 22pF gegen Masse dran (wie auch im
Datenblatt dargestellt). Die Ansprache des mitintegrierten Ram
funktioniert ohne Probleme.
Allerdings komme ich mit der Uhrenfunktion schon nicht klar.
In das Control-Register (Adresse: 0) habe ich 0 reingeschrieben, so
müsste er eigentlich laufen, tut er auch, aber viel zu schnell (es
stimmt schon, dass die Sekunden 0..9 und die 10 Sekunden jeweils
getrennt in Hi und Lo Byte gezählt werden? Ich habe nämlich auch schon
anderes gesehen!)
10 RTC-Sekunden dauern ungefähr 6 reale Sekunden... Das hat doch dann
nix mehr mit trimmen zu tun, oder?
Kann es sein, dass die RTC kaputt ist, oder ist wahrscheinlich der
Quarz nicht richtig? Der hat leider keine Beschriftung, hab ihn aber
beim lokalen Händler so gekauft...

Über Hilfe würde ich mich freuen,

Daniel

von Eddi (Gast)


Lesenswert?

Hallo Daniel

Wenn ich das Datenblatt lese sehe ich einen Kondensator vom Pin OSCI
nach Plus und nicht nach Masse.
Bei mir hab ich 15pF nach +5V und die Uhr läuft recht genau.


Gruß
Eddi

von A.K. (Gast)


Lesenswert?

Den Kondensator hatte ich zunächst komplett übersehen - es lief zwar,
aber reichlich ungenau. Wenn's genau sein soll, dann Trimmkondensator.

von Daniel (Gast)


Lesenswert?

Also ich hab jetzt den Kondensator auf den Pluspol umgelötet... (vielen
Dank für den Hinweis!)

Leider besteht das Problem weiterhin. Das Control-Register an Adresse 0
programmiere ich mit 0, den Rest lasse ich wie er ist.

Trotzdem läuft die Uhr um einiges zu schnell. für 10 RTC-Sekunden
benötigt sie ungefähr 5,4 reale Sekunden...

Könnte das noch an etwas anderem liegen als an dem Quarz?
Ich habe leider keinen Frequenzzähler, um die Quarzfrequenz
nachzuprüfen.

Vielen Dank,

Daniel

von A.K. (Gast)


Lesenswert?

Schwer etwas anderes dazu zu sagen als "bei mir funktioniert es". Ein
paar Sekunden am Tag falsch, ungetrimmt.

Diese Uhrenquarze haben eine recht markante Bauform. Andere Werte in
dieser Bauform gibt es im üblichen Handel so gut wie nicht.

Control=0 ist ok, wobei man während des Einstellens der Zeit auf 0x80
gehe sollte, Definitiv kein Programmfehler?

von Michael (Gast)


Lesenswert?

In Deiner Schaltung sehe ich keinen Elko (10µF) zwischen Pin 8 und Pin 4
vom PCF8583. Fehlt der etwa ?

von A.K. (Gast)


Lesenswert?

Einen Elko würde ich da lieber nicht verwenden, hat keinen Sinn dessen
Selbstentladung mit Batterien zu finanzieren. Aber einen 100nF
Keramik-Kondensator halte ich für sinnvoll - sollte ohnehin an jedes IC
dran.

von Michael (Gast)


Lesenswert?

<<Einen Elko würde ich da lieber nicht verwenden, hat keinen Sinn dessen
Selbstentladung mit Batterien zu finanzieren.>>

Ich dachte der 1. April kommt erst noch !

von Daniel (Gast)


Lesenswert?

Ja der Elko fehlt... dachte der Elko am AVR reicht...?
Dann mach ich da mal noch einen hin.

von A.K. (Gast)


Lesenswert?

@Michael: Missverständnis? Daniel hatte ein paar Tage vorher nach der
Beschaltung vom 8583 mit Batterie/wasauchimmer. gefragt. Meine Antwort
waren 2 Dioden und eine kleine Lithiumzelle. Ich ging davon aus, dass
er dies realisiert hat. Da ergibt ein Elko keinen Sinn, der reduziert
dann nur die Lebensdauer der Batterie.

von Daniel (Gast)


Lesenswert?

Wie kommmen wir eigentlich auf die Batterie? Den einzigen Kondensator,
den ich erwähnt habe war der am Quarz und das waren doch 22pF?

Die RTC an sich hab ich jetzt mit einem Goldcap über eine Diode
gepuffert, der wiederum (derzeit noch) von einem Spannungsteiler aus
zwei Widerständen geladen wird, aber natürlich ist der RTC wiederum
über eine Diode (gegen entladen des Cap) an Vcc.
(Ist das nicht gut so?)

Aber meine Frage war wieso denn der RTC ca 2x so schnell läuft wie die
Realität;-) Ob damit irgendjemand was dazu weiß.

Vielleicht hängt das ganze aber auch mit meinem I2C-Problem zusammen??
(siehe http://www.mikrocontroller.net/forum/read-1-169407.html)
Mittlerweile bekomme ich es nämlich nicht mehr hin den 8583 ordentlich
anzusprechen...

Schöne Ostern noch!

Daniel

von A.K. (Gast)


Lesenswert?

Mach mal ein Bild draus.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Also hier wäre mal die Grundschaltung (wenigstens SDA und SCL sind
richtig verbunden, da bin ich mir sicher):




               PCF8574     ST24C02  Pullups    PCF8583
ATMega--+-------+------------+------+-------------+
        |
        |
     PCF8574

Und hier die Beschaltung des PCF 8583:
               VCC
                +                               200Ohm
                |                      VCC     .|___|-VCC
                |                       +      | _
               ---                      |      ||___|-GND
               ---                      |      | 200Ohm
                |                       V      V
                '-------.               -      -
               -      |           __  |      |  +[/
              |___|     '---------o|  |o--|<-------[|-GND
                -        ---------o|  |o-          [\
                '-------'        .o|  |o-SCL     GoldCap
                                 )o|__|o-SDA
                                 |
                                 |
                                 |
                                ===
                                GND

(created by AACircuit v1.28.5 beta 02/06/05 www.tech-chat.de)

32678 Hz. Der Kondensator hat 22pF und der GoldCap 3,3F.
Ich habe 5V Versorgungsspannung.

Ich hab mal mein aktuelles Testprogramm angehängt... Vielleicht gibts
da ja einen Fehler (die I2C Routinen sind von ATMEL (Appnote 315) ich
habe nur die Namen geändert).

Viele Grüße,

Daniel

von A.K. (Gast)


Lesenswert?

Ist der Goldcap allergisch auf 4,5V? Die können doch normalerweise 5,5V.
Was also spricht gegen

                          VCC
                           |
                           V
                           -
                     __    |    _
                  -o|  |o--o---|___|---.
                  -o|  |o-             |+
                  -o|  |o-            ===
                  -o|__|o-            /-\
                                       |
                                       |
                                      ===
                                      GND
(created by AACircuit v1.28.5 beta 02/06/05 www.tech-chat.de)

von A.K. (Gast)


Lesenswert?

Oder, um auf die Frage nach einem Kondensator zurückzukommen.
Ein weiterer Elko ist da freilich sinnlos.

SDA/SCL haben aber schon je einen Pullup dran (z.B. 4K7)?

                           VCC
                            +
                            |
                            |
                            V 1N4148
                            -
                            |
                    __      |   _
                 -o|  |o----o--|220|--.
                 -o|  |o-   |         |
                 -o|  |o-   |         |+
                 -o|__|o-  ---       ===
                           ---       /-\ 3.3F
                            |100n     | Goldcap 5.5V
                            |         |
                           ===       ===
                           GND       GND

(created by AACircuit v1.28.5 beta 02/06/05 www.tech-chat.de)

von Daniel (Gast)


Lesenswert?

Also mein Goldcap soll maximal 2,5 V bekommen, daher der
Spannungsteiler, der wird aber bald durch einen Spannungsregler
ersetzt...

Die Pullups sind zwischen dem Seriellen EEPROM und dem RTC angebracht.
Ist das ok? Oder müssten die am Ende der Leitung sein? Dürfte doch
eigentlich nix ausmachen...

Grüße,

Daniel

von Jens (Gast)


Lesenswert?

Misch mich jetzt auch mal hier ein!

Will auch bald mit dem PCF8583 arbeiten!

@Daniel Haste die Pullups an VCC von der ganzen Schaltung oder an VCC
vom PCF8583 (diese ist ja dank deinen Dioden n bissel kleiner). Könnte
ja sein das der PCF8583 nicht damit klar kommt, wenn an SCL und SDA
höhere Spannung anliegt als seine Versorgungsspannung ist?

von Daniel (Gast)


Lesenswert?

Hallo,

also die Pullups sind an "normales" VCC aber der PCF hat im
Normalbetrieb über die Diode ja auch 5 V nur wenn der Strom
ausgeschalten wird erhält er 2,5 V vom Goldcap. Der
Spannungsunterschied kommt höchstens noch dadurch zustande, dass eine
Diode vor den Vcc Eingang geschaltet ist. Das wäre auf jeden Fall mal
ein Versuch wert das ohne die zu machen...

Grüße,

Daniel

von Daniel (Gast)


Lesenswert?

Ok Jungs, vielen vielen Dank für die Hilfe!

Ich hatte in die TWI_Master.h so abgeändert, dass ich auch den
Prescaler einstellen konnte, leider habe ich vergessen diesen Effekt
aus dem TWSR-Register in der Interrupt Routine rauszumachen... ist ja
klar, dass das nicht funktioniert... so wurden natürlich immer falsche
Statuscodes behandelt!

Blödheit tut weh! Ich habe mindestens 10 Std. daran gesessen den Fehler
zu suchen, weil ich meine "kleine Codeänderung" schon wieder vergessen
hatte...

Ich hoffe ich lerne daraus... Ich versuche ja immernoch die
"Null-Fehler-Produktion" einzuführen...
Wie macht ihr das eigentlich? Wieviel Zeit geht bei euch für die
Fehlersuche drauf? Braucht ihr das überhaupt?

Viele Grüße,

Daniel

von Casper (Gast)


Lesenswert?

@Daniel
Zitat "Ich hatte in die TWI_Master.h so abgeändert, dass ich auch den
Prescaler einstellen konnte, leider habe ich vergessen diesen Effekt
aus dem TWSR-Register in der Interrupt Routine rauszumachen... ist ja
klar, dass das nicht funktioniert... so wurden natürlich immer falsche
Statuscodes behandelt!

Hää??? Was ist damit gemeint? Kann man so einen Baustein nicht in den
Sockel setzen und erwarten dass er läuft?

von Daniel (Gast)


Lesenswert?

Ja aber ich wollte doch die Geschwindigkeit des TWI einstellen, dies
funktioniert über Prescaler und noch ein Register. Leider wird der
Prescaler in den Original-Dateien von Atmel nicht verwendet und ist
daher Null... Ich habe ihn aber anders gesetzt, weil ich die
Geschwindigkeit nicht so hoch brauche...

Aber gleichzeitig wird das Register für den Prescaler auch noch für den
Statuscode verwendet, der wiederum in der Interruptroutine verwendet
wird um das weitere Vorgehen zu bestimmen...

Irgendwie schon blöd!

von Casper (Gast)


Lesenswert?

@daniel
Was du da beschreibst stammt doch aus dem Prozessor, wieso läuft
dadurch die Uhr schneller?

von Daniel (Gast)


Lesenswert?

@Casper:
Ne das war nicht darauf bezogen, ich habe nur versucht, weil mein
TWI-Bus nicht richtig funktioniert hat, einfach mal die Geschwindigkeit
zu reduzieren.
Aber abgesehen davon geht die Uhr immer noch zu schnell, ich werde mir
nochmal alle Komponenten nachbestellen und dann auf Fehlersuche
gehen...

Viele Grüße,

Daniel

von Peter D. (peda)


Lesenswert?

Such mal im 8052.com Forum.

Da war irgendwas über einen buggy RTC, wenn man den zu oft ausliest,
spinnt der. Man soll ihn wohl nur einmal je s auslesen. Könnte der 8583
gewesen sein.


Ich weiß schon, warum ich mir solchen Unsinn spare und einfach einen
Timerinterrupt zum Zeitzählen nehme. Kostet wenig Code und Rechenzeit
und funktioniert immer auf Anhieb. Und nen Timerinterrupt hat man
meistens eh schon laufen (Tasten entprellen usw.).


Peter

von Michael (Gast)


Lesenswert?

" Da war irgendwas über einen buggy RTC, wenn man den zu oft ausliest,
spinnt der. Man soll ihn wohl nur einmal je s auslesen. Könnte der 8583
gewesen sein. "

Früher hatte ich Probleme beim zu schnellen Auslesen mit einem 'C552;
dann hatte hier jemand (im letzten Jahr) berichtet, daß wäre kein
Problem mehr. Dennoch würde ich die Abfragefrequenz auf <100/sek.
halten. Probieren, neue Bauteile würde ich nicht bestellen.

von Daniel (Gast)


Lesenswert?

Danke für den guten Tipp, aber auch wenn ich in der Abfrageschleife eine
 lange Pause einbaue geht die Uhr mehr als 2mal zu schnell!
Vielleicht habe ich einfach den Chip beim löten gebraten...;-) Oder der
Kondensator ist falsch.

Werd erstmal den Kondensator ersetzen...

Irgendwann wird es schon gehen... Jetzt habe ich auch wenigstens ein
Display am Controller, dann muss ich die sekunden nicht mehr
mitzählen...;-)

Viele Grüße,

Daniel

von Daniel (Gast)


Lesenswert?

Also... so ein Display hat schon deutliche Vorteile...

Die Uhr scheint jetzt relativ genau zu gehen.
Aber auch nur weil ich sie im Moment nur jede Stunde einmal abfrage.
Jede Sekunde scheint absolut zu viel zu sein, dann läuft sie rasend
schnell.
Naja für meine Zwecke reicht das jetzt. Ich werde dann sowieso den
Alarm und den Interupt verwenden. das funktioniert dann hoffentlich!

Vielen Dank für die Tipps!!

Daniel

von SuperGrobi (Gast)


Lesenswert?

Hab zufällig gerad die Probleme von Daniel mit dem PCF8583
nachvollzogen.

also von vorn:
Hab mir den I²C mit PCF8583 aufgebaut und gestartet, lief alles ohne
Probleme, die Uhr wird ständig in einer Endlosschleife ausgelesen und
läuft auch sehr genau.
Nun dachte ich mir, da es ja blöd ist, wenn ich die Spannung abschalte,
das dann die Uhr immer gelöscht wird, also GoldCap her - natürlich
extra-groß :) mit 10F jedoch nur 2,5 V.
Hab mir dann einen Spannungsteiler 2*330 genommen um daraus die 2,5V
aus den 5V zu erzeugen. Bis hier hin funktionierte auch alles noch
einwandfrei. Jedoch etlädt sich der GoldCap ja jetzt noch über die
Wiederstände, also 3 Dioden rein. Stinknormale 4148er.
Eine von der mitte der beiden Wiederstäde zum GoldCap (kommen jetzt nur
noch 2,2V an) eine von dort weiter zum PCF VDD(Pin8) und eine von 5V an
PCF VDD(Pin8).
Jetzt lief die Uhr merklich schneller. Ca. 20Sek in 15 realen Sekunden.
Hab nun die Spannung nachgemessen, am Pin8 des PCF kommen nur noch 4,3V
an. Also alle Dioden gegen Schottky (BAT42) getauscht, jetzt kommen ca.
4,5 V an und die Uhr läuft wieder mit normaler Geschwindigkeit.

Vielleicht hilft das ja bei dir auch ?

gruß
Thomas

von A.K. (Gast)


Lesenswert?

Wobei Schottky-Dioden einen gegenüber Siliziumdioden sehr viel höheren
Sperrstrom haben. Ist hier aber mit max. 0,5µA wohl noch akzeptabel.

Stellt sich mir aber die Frage, ob 2,5V Goldcaps beim 8583 wirklich die
sinnvollste Lösung sind. Lithiumzellen sind auch mit Fassung nicht
grösser, liefern Strom für Jahre und sind noch dazu billiger.

von SuperGrobi (Gast)


Lesenswert?

ich hab mir das bis jetzt nur auf nem Steckbrett zusammengehauen,
einfach nur um zu sehen ob es klappt... :)

Was bedeutet der höhere Sperrstrom ?
ist das der Strom, der in Sperr-Richtung fließt ?

gruß
Thomas

von A.K. (Gast)


Lesenswert?

Ja. Der 8583 frisst im Standby 2µA. In der Schaltung sind dann 2 Dioden
gesperrt und erhöhen den Entladestrom vom Goldcap um jeweils max.
0,5µA.

von A.K. (Gast)


Lesenswert?

Der Vollständigkeit halber: Bei 100°C liegt der maximale Sperrstrom bei
100µA. Also besser kühl halten.

von michael NF (Gast)


Lesenswert?

also: bei mir läuft das teil mit der 3 V li-Batterie CR2032, einen
kondensator an der stromversorgung brauchst du unbedingt, habe selbst
merkwürdige effekte beobachtet ohne einen kondensator. ein normaler 10
Mikrofarad hat nicht den strom erhöht, kann aber noch kommen...

sekunden: auslesen der adresse 2
minuten: adr 3
stunden: adr4 & 0x3F

klappt seit jahren, der zeitfehler hält sich in grenzen... finde der
chip ist etwas zu teuer.
gruss michael

von A.K. (Gast)


Lesenswert?

Kondensator ja, aber keinen Elko verwenden sondern einen keramischen
(100nF).

von Daniel (Gast)


Lesenswert?

Diese Anweisungen werden ausgeführt, um einen Alarm mit Interrupt zu
programmieren.
Könne mir jemand mal sagen, ob das normalerweise so funktionieren
müsste?

[...]
messageBuf[0]=DevRTC+TWIWrite;
messageBuf[1]=0x08;
messageBuf[2]=0b10010000;        // Alarm löst interrupt aus, kein
Timer, täglicher Alarm!

messageBuf[4]=0b00000000;        // keine 100stel Sekunden
messageBuf[5]=(min & 0b11110000);// alarm jede minute!
sekundenregister
messageBuf[6]=std;    // minuten
messageBuf[7]=messageBuf[4];  // stunden
TWISend(messageBuf,8);

messageBuf[0]=DevRTC+TWIWrite;
messageBuf[1]=0x0;
messageBuf[2]=0b00000100;  // Starten
TWISend(messageBuf,3);
[...]

Vielen Dank,

Daniel

von Daniel (Gast)


Lesenswert?

Hab vergessen zu erwähnen.
Bei mir funktioniert es so nicht, aber vielleicht sollte es ja
funktionieren...

Vielen Dank,

Daniel

von Condor (Gast)


Lesenswert?

Hallo

euer problem mit der spannung ligt wohl darin das der IC mit 4v versort
wird aber die i²c leitungen 5v haben........

von klein (Gast)


Lesenswert?

@Condor
war das 'ne Frage oder hast du das als Erklärung geschrieben ?

von Daniel (Gast)


Lesenswert?

und wie umgehe ich das Problem der Spannungsdifferenz?
Die Diode muss da drin sein...

von Condor (Gast)


Lesenswert?

in die I²C leitungen gehören noch widerstände zusammen mit den pullup
geben die so eine art spannungsteiler....

von Daniel (Gast)


Lesenswert?

Hallo Condor!

Sorry, dass ich so lange für die Antwort gebraucht habe.
Wie müssen die Widerstände dann da rein? Von SDA/SCL nach Minus oder
direkt an den jeweiligen Port? Wie würde ich die dann berechnen? ich
habe jetzt Pullups von 4k7 Ohm.

Vielen Dank,

Daniel

von Daniel (Gast)


Lesenswert?

Ok also mein Problem war schlussendlich folgendes: Der Oszi wird ja mit
Vdd verbunden. Natürlich habe ich das allgemeine Vdd genommen und nicht
das individuelle Vdd, daher war nicht die Spannungsdifferenz zu den I2C
Leitungen wichtig (das steht ja auch so im Datenblatt), sondern die
Differenz zum Oszilator. Und das führte dazu, dass der schneller lief.

Viele Grüße,

Daniel

von Jens (Gast)


Lesenswert?

Danke, das war auch bei mir die Lösung: Trimmer an das richtige Vdd und 
schon stimmt der Takt (1Hz an INT).

Gruß Jens

von der alte Hanns (Gast)


Lesenswert?

Ein 'Danke' ist ja meist gern gesehen, aber nach achteinhalb Jahren?

von Paul Baumann (Gast)


Lesenswert?

Der alte Hans schrob:
>Ein 'Danke' ist ja meist gern gesehen, aber nach achteinhalb Jahren?

Warum denn nicht? Bei einer Silberhochzeit ist ein "Danke" sogar nach
25 Jahren angebracht.
;-)
MfG Paul

von der alte Hanns (Gast)


Lesenswert?

Nun, Herr Bauman, da kann ich nicht mitreden, so lange hat's noch keine 
mit mir ausgehalten.

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
Noch kein Account? Hier anmelden.