Zunächst einmal Entschuldigung für mein schlechtes Englisch und für diese "theoretische" Frage, wie man die Dinge am besten macht. Ich komme gerade von der Uni und mir hat noch nie jemand gesagt, wie man Probleme praktisch lösen kann.
Ich versuche, ein Netzwerk von 4 Atmega (ich verwende die Arduino-Plattform), 1 Master und 3 Slaves zu entwickeln. sie kommunizieren über i2c.
Ich suche nach einer intelligenten Möglichkeit, es zu testen. Im Moment passiert mein Debugging über das serielle Protokoll: Ich habe einige
Serial.println(...);
und ich lese sie, indem ich die Arduinos über USB anschließe und serielle eingehende Nachrichten mit dem seriellen Monitor in Arduino IDE lese.
Was ich jetzt mache ist:
Dieser Arbeitsablauf hat viele Probleme; es ist eine blinde Kommunikation. Wenn ich am Master arbeite, weiß ich nicht wirklich, was auf den Slaves passiert und umgekehrt. Wenn dann ein Arduino-Absturz den Master zum Absturz bringt (weil das I2C-Protokoll nicht vorsieht, dass ein Slave nicht antwortet oder abgeschaltet wird) und ich alle Slaves zurücksetzen muss (das mache ich durch Abschalten die Stromversorgung aller Slaves).
Ein weiteres Problem: Einige Slaves benötigen Echtzeitbetrieb mit Schrittmotoren, und wenn ein Motor läuft und einige Interrupts der I2C-Protokollbibliothek Wire.h
auftreten (und dies passiert jedes Mal, wenn der Master eine Nachricht vom Slave benötigt, denke ich), es kann bei laufendem Motor eventuell passieren und dazu führen, dass die Bewegung der Motoren (die möglichst linear sein muss) "trabt". Um dies zu vermeiden, habe ich nur eine Einwegkommunikation: Die Slaves erhalten nur Befehle. Ich weiß nicht, ob das die beste Lösung ist, aber scheint zu funktionieren.
Die blinde Einwegkommunikation, das wiederholte Ein- und Ausstecken von USB, das Ein- und Ausstecken des Netzteils und das Drücken der Reset-Tasten machen mich dumm. Bisher habe ich Softwareentwicklung mit IDE (Eclipse) durchgeführt, die Debugging bereitstellt. Wenn ich einige Threads zu synchronisieren habe, kann ich Ausdrucke oder was auch immer haben, die das Leben einfacher machen, und mit Software führe ich Komponententests durch, die mir ein gutes Werkzeug zum Isolieren des Fehlers geben. Wenn jetzt mit dem Arduinos-Netz etwas schief geht, habe ich keine Ahnung, wie ich das Problem finden soll. Dies ist mein erstes Hardware-Netzwerk und es ist frustrierend.
Ich brauche einen Rat, um einen intelligenten Workflow zu finden, eine gute Möglichkeit zu haben, mein System zu testen und mich als Programmierer zu fühlen.
Stecken Sie alle Arduino-Boards in einen USB-Hub?
Es ist in Ordnung, wenn die Slaves nur empfangen, aber dann haben Sie keine Garantie, dass Befehle erfolgreich empfangen wurden. Eine Art ACK ist wahrscheinlich besser.
Jim Paris
Hundehaare