Forum: Mikrocontroller und Digitale Elektronik I2C Problem mit ATmega


von Jan (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe ein Problem mit dem I2C Bus:
Meistens endet die Übertragung bereits nach dem Senden der Adresse.
Ich erhalte noch die Statuscodes, dass Start und Adresse gesendet 
wurden, danach steht die Übertragung.

Im Anhang ist ein Screenshot von der Situation.
Was passiert denn da nach dem ACK der Adresse? Daraus, dass SCL low ist, 
schließe ich, dass der Slave die Übertragung anhält, richtig?

Warum tut er das? Ich muss doch lediglich das TWINT Flag nach Empfang 
immer wieder rücksetzen, oder?
Oder gibt es da noch etwas zu beachten?

Und warum geht nach einiger Zeit auf Daten auf low, sodass beide 
Leitungen dann low sind?

Danke und Gruß
Jan

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Welchen I2C-Baustein versuchst Du denn dort gerade anzusteuern?

von winne (Gast)


Lesenswert?

Ich schließe daraus das der Master keinen Takt erzeugt und so der Slave 
keine Daten liefern kann.

Da z.B ein speicherchip wie der 24c65 keinen taktgenerator sein eigen 
nenen kann, ist er auf einen externen Takt angewiesen um seine Daten 
seriell zu senden. Diese liefert der Master über SCL. und zwar 
unabhängig davon ob der slave eine eigenetaktquelle besitzt oder nicht.


benutzt du die TWI oder generierst du I²C perbitbanging ?

von Jan (Gast)


Lesenswert?

Das sind zwei Megas, die miteinander reden sollen.
Und zwar über die interne TWI.

Der Master erzeugt ja einen TAkt; die Adresse wird übertragen. Das ACK 
des Slaves erfolgt ja auch noch.

Aber dann geht SDA wieder auf high, während der Takt auf low bleibt.

Hält der Slave die Taktleitung auf low? Warum tut er das? :)

Gruß
Mr.Green

von winne (Gast)


Lesenswert?

sorry hatte einen Absturz
hier habe  ich mal einiges zur TWI übersetzt

http://de.geocities.com/postboxelektronik/box/Serielle_Zweidraht_Schnittstelle.pdf
http://de.geocities.com/postboxelektronik/box/I2C_Bus_Functions.pdf

Der Master gibt auch beim lesen eines Bytes den Takt aus.
Du musst also die TWI veranlassen ein Byte auf dem Bus zu lesen um 
Antwort vom Slave zu erhalten.

Beachte bitte, dass beim lesen des letzten Bytes das das Aknowledge 
nicht angefordert werden darf, da sich sonst die TWI aufhängt!

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.