Forum: Mikrocontroller und Digitale Elektronik Auslesen von Daten funktioniert nicht(c8051f020 interfacing mit DS1307)


von Samuel G. (Firma: Brusa HyPower) (unsigned_long)


Angehängte Dateien:

Lesenswert?

Hallo miteinander,

Ich soll für ein Projekt mit einem C8051f020 und einer DS1307 die Zeit 
überwachen. Jedoch funktioniert das auslesen der Zeit nicht. Ich kann 
Daten Senden und empfange ACK's von der DS1307, beim auslesen der Zeit 
lese ich aber das aus:
[h03 h80 h00 h00 h00 h00 h00]

h03 im second-Register ist ja noch plausibel aber h80 im minute-Register 
sollte gar nicht möglich sein.
gesendet habe ich das:
[h0A h0A h0A h07 h0A h0A h0A]

Das Kontrollregister für den SQW-Output wurde hier nicht ausgelesen.
die Werte ändern nicht da der Quarz auch noch nicht wirklich 
funktioniert das sollte aber für das Testen vom Senden und Lesen von 
Daten laut diesem Beitrag kein Problem sein.
[[Beitrag "DS1307 - Oszillator schwing nicht"]]

Hab Die DS1307 schon drei mal ausgewechselt und bin langsam am ende mit 
den Ideen.
Hab auch noch den Code als Textdatei angefügt falls sich den jemand 
anschauen möchte, der Code ist aber noch recht schlecht kommentiert.

wäre dankbar für jede Hilfe

Samuel

von Peter D. (peda)


Lesenswert?

Wo hast Du den Code her?
Ich kenne das so, daß man das Interruptflag immer erst als letztes 
löschen darf. Das ist nämlich das Zeichen für den Controller, die 
nächste Aktion zu starten.

"The serial data in the register remains stable as long as the SI flag 
is set. When the SI flag is not set, the system may be in the process of 
shifting data in/out and the CPU should not attempt to access this 
register."

von Peter D. (peda)


Lesenswert?

Samuel G. schrieb:
> Hab auch noch den Code als Textdatei angefügt

Schlechte Idee :-(
Laß ihn als *.c, dann kann man ihn besser lesen und muß ihn nicht erst 
umbenennen.

von Samuel G. (Firma: Brusa HyPower) (unsigned_long)


Lesenswert?

Peter D. schrieb:
> Wo hast Du den Code her?
Den hab selber geschrieben.

> Ich kenne das so, daß man das Interruptflag immer erst als letztes
>löschen darf. Das ist nämlich das Zeichen für den Controller, die
>nächste Aktion zu starten.
So wie ich das verstanden habe wird das SI-Bit von der Hardware gesetzt 
und
muss vom Code zurückgesetzt werden. deshalb habe ich immer am Anfang von
einem Case das SI-Bit zurückgesetzt was ja eigentlich den gleichen 
Effekt haben müsste wie das SI-Bit am Ende des Letzten Case 
zurückzusetzen.
Ich habe es ausprobiert, hats aber leider nicht besser gemacht.
Hättest du vielleicht ein Beispiel?
Gruss
Samuel

: Bearbeitet durch User
von Samuel G. (Firma: Brusa HyPower) (unsigned_long)


Angehängte Dateien:

Lesenswert?

Peter D. schrieb:
> Schlechte Idee :-(
> Laß ihn als *.c, dann kann man ihn besser lesen und muß ihn nicht erst
> umbenennen.
Hier hast du noch die .c und .h files.
Ich hab auch noch einen Sreenshot vom Scope gemacht das man sehen kann 
was ich sende und empfange.
Hab vergessen die Bilder umzubenennen,
Scope_33 ist das senden und scope_32 das empfangen.
Übrigens empfange ich immer das gleiche unabhängig davon was ich sende, 
dass hatte ich noch vergessen zu erwähnen.

Gruss
Samuel

von red cruiser (Gast)


Lesenswert?

Mal die entsprechenden Datasheets lesen - Vcc der Bausteine beachten!

von Samuel G. (Firma: Brusa HyPower) (unsigned_long)


Lesenswert?

Die Datenblätter habe ich zu genüge studiert. Der 8051 hat zwar 3.3V 
Logik und die DS1307 5V Logik die Spannungslevel der Low -und Highpegel 
auf der SDA und SCL line stimmen trotzdem überrein.

von Peter D. (peda)


Lesenswert?

Samuel G. schrieb:
> da der Quarz auch noch nicht wirklich
> funktioniert

Der muß laufen, sonst werden die Daten nicht ins Zählregister 
übernommen.

Probier mal schreiben und lesen des RAM.

von uff basse (Gast)


Lesenswert?

Samuel G. schrieb:
> Die Datenblätter habe ich zu genüge studiert.

Offensichtlich nicht wirklich .....

Ich habe deinen chaotischen Code nicht tiefgründig durchforstet,
finde aber auf die Schelle keinen Code der die Uhr initialisiert
bzw. den Oszillator explizit startet.

von Samuel G. (Firma: Brusa HyPower) (unsigned_long)


Lesenswert?

uff basse schrieb:
> Ich habe deinen chaotischen Code nicht tiefgründig durchforstet,
> finde aber auf die Schelle keinen Code der die Uhr initialisiert
> bzw. den Oszillator explizit startet.
Ja der Code ist noch recht unübersichtlich, der Oszillator wird 
gestartet wenn das Clock Halt Bit(Bit 7 im Sekunden Register) auf 0 
gesetzt wird. Das bedeutet sobald ich einen gültigen Wert ins Sekunden 
Register schreibe müsste der Oszillator starten.

von Samuel G. (Firma: Brusa HyPower) (unsigned_long)


Lesenswert?

Peter D. schrieb:
> Samuel G. schrieb:
>> da der Quarz auch noch nicht wirklich
>> funktioniert
>
> Der muß laufen, sonst werden die Daten nicht ins Zählregister
> übernommen.
Meinst du mit Zählregister das Timekeeper Register? Unter counting 
register finde ich nichts im Datenblatt. Und wenn du das Timekeeper 
Register meinst, wie kann ich dann das CH Bit zurücksetzen wenn die 
Werte nicht übernommen werden wenn der Quarz nicht läuft aber der Quarz 
läuft nicht weil das CH Bit gesetzt ist?
> Probier mal schreiben und lesen des RAM.
Danke für den Input das probier ich gleich mal aus

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.