Hallo, ich wollte eine RTC an einen Mikrocontroller anschließen, aber nach dem Senden der Slave Adresse steht im TWSR immer not acknowledge (also 0x20 anstatt 0x18). Start senden macht keine Probleme. Die SCL Frequenz ist 100kHz. Ich habe zwischenzeitlich gedacht, dass SCL vielleicht durch das Setzen von TWEN resettet wird, aber wenn ich TWEN setzte bevor ich den die SCL Frequenz festlege, hat sich auch nichts verbessert. Ich habe keine Idee woran es liegen könnte und wäre über Hilfe dankbar. ich benutze einen Atmega168 und die RTC ist eine DS 1307. Grüße, bomibob
Hi, ich sehe auf den ersten Blick keinen Fehler. Kannst du einen Hardwarefehler ausschließen? Grüße
Ich verwende die Platine von der Word Clock und daher kann ich einen Hardwarefehler ausschließen. @Sascha Meinst du SDA (PC4) und SCL (PC5)? Die habe ich nicht extra eingestellt. Ich habe sie mal Probeweise als Ausgang definiert, aber dabei blieb das Problem bestehen, dass ich NACK erhalten habe.
ich habe mal probeweise als Slave Adresse 0000000 genommen mit anschließend 0 für write (weil ich am TWI sowieso nur einen Slave habe), aber auch dann habe ich einen not ACK zurück bekommen. Kann es sein, dass meine RTC kaputt ist? Grüße
Slaves bestätigen nur den General Call (also 0x00), wenn das bei denen gesondert aktiviert worden ist - zumindestens bei µCs- glaube nicht das das bei der RTC geht. TWEN kannst du aktivieren und deaktivieren - TWBR und TWSR werden dadurch nicht resettet. Die Pins muessen auch nicht gesondert konfiguriert werden. Code it eig. sowiet korrekt - zumindesten muss er dir auf die Adresse "104" ein ACK senden. Mach doch mal Die Clockrate auf 5khz.
ich habe es eben mit 5kHz versucht, aber leider immer noch das gleich Ergebnis erhalten.
Hi
>Ich hab komischerweise auch das Problem. Hab mal meinen Code angefügt.
Geht das auch in einem üblichen Format?
MfG Spess
Da du so nett gefragt hast hier nochmal die gleiche Datei mit .c am Ende.
Hi >Da du so nett gefragt hast hier nochmal die gleiche Datei mit .c am >Ende. Damit wird aus einer RTF-Datei auch keine C-Datei, sondern Müll. Kannst ja mal die Code-Ansicht benutzen. Ach so, und wo ist in deinem 'Programm' die Adressierung der TLC-Register? MfG Spess
Ich habs in dem Datenblatt der RTC so verstanden, dass das erste was man nach der Adresse schickt das Register innerhalb der RTC festlegt. Das Problem ist allerdings schon davor, denn die RTC gibt mir/uns ja auf die Adresse kein ACK zurück, scheint sich also nicht angesprochen zu fühlen.
Hi Aus einem AVR-Datenbatt TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) Send START condition Vergleiche das mal mit deinem Code. MfG Spess
also bitte jungs ! überprüft erstmal korrekte zeichensetzung und groß/klein schreibung in eurem code. so kann das ja niemand lesen !!! tztztz spessle gmacht ;)
spess53 schrieb: > Hi > > Aus einem AVR-Datenbatt > > TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN) Send START condition > > Vergleiche das mal mit deinem Code. > > MfG Spess Das ist richtig bei ihm. Ggf. wuerde ich da testhalber mal ein anderes TWI Device dranhaengen. Irgendwas wird nen Schuss haben.
beim Threadersteller) Bei Daniel fehlt echt das TWINT Bit in der Maske oO
naja...dann weiß ich wenigstens,dass mein code stimmt und muss dann wohl noch ein Bisschen wo anders auf Fehlersuche gehen. Muss man bei der DS1307 noch irgendwas spezielles beachten?
Daniel schrieb: > Ich hab die DS1307. Me three :D Die hab ich auch. An einem Mega16 mit der Hardware-lib von Peter Fleury http://jump.to/fleury funzt sie einwandfrei. Nachdem ich erstmal gerafft hab, dass man nach dem ersten Start bei den Sekunden das CH-Bit(Bit7) rausnehmen muss, damit die RTC losläuft, rennt sie wie ne 1. mfg mf
Hi, das TWI enable bit (TWEN) wird in der init funktion gesetzt und danach werden nur die nötigen bits verändert. Damit das funzt muss natürlich erst die initialisierungsfkt. Ausgeführt werden. Gruß
Hi >das TWI enable bit (TWEN) wird in der init funktion gesetzt und danach >werden nur die nötigen bits verändert. Damit das funzt muss natürlich >erst die initialisierungsfkt. Ausgeführt werden. Quatsch. Eine Übertragung wird mit dem Löschen von TWINT (durch Schreiben einer 1) gestartet. Und das fehlt bei dir völlig. Lies das Datenblatt. MfG Spess
Hallo! ich habe gerade mit einem Oszi die Frequenz des Quarzes überprüfen wollen, aber dieser scheint nicht zu schwingen. Kann das an dem Quarz liegen, oder, ist eher die RTC hinüber? grüße
Ich hatte mal einen RTC, bei dem der Quarz erst anschwang, wenn die Uhrzeit/Datum eingestellt war. Davor macht es keinen Sinn, irgendwas schwingen zu lassen wegen Energieersparnis. Das Datenblatt sollte mehr dazu sagen. Gruß Joachim
Bei der DS1307 soll bei der ersten Inbetriebnahme Bit 7 an Adresse 0 gelöscht werden. Nur dann ist sichergestellt, dass der Quarz auch schwingt. Ist Bit 7 = 1 wird der Oszillator abgeschalten. Da du ja ein Oszi hast: Hast du schon mal die Datenleitung angesehen? Kommt das ACK vom DS1307?
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.