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
Die Widerstände sind wahrscheinlich zu groß. Mach sie kleiner, ca. 1,5 ... 1,8 kOhm, dann sollte es klappen. Gruß
Ich experementiere grad auch mit I2C. Ich nehme 10k und es geht ohne Probleme,
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.
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
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.
Falls es nicht im Handbuch steht, kannst Du das mit Deinem Oszi messen. Gruß, Frank
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
@Frank Danke das mit dem Oszi versuch ich mal @Klack Danke für den Hinweis
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.