www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik XMega: Auswirkung der Systemtaktgenauigkeit auf i2c-Taktrate


Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich arbeite zum ersten Mal mit I²C (XMega 128) und stoße auf das 
Problem, dass der Clock SCL bei ca. 320 kHz liegt obwohl ich ihn für 
400kHz konfiguriert habe.

Zuerst mal eine Frage zur Taktrate bei I²C:
Verstehe ich es richtig, dass mit der I²C-Taktrate die Frequenz von SCL 
gemeint ist? Also man misst die Periode des SCL und bildet den Kehrwert 
davon.


Und nun die eigentliche Frage:
Der XMega läuft mit dem internen 32MHz Oszillator und der Takt (auf 
einen Pin herausgeführt) liegt (mit einem Frequenzzähler gemessen) bei 
ca. 32,6 MHz. Kann es sein, dass diese Abweichung des Systemtakts (0,6 
MHz) zu einem SCL-Takt von 320kHz statt 400kHz führt?

Danke schon mal für jede Antwort!!!

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Takt ist bei I2C immer eine Maximalangabe.
Er kann verlangsamt werden durch die Slaves, Leitungskapazität und 
Programmlaufzeit.


Peter

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für die schnelle Antwort!!!

Ist es (mal abgesehen von Clock Stretching durch Slaves) nicht so, dass 
das TWI-Modul zur Erzeugung von SCL den Systemtakt einfach runterteilt 
und dass der SCL-Takt sozusagen fest an den Systemtakt gekoppelt ist (im 
bestimmten Verhältnis natürlich)? Wenn das so ist, wie kann dann die 
Leitungskapazität den Takt verlangsammen? Ich würde dann erwarten, dass 
durch Leitungskapazität der Pegel der Pulse nicht ganz an Vdd kommt.

Wie kann Programmlaufzeit den Takt beeinflussen? Ich könnte mir 
vorstellen dass der Abstand zwischen den einzelnen I2C-Transaktionen 
durch Programmlaufzeit beeinflusst wird, aber nicht der SCL-Takt selbst. 
Sehe ich da was falsch?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wie hast du den Takt gemessen? Einfach Frequenzzähler an SCL?

Bedenke, das SCL immer nur während der Übertragung getaktet ist, 
"zwischen den Bytes" liegt SCL wieder auf High.
=> der Frequenzzähler zeigt zuwenig an.

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Wie hast du den Takt gemessen? Einfach Frequenzzähler an SCL?

Nein! Mit Frequenzzähler habe ich den Systemtakt gemessen. Den SCL-Takt 
natürlich mit einem Oszi wie oben beschrieben, die Periode abgelesen und 
den Kehrwert dazu gemacht.

Autor: Mike R. (thesealion)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Messen kannst du den Takt nur mit einem Skope, die Programmlaufzeit 
beeinflußt den Takt eines Bytes überhaupt nicht und wenn du dir das 
Datenblatt ansiehst, wirst du sehen, das die Frequnez durch einen 
simplen Vorteiler gewonnen wird. Es kann also sein, das du die 400kHz 
nie treffen kannst, je nachdem welchen Systemtakt du hast

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weiß noch jemand, woran das Problem liegen könnte?

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Auf welchen Wert setzt du TWMBR?

Autor: noips (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich berechne den Wert mit der Formel im Datenblatt im Abschnitt "BAUD - 
TWI Baud Rate Register":

32 000 000  / (2 * 400 000) - 5  = 35

Habe auch im Debug-Mode geschaut, wird tatsächlich auf den Wert gesetzt.

Autor: Εrnst B✶ (ernst)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jo, auf die 35 bin ich auch gekommen, für die von dir gemessenen 320kHz 
müsste der Wert schon auf so 45 stehen...

Messfehler oder Chip/Datenblatt-Fehler?
Sagen die Atmel-Erratas da was zu?

Autor: Thomas Kindler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> Ist es (mal abgesehen von Clock Stretching durch Slaves) nicht so, dass
> das TWI-Modul zur Erzeugung von SCL den Systemtakt einfach runterteilt
> und dass der SCL-Takt sozusagen fest an den Systemtakt gekoppelt ist (im
> bestimmten Verhältnis natürlich)?

Ja, 400kHz wird durch runterteilen erzeugt, und gibt den I2C-Maximaltakt 
vor.

> Wenn das so ist, wie kann dann die Leitungskapazität den Takt
> verlangsammen?

Beim Wechsel SCL low->high muss der Controller warten, bis der 
high-pegel erreicht ist. Je nach Leitungskapazität und Pull-Up kann das 
mehr oder weniger lange dauern.

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.