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
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."
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.
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
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
Mal die entsprechenden Datasheets lesen - Vcc der Bausteine beachten!
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.
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.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.