XMega: Auswirkung der Systemtaktgenauigkeit auf i2c-Taktrate

Gast #1697588
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!!!
Gast #1697640
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?
Gast #1697649
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.
#1697650
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
Gast #1697753
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.
Gast #2024445
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

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren