Forum: Mikrocontroller und Digitale Elektronik Kommunikationsproblem I2C-Bus


von Lorenzo85 (Gast)


Lesenswert?

Hi,
ich habe das gleiche Problem mit dem I2C-Bus wie in diesem 
englischsprachigen Thread:
http://www.multiwii.com/forum/viewtopic.php?f=8&t=2182

Die Kommunikation mit wire.h funktioniert, aber mit dem i2c code von 
multiwii funktioniert es nicht.

Die Komunikation wurde in beiden Fällen mit einem Oszilloskop analysiert 
und in einem bunten Bildchen veröffentlicht:
http://www.multiwii.com/forum/download/file.php?id=1339&mode=view

Kann mir bitte jemand den Unterschied zwischen Plot 3 und 4 auf diesem 
Bild erklären? Es scheint nur einen kleinen Unterschied in dem rot 
markierten Bereich zu geben.

Ich würde gerne den code aus dem multiwii-Projekt verwenden, da ich bei 
der Verwendung von wire.h ein Speicherplatzproblem habe.

von Jörg S. (joerg-s)


Lesenswert?

Lorenzo85 schrieb:
> Kann mir bitte jemand den Unterschied zwischen Plot 3 und 4 auf diesem
> Bild erklären? Es scheint nur einen kleinen Unterschied in dem rot
> markierten Bereich zu geben.
Ohne es jetzt exakt analysiert zu haben würde ich sagen:
3 -> Nach Write Stop, danach wieder Start und dann Read
4 -> Nach Write Repeated Start und dann Read

von Markus U. (markjus) Benutzerseite


Lesenswert?

Das würde ich auch sagen und repeated start sorgt ja gerne mal für 
Probleme...

von Lorenzo85 (Gast)


Lesenswert?

Danke für den Hinweis mit dem repeated start. Ich habe nun direkt vor 
dem repeated Start ein Stop und eine kleine Pause eingefügt, und nun 
funktioniert es.

von Pal .. (pal)


Angehängte Dateien:

Lesenswert?

Hallo,

ich habe gerade so meine Probleme mit der I2C Bibliothek von Peter 
Fleury und würde diesen Beitrag gerne wieder etwas aufleben lassen.

Vielleicht mal zu dem Problem..... Ich nutze das TFT-Display 
"eDIPTFT43-A" von EA welches über I2C mit einem ATmega16 verbunden ist. 
Der ATmega ist mit C programmiert. Für die I2C Kommunikation habe ich 
die Bibliothek von Peter Fleury verwendet (twimaster.c).
Die Kommunikation habe ich zu Beginn mit einfachen Befehlen zwischen 
Controller und Display getestet und ich war der Meinung, dass diese 
funktioniert. Nachdem ich jetzt eine weitere Funktion geschrieben habe, 
die aber noch nicht aufgerufen wird steht plötzlich mein Bus (siehe 
Bild). Sobald ich die Funktion auskommentiere läuft der Bus wieder. 
Allerdings hängt dieser sich wieder nach einigen Befehlen wieder auf. 
Die Funktion die dieses "Problem" verursacht heißt 
"checkeMaschinenauswahl" und befindet sich in der Source "display.c".
Ich denke, dass ich ein Pointer-Problem habe. Leider kann ich nicht 
verstehen wo das Problem liegen soll. Habe ich vielleicht bei der 
Verwendung der Bibliothek etwas falsch gemacht?
Ich suche dieses Problem jetzt schon seit einigen Tagen und hoffe das 
mir hier jemand weiterhelfen kann.

Vielen Dank für eure Hilfe.

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.