Forum: Mikrocontroller und Digitale Elektronik I²C Pullup - wie groß?


von Markus (Gast)


Lesenswert?

Hallo Leute!

Ich habe in einem Projekt den ATMEGA128 im Einsatz. Ich benutze für die
Ansteuerung eines Temperatursensors (1621) den I²C-Bus.

Es gibt aber ab und zu Probleme bei der Übertragung. Abgesehen von
einem geschirmten Kabel glaube ich, dass es an den Pull-Up-Widerständen
liegt.
Wenn ich z.B. ein OSZI anschließe, um das Signal zu messen
funktioniert, die Übertragung zum Temperatursensor nicht mehr.

Ich benutze für Clock 4700Ohm gegen 5V und für die Daten 4700Ohm gegen
5V.
Zusätzlich sind die Widerstände direkt am Ausgang des µP positioniert.
Das Kabel zu den Sensoren ist ca. 2 Meter lang.

Soll man die Widerstände direkt bei den Sensoren positionieren oder ist
das egal?
Oder soll ich einfach kleinere Widerstände nehmen z.B. 2KOhm?
Wie klein dürfen die maximal Widerstände sein.

Danke für eure Hilfe.

Markus

von Rob (Gast)


Lesenswert?

Die Widerstände sind wahrscheinlich zu groß. Mach sie kleiner, ca. 1,5
... 1,8 kOhm, dann sollte es klappen.

Gruß

von Manuel (Gast)


Lesenswert?

Ich experementiere grad auch mit I2C. Ich nehme 10k und es geht ohne
Probleme,

von Markus (Gast)


Lesenswert?

Ich hatte vorher mal 8k-Widerstände drinnen und da hat es überhaupt
nicht funktioniert.
Es kann sein, dass es mit der Übertragungsgeschwindigkeit
zusammenhängt.
Der Prozessor wird mit 16MHZ getaktet.
Ich nehem die Originalroutinen des Codevision-AVR-Compilers und da kann
es sein, dass das Ganze schon etwas schnell ist.

von Sven (Gast)


Lesenswert?

Die Taktfrequenz (Clock) des I2C sollte maximal 100kHz (bei schnellen
I2C 400kHz, Datenblatt) sein, unabhängig vom Prozessortakt. Die
Leitungskapazität, sprich das Layout der Platine (doppelseitig,
Massefläche, dichte Leitungen, lange Leitungen), die Anzahl der
angeschlossenen ICs (Eingangskapazität) und natürlich Oszi-Leitungen
(ca. 150pF) führen zu Taktverrundungen der Low-High-Flanke (der
Widerstand muss die Kapazität wieder aufladen). Wird dabei der Pegel
nicht mehr erreicht oder kommen die Signale außer Tritt, funktioniert
die Übertragung nicht mehr. 47k nur bei kurzen Leitungen und wenigen
Slaves, Oszi mit 1:10 Tastkopf dranhängen (geringere Kapazität, 15pF),
4k7 bis 10k ist üblich, unter 3k3 kann eventuell schon zuviel Strom für
die Slaves sein, um den Low-Pegel sicher zu erreichen (Datenblatt). Bei
großen Leitungslängen kann man auch die Taktfrequenz runtersetzen.

Sven

von Markus (Gast)


Lesenswert?

Das Problem ist, dass man den Temperatursensor beim Wizard
(Code-Vision-AVR) einstellen kann. Dadurch bindet sich die
Include-Datei i2c.h mit ein. Wenn man sich nun diese Datei ansieht,
sieht man nur die Funktionsköpfe und nicht die Funktionen selbst.
Dadurch kann ich nicht sagen wie schnell die i2c-Übertragung ist. Es
kann sein, dass die Funktionen so programmiert sind, dass die
Übertragungsgeschwindigkeit unabhängig vom Takt ist. Das weiß ich
jedoch nicht mit Sicherheit. Ich schau mal im Handbuch nach.

von Frank Linde (Gast)


Lesenswert?

Falls es nicht im Handbuch steht, kannst Du das mit Deinem Oszi messen.

Gruß, Frank

von Klack (Gast)


Lesenswert?

Hallo,

die Funktionen von Codevision kannst du dir im LibVerzeichnis
anschauen, öffne einfach die dateDs1621.lib mit einm Editor.
Ich kann keien Anpassung an das Timing der CPU (Quarz) finden.
Warscheinlich bist du zu schnell. Du kannst dir ja die LIB anpassen.

Klack

von Markus (Gast)


Lesenswert?

@Frank
Danke das mit dem Oszi versuch ich mal

@Klack
Danke für den Hinweis

von Markus (Gast)


Lesenswert?

Hallo Klack

Das mit der DS1621.lib bringt mir nichts, da ich ja nich die Funktionen
für den Temperatursensor verändern möchte, sondern die I2C Funktionen

Tschüss

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.