mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Probleme mit RTC an TWI


Autor: bomibob (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: paul (Gast)
Datum:

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

Autor: Sascha Weber (sascha-w)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@ bomibob
wie hast du die Portpins eingestellt?

Sascha

Autor: paul (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: bomibob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: bomibob (Gast)
Datum:

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

Autor: Daniel (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Ich hab komischerweise auch das Problem. Hab mal meinen Code angefügt.

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Welche RTC hast du denn? Ich hab die DS1307.
Gruß

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

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

Geht das auch in einem üblichen Format?

MfG Spess

Autor: Daniel (Gast)
Datum:
Angehängte Dateien:

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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

TLC-Register? ->RTC-Register

MfG Spess

Autor: Daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Aus einem AVR-Datenbatt

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

Vergleiche das mal mit deinem Code.

MfG Spess

Autor: grammatikator (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

>Das ist richtig bei ihm.

Bei Daniel?

MfG Spess

Autor: Axel Krüger (axel)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
beim Threadersteller) Bei Daniel fehlt echt das TWINT Bit in der Maske 
oO

Autor: bomibob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Joachim K. (minifloat)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: daniel (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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ß

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: bomibob (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: XXX (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Forster (igel)
Datum:

Bewertung
0 lesenswert
nicht 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?

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.