Mittlerweile versuche ich seit 2 Tagen irgendwas aus diesem RTC heraus
zu holen. Aber er schickt immer nur ein Nack zurück, wenn ich ihn
anschreibe. Als µC verwende ich den Atmega16L, Programmiersprache ist C,
Compiler der avr-gcc und Programmer stk500v2.
Ich denke zwar nicht, dass es irgendwas mit dem Quelltext zu tun haben
dürfte, aber ich habe ihn mal angehängt. Ansonsten kann man ja nicht
viel falsch machen... 5V als Versorgungsspannung, der richtige Quarz
hängt auch am RTC und Pullups an SDA und SCL verwende ich die Atmega
internen (habs mit externen auch versucht, aber war genau das selbe).
Ich habe mittlerweile schon das bedenken, dass der RTC schlicht und
einfach defekt ist, aber bevor ich mir für 10 Euro einen neuen schicken
lasse, wollte ich nochmal hier nachfragen, ob nicht noch jemand eine
Idee hätte.
Ist es auch möglich, dass der Quarz am RTC defekt ist? Der ist jetzt
schon ein paar Jahre alt, und ich weiß nicht, ob das einen Effekt hat.
Oszilloskop habe ich leider keines zur Verfügung.
Also, falls jemand helfen könnte, ich wäre sehr dankbar :)
Mit freundlichen Grüßen,
Simon
Hallo Simon,
zum DS1307 gibt es hier einige Beiträge; einfach mal die Suchfunktion
"DS1307" benutzen und das Datenblatt aufmerksam lesen: Wenn keine
Batterie angeschlossen ist, muss(!) Vbatt auf Masse gelegt sein, sonst
antwortet die RTC nicht.
Ich lese die Uhr so aus:
Vbat ist aus Masse, und das Datenblatt kann ich mittlerweile beinahe
auswendig.Auch sonst habe auf mikrocontroller.net und auch mit Google
alles durchstöbert, was ich nur zum DS1307 finden konnte.
Zu deinem Beispiel: so weit zum auslesen komme ich nicht mal. Ich
schreibe über den I2C Bus eine Start condition und anschließend schicke
ich die Slave Adresse + Write Bit im TWDR Register los. Anhand des
Statusregisters TWSR kann man ja dann erkennen, was mit der Meldung
passiert ist. Und hier bekomme ich immer den Wert 0x20, was für "SLA+W
has been transmitted, NotAck has been received" bzw. wenn ich das
igonriere und anschließend das Datenbyte schreibe 0x30 "Databyte has
been transmitted, NotAck has been received".
Ich denke es hat mit einer hohen Wahrscheinlichkeit mit dem Code zu tun.
Wenn der Quarz nicht schwingen wuerde, so wuerde die Uhr nicht
weiterzaehlen, aber antworten muesste sie trotzdem. Ich hab den Code
nicht angeschaut, das Entzippen ist mir zuviel. Ich wuerde mal den
Logicanalyzer/Scope anklemmen und die Kurvenformen und Daten
verifizieren.
Hallo Simon,
meine beliebtesten Fehler beim DS1307:
- VBat nicht drangehängt
- Pullups zu klein (ich verwende 10K, bei 4k7 hatte ich nur Probleme)
Du verwendest die TWI-Hardware anscheinend direkt - was passiert den,
wenn Du die Lib von Peter Fleury verwendest?
Gruß,
-Mathias
Ok, vielen Dank euch allen, jetzt habe ich wenigstens einen Ansatz, was
ich alles probieren kann. Bei den Pullups werde ich es auch nochmals
extern mit 10k Widerständen versuchen anstatt der 4k7. Die Lib von Peter
Fleury hatte ich bisher auch noch nicht entdeckt, das ist auf jeden Fall
auch einen Versuch wert.
Hallo Simon,
nimm die Library von Peter Fleury! Sie ist sehr einfach anzuwenden und
Du siehst anhand der Statusbytes sofort jeden Fehler Deines Codes. Mein
Beispiel oben verwendet sie auch.
Die Lib von Peter Fleury gefällt mir zwar auch, aber mit dem DS1307
krieg ich die auch nicht zum laufen. Gibt´s da mal irgendwo ein Beispiel
oder so ?
Greets
Karlheinz
Hallo... ich weiss das dieses Thema alt ist aber ich habe seit gestern
das exakt das selbe Problem und befürchte auch das der Chip einfach
einen weg hat.
Habe mir zuerst einen I2C Portexpander vorgenommen, als das
funktionierte und ein Lcd darüber lief wollte ich dann endlich auch den
DS1307 ansteuern.
Beim ersten Test als das RTC Tiny Modul mit am Bus hing kam glaub ich
erst garkeine Anzeige auf dem Display. Abgesteckt, neu verkabelt und neu
versucht und da lief das Lcd auch wieder parallel mit.
Nun hab ich jetzt zwei Tage lang versucht mit allen möglichen Sequenzen
die ich hier und im Web zum DS1307 gefunden habe eine Anwort aus dem
Chip zu entlocken. Nada.
Habe mir mittlerweile auch schon die einfachen 24C32 Lese und
Schreibbefehle angeeignet, da dieses EEPROM ebenfalls mit auf dem Modul
sitzt, dieses lässt sich wunderbar ansteuern.
Bei den ersten Writes erhalte ich als TWI Status 0x18 und 0x28 zurück.
Wenn ich nun wieder die Writesequenz für den 1307 teste dann erhalte ich
0x20 und 0x30 wie hier schon beschrieben.
Habe das CH sowie die RS Register versucht zu beschreiben, aber der Chip
gibt leider garkein Zeichen von sich.
Mein Oszilloskop ist leider zur Zeit verliehen, konnte nur sicherstellen
das Vcc Vbat im grünen Bereich liegen. Das Fluke scheint aber die 50kHz
Clk schon nicht mehr zu erkennen.
Hänge witzigerweise auch an einem STK500v2 und benutze auch die HArdware
TWI wie der Threadersteller, µC ist ein mega8535 über nen 8MHz Quarz auf
dem STK Sockel.
Habt ihr noch ne Idee was man irgendwie debuggen oder versuchen könnte ?