Forum: Mikrocontroller und Digitale Elektronik TWI SCL Frequenz


von Stephan W. (stipo)


Lesenswert?

Nabend zusammen,

ich beschäftige mich gerade ein bisschen mit I²C / TWI am Atmega8. 
Aktuell möchte ich den RTC / DS1307 anbinden und auf einem Display 
anzeigen lassen.
Dazu habe ich auch schon einiges hier im Forum gefunden, was weiter 
hilft.

Eine kleine Frage bleibt mir aber gerade offen.

Wenn ich den Atmega8 mit 4Mhz Takt betreibe und folgende Werte 
einstelle, bekomme ich eine SCL Frequenz von exakt 10.000 Hz raus:
CPU Clock = 4000000
TWBR = 12
TWBS = 2

Ist das zu schnell für den TWI Bus?
Gibt es da grenzen, wie schnell der Bus sein darf?

MFG
Stephan

von HildeK (Gast)


Lesenswert?

Lies mal die I2C-Sezifikation, auf der NXP-Webseite sollte sie zu finden 
sein.
I2C hat als Standardgeschwindigkeit 100kbit/s, ebenso sind 400kbit/s 
definiert. Das können die meisten Slaves. Es gibt auch noch einen Mode 
mit 1MBit/s, da sind die verfügbaren Slaves aber deutlich seltener.

von Stephan W. (stipo)


Lesenswert?

Danke erstmal,
das hat schon geholfen. Dadurch hab ich weitere Informationen finden 
können.

Den DS1307 kann man laut Datenblatt dann nur im Standardmode betreiben 
(100KHz).


Wie sieht das eigentlich aus, wenn ich den Bus immer mit 400KHz 
betreiben würde? Kann es dann passieren, das ein Gerät am Bus komplett 
seinen Dienst verweigert (wie sind da eure Erfahrungen)?

Man könnte die Übertragung dann im Fehlerfall ja auch mit einer 
niedrigeren Geschwindigkeit nochmal starten und erst wenn beide Routinen 
einen Fehler gemeldet haben, den als globalen Fehler ansehen, und im 
Error-Log rein bringen (sofern die Anwendung das braucht).

Kann es sein, das bei einem mit 4MHz getakteten Atmega, bei 250KHz 
schluss ist am TWI Bus?

von Philips (Gast)


Lesenswert?

Stephan W. schrieb:
> Wie sieht das eigentlich aus, wenn ich den Bus immer mit 400KHz
> betreiben würde? Kann es dann passieren, das ein Gerät am Bus komplett
> seinen Dienst verweigert (wie sind da eure Erfahrungen)?
>
> Man könnte die Übertragung dann im Fehlerfall ja auch mit einer
> niedrigeren Geschwindigkeit nochmal starten und erst wenn beide Routinen
> einen Fehler gemeldet haben, den als globalen Fehler ansehen, und im
> Error-Log rein bringen (sofern die Anwendung das braucht).

Ich kann ja in der Stadt auch erst mal mit 100 km/h fahren.
Und wenn ich dann erwischt werde fahre ich halt langsamer.

Was soll denn das bringen. Wenn ein Gerät mit 100 khz spezifiziert
ist betreibe es mit 100 kHz. Wenn es bis zu 400 kHz spezifiert ist
betreibe es mit 400 kHz. Wenn du eine Mischkonfiguration hast,
betreibe es halt mit dem Takt den das langsamste Device braucht.
Mehr braucht man dazu nicht sagen.

Philips

von Bastler (Gast)


Lesenswert?

Die 100kHz bzw. 400kHz sind die maximale Busgeschwindigkeiten.

Es zwingt dich niemand exakt diese zu verwenden.
Als Master gibst du den Takt ja vor (wie bei SPI).

Ich nutzte ein I2C EEPROM mit 43,468kHz (oder was auch immer).

Je nach Leitungslänge und Pull-Up Widerständen werden die Flanken ja 
verschliffen.

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.