Frage zu Wire.h-Bibliotheksfunktion Wire.requestFrom()

Hallo allerseits!

Ich schreibe derzeit ein paar Dinge zusammen. Einerseits um einen „Merkzettel“ für mich zu haben, andererseits um das Gelernte für andere schmackhaft zu machen. Aktueller Stand unter http://html.szaktilla.de/arduino-zeug

Zur Wire.h-Funktion Wire.requestFrom() habe ich eine Frage: Wie ich das verstehe, kann man den I2C-Bus nach dieser Anfrage freigeben oder nicht (was ich so verstehe, dass der Bus sozusagen „besetzt“ ist und kein anderer Busteilnehmer etwas auf dem Bus tun kann).
Verstehe ich das so richtig? Wozu ist das gut?

Vielen Dank vorweg!

Gregor

Ja, ansonsten stehen hier noch mehr Infos. https://www.arduino.cc/en/Reference/WireRequestFrom

Danke für Deine Antwort!

Die Seite in der Referenz habe ich natürlich gelesen. Dort habe ich jedoch keine Antwort auf die Frage gefunden, wofür das gut ist. Weißt Du das vielleicht?

Gruß

Gregor

Wenn der Slave aufgeforert wird, Daten zu senden, dann darf der Bus nach der Ausgabe es Masters nicht freigegeben werden.

DrDiettrich:
Wenn der Slave aufgeforert wird, Daten zu senden, dann darf der Bus nach der Ausgabe es Masters nicht freigegeben werden.

Danke!

Nur macht dann die Option, den Bus freizugeben oder nicht, keinen Sinn. Denn wieso sollte ich ein Wire.requestFrom() abschicken, wenn ich keine Rückgabe erwarte?

Was der Sinn dieser Option ist, kann ich bislang nur raten. Ich habe zwar die Original-I2C-Doku von Philips resp. NXP heruntergeladen, konnte dort aber noch nicht die Information finden, die ich suche.

Gruß

Gregor

Hast recht, requestFrom fordert immer Daten an. Tatsächlich geht es darum, ob vom gleichen Slave mehrere Datenpakete angefordert werden sollen, ohne daß ein anderer Master dazwischenspucken kann, und ohne daß der Slave zwischendrin eine neue Messung durchführt.

Dazu kann auch gehören, daß ein Chip z.B. erst ein Kommando und/oder eine Registernummer erwartet, bevor er die entsprechenden Daten rausrückt. Dafür gibt es dann den "stop" Parameter in Wire.endTransmission.

Was die I2C Doku betrifft: Beide Parameter verhindern, daß der Master ein Stop Signal auf den Bus gibt. Wann solche Feinheiten von Belang sind, merkt man oft erst, wenn es ohne Benutzung dieser Parameter nicht funktioniert.

DrDiettrich:
… Was die I2C Doku betrifft: Beide Parameter verhindern, daß der Master ein Stop Signal auf den Bus gibt. Wann solche Feinheiten von Belang sind, merkt man oft erst, wenn es ohne Benutzung dieser Parameter nicht funktioniert.

Nochmal danke!

Jetzt wird die Frage, warum meine heutige Spielerei mit einem DS1307 (I2C-RTC) nicht funktioniert hat. Dort scheint genau dieses Stop-Signal eine wichtige Rolle zu spielen.

Gruß

Gregor