Forum: Mikrocontroller und Digitale Elektronik DS1307 verhält sich komisch


von Liu (Gast)


Lesenswert?

Hey,

Ich habe eine eigene Routine zum beschreiben und auslesen eines DS1307 
geschrieben. Die funktioniert auch soweit ganz gut, hab mir die 
Übertragung mal am Oszilloskop angesehen.
Leider hab ich momentan keins mehr zur Verfügung und habe jetzt 
folgendes Problem:

Jenachdem wie ich die CLK Frequenz wähle bekomme ich teilweise 
unterschiedliche Registerinhalte.
Ich hab eine Testroutine geschrieben die jede Sekunde das 
Sekundenregiter ausliest. Wenn ich z.B. mit 10kHz auslese bekomme ich 
andere Werte als wenn ich mit 15kHz auslese. Größtenteils stimmt der 
Registerinhalt auch mit der Sekunde überein, ab und zu mal bekomme ich 
aber ganz komische Werte, z.B. 96 (wenn eigentlich 40 Sekunden sind). 
Hab schon verschiedene PullUps probiert, kurze Leitungen verwendet, den 
DS1307 getauscht...aber bringt alles nix. Nur noch den Quarz könnte ich 
tauschen.

Hatte vllt mal jemand ein ähnliches Problem oder weiß was das sein 
könnte?
An der Routine sollte es eig. nicht liegen, wie gesagt auf dem 
Oszilloskop sah alles super aus.
Freue mich auf Kommentare:)

Grüße Liu

von Patrick B. (p51d)


Angehängte Dateien:

Lesenswert?

Code?

Vermischts du nicht noch ACKs in die Werte?

Habe selber einmal mit dem DS1307 experimentiert... kann dir aber nicht 
mehr sagen, was alles wie eingebunden werden muss. Hab das Programm noch 
gefunden. Eventuell siehst du ja eine Differenz (Bei mir hats 
funktioniert).

MFG
Patrick

von Liu (Gast)


Lesenswert?

Hey Patrick,
Vielen Dank für deine Antwort.
Leider hilft mir das nicht viel weiter, ich hab die kompletten 
Funktionen wir schrieben, lesen etc. selber geschrieben, also ohne I2C.

Also so dass ein Timer mir meinen CLK auf einen Pin legt und ich dann 
über Routinen die Daten auf dem SDA einlese bzw. ausgebe

von Patrick B. (p51d)


Lesenswert?

Dann zeig mal den Code. Tut mir leid, aber meine Kristallkugel ist 
gerade in Revision...

Gibst du auch wirklich 9 Clocks aus? Damit das ACK auch wieder 
eingelesen/ausgegeben werden kann?
Nach jedem Byte braucht es ein ACK beim Lesen (Empfang bestätigen) und 
die DS1307 gibt auch eines zurück, um den Empfang bestätigen. So kannst 
du auch noch ein Fehlerprotokoll einbinden.
PullUps bei Data und SCK sind 2k2.
Welche Frequenzen hast du Probiert? Ich würde 100kHz (Standart) nehmen, 
da du sonst Probleme mit der Geschwindigkeit bekommen könntest.

MFG
Patrick

von Liu (Gast)


Lesenswert?

Code hab ich grad nicht hier, stell ich später rein.
Die 100kHz schaff ich nicht ganz, hab das ganze mal aufm Oskar 
angeschaut aber bei 100kHz haben die Signale nicht mehr gepasst. 
Verwende einen ATMega32 mit 8Mhz interer Takt.

Kann es vllt sein dass der Prozessor den Code bei 100kHz nicht so 
schnell verarbeiten kann und ich deshalb die Probleme bekomme?

von Patrick B. (p51d)


Lesenswert?

Kommt auf dein Programm an. Wenn die Bits über TimerISR herausgeschoben 
werden, sollte es schon reichen.

Aber das kannst du ja im Simulator nachmessen.

von Bernhard S. (bernhard)


Lesenswert?


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.