Forum: Mikrocontroller und Digitale Elektronik Probleme mit RTC an TWI


von bomibob (Gast)


Angehängte Dateien:

Lesenswert?

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

von paul (Gast)


Lesenswert?

Hi,
ich sehe auf den ersten Blick keinen Fehler.
Kannst du einen Hardwarefehler ausschließen?
Grüße

von Sascha W. (sascha-w)


Lesenswert?

@ bomibob
wie hast du die Portpins eingestellt?

Sascha

von paul (Gast)


Lesenswert?

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.

von bomibob (Gast)


Lesenswert?

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

von Axel K. (axel)


Lesenswert?

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.

von bomibob (Gast)


Lesenswert?

ich habe es eben mit 5kHz versucht, aber leider immer noch das gleich 
Ergebnis erhalten.

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Ich hab komischerweise auch das Problem. Hab mal meinen Code angefügt.

von Daniel (Gast)


Lesenswert?

Welche RTC hast du denn? Ich hab die DS1307.
Gruß

von spess53 (Gast)


Lesenswert?

Hi

>Ich hab komischerweise auch das Problem. Hab mal meinen Code angefügt.

Geht das auch in einem üblichen Format?

MfG Spess

von Daniel (Gast)


Angehängte Dateien:

Lesenswert?

Da du so nett gefragt hast hier nochmal die gleiche Datei mit .c am 
Ende.

von spess53 (Gast)


Lesenswert?

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

von spess53 (Gast)


Lesenswert?

Hi

TLC-Register? ->RTC-Register

MfG Spess

von Daniel (Gast)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

Aus einem AVR-Datenbatt

TWCR = (1<<TWINT)|(1<<TWSTA)|(1<<TWEN)     Send START condition

Vergleiche das mal mit deinem Code.

MfG Spess

von grammatikator (Gast)


Lesenswert?

also bitte jungs !
überprüft erstmal korrekte zeichensetzung und groß/klein schreibung in 
eurem code. so kann das ja niemand lesen !!!
tztztz

spessle gmacht ;)

von Axel K. (axel)


Lesenswert?

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.

von spess53 (Gast)


Lesenswert?

Hi

>Das ist richtig bei ihm.

Bei Daniel?

MfG Spess

von Axel K. (axel)


Lesenswert?

beim Threadersteller) Bei Daniel fehlt echt das TWINT Bit in der Maske 
oO

von bomibob (Gast)


Lesenswert?

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?

von Achim M. (minifloat)


Lesenswert?

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

von daniel (Gast)


Lesenswert?

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ß

von spess53 (Gast)


Lesenswert?

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

von bomibob (Gast)


Lesenswert?

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

von XXX (Gast)


Lesenswert?

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

von Thomas F. (igel)


Lesenswert?

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
Noch kein Account? Hier anmelden.