2016-05-19 2 views
1

Also habe ich ein Gerät als I2C-Master eingestellt, und die restlichen Geräte am Bus sind als Slaves eingestellt. Der Master sendet einen Befehl an jeden Slave, und der Slave führt diese Aufgabe aus (laufende Motoren usw., wichtiger zeitkritischer Code). Ich würde gerne wissen wollen, wann der Slave seine Aufgabe beendet hat. Der einzige Weg, den ich sehen kann, ist, den Master ständig den Slave abfragen zu lassen, aber dies erzeugt ein Problem, da jedes Mal, wenn der Master den Slave abfragt, er auslöst und i2c den Slave unterbricht und den Motorcode für a ausführt kurze Zeit.Wie kann der Master herausfinden, ob ein I2C-Slave beschäftigt ist, ohne den zeitkritischen Code am Slave zu unterbrechen?

Gibt es trotzdem eine Lösung? Ich habe darüber nachgedacht, alle Geräte als Master einzurichten, und wenn dann jedes Gerät seine Aufgabe erledigt, kann es die Daten senden, ohne dass ein Polling erforderlich ist. Das Problem dabei ist, dass ich über Datenkollisionen über den Bus besorgt bin, da die Geräte möglicherweise gleichzeitig versuchen, zu sprechen.

Was ist der richtige Weg, um dieses Problem zu lösen?

+0

Woher wissen Sie, wann ein Motor "seine Aufgabe erledigt" hat? Nehmen wir an, dass die I2C-Nachricht den Motor nicht zum Stillstand gebracht hat, wie würden Sie wissen, dass er seine Aufgabe beendet hat? Die meisten I2C-Geräte können nicht als Master eingestellt werden, das sehe ich nicht als legitime Methode an. Wir benötigen eine detailliertere Beschreibung Ihres Setups und wie jedes dieser Peripheriegeräte seine Funktion erfüllt. – DiBosco

+0

Aus der Spitze meines Kopfes: Master starten init alle Sklaven mit einem Zeitfenster, in dem sie info update senden können. – LPs

+1

machen Sie Ihre Systemtechnik ... –

Antwort

2

Lassen Sie den Slave seine I2C-Schnittstelle deaktivieren, während er eine zeitkritische Aufgabe ausführt, und aktivieren Sie ihn danach wieder. Dann kann der Master so oft abfragen, wie er möchte, er würde von dem ausgelasteten Slave kein ACK bekommen, und der Slave wird auch keine Interrupts erhalten.

Verwandte Themen