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
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.
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.
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.
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?
Eine eigene Frage?
Dieser Thread ist über 16 Jahre alt.
Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.