Welcher Mikrocontroller sollte Master / Slave sein?

8

Ich entwerfe einen Alarm, um mich am Morgen aufzuwecken. Das System besteht aus 3 Subsystemen:

  1. (S1) RGB-Sieben-Segment-Management. Bestehend aus 5µCs, einer für jede Ziffer und einer für ":". Die hohe Anzahl von µC ist darauf zurückzuführen, dass ich keinen IC für RGB-LEDs verwende, sondern nur Transistoren.
  2. (S2) Sensor- und Eingangsmanagement. Ein µC, der den Abstandssensor für den eingestellten Alarm und die aktuelle Zeit verwaltet; und Schalter für die Konfiguration.
  3. (S3) Kommunikations- und Audiodatei. Ein µC, der für ein weiteres Projekt mit einem Bluetooth-Modul in UART kommuniziert, erhielt einen RTC-Kristall, um eine genaue Uhr zu haben und die Audiowiedergabe zu verwalten. (Ich habe noch nicht am Audio gearbeitet)

Während der normalen Ausführung liest S2 die Eingabe und sendet sie zur Verarbeitung an S3. dann sendet S3 an S1, was angezeigt werden muss.

Ich möchte all diese Subsysteme miteinander kommunizieren lassen und dann den I2C-Bus verwenden. Aber hier kommt meine Frage:

  • Welcher µC muss der Master sein?

In der ersten Hand ist S3 das Zentrum des Systems, andererseits kann S2 mehr Nachrichten als S3 senden. Deshalb bin ich mir nicht sicher, wer Meister / Sklave sein wird.

  • Gibt es eine Regel, um zu bestimmen, wer Slave / Master sein wird? Welche Frage sollte ich mir stellen, um die gute Wahl zu treffen? (im Allgemeinen nicht für dieses spezielle System)
M.Ferru
quelle
14
Warum verwenden Sie 5 Mikrocontroller für eine grundlegende Uhr / einen Alarm, wenn sicherlich einer die Arbeit erledigen würde?
Andy aka
2
Haben Sie eine andere uC für 'System Orchestrator', die den I2C-Master implementiert. Das ist keine sarkastische Bemerkung, ich meine es wirklich so. Es gibt Ihnen eine gute Trennung zwischen Peripheriegeräten und Steuerung, da Sie keine Angst vor übermäßigen uCs zu haben scheinen.
Neil_UK
1
@Andyaka Jede Ziffer hat eine andere Farbe (3 * 5 PWMs) und jedes Segment muss auf dem GPIO ein- und ausgeschaltet werden. Ich verwende MSP430 als µC mit jeweils nur 20 Pins und 4 PWM. (Ich habe mehr als 100 von ihnen, also muss ich die Aktie verwenden ^^ ')
M.Ferru
7
@Andyaka Es gibt tatsächlich einen anderen Grund. Ich bin ein Hobbyist, der gerade die EE-Schule verlassen hat. Ich möchte lernen, wie man eine anständige Kommunikation zwischen einem System mit mehreren µC herstellt, weil ich solche Dinge nie mache. Wenn ich nur einen µC anstrebe (was natürlich eine bessere Wahl ist), lerne ich "nichts Neues".
M.Ferru
2
@ M.Ferru Viele Dinge beeinflussen solche Entscheidungen. Eine Sorge ist, wie viel Unsicherheit und Risiko für zukünftige "Unbekannte" ich tolerieren kann, bevor ich das Design komplett "neu machen" muss. Ein weiterer Grund sind die Timing-Prozesse und wie kritisch einige sein können. Wenn ich beispielsweise lange Übertragungen mit engen zeitlichen Einschränkungen unterstützen muss, kann diese Tatsache allein eine gut funktionierende Benutzeroberfläche erschweren. Aber es geht darum, alle Details aufzuschreiben, die Sie jetzt kennen, und alles, was Sie sich vorstellen können, kommt auf und entscheidet, wie diese Details am besten organisiert werden.
Jonk

Antworten:

7

Gibt es eine Regel, um zu bestimmen, wer [I 2 C] Slave / Master sein wird?

Ja. Nur ein I 2 C- Master kann eine Übertragung starten. Ein I 2 C-Slave kann Ihnen nichts erzählen, bis es das nächste Mal vom Master abgefragt wird (es sei denn, Sie fügen zusätzliche Interrupt-Signale hinzu, was die Gesamtsystemkomplexität erhöht).

Wenn Sie die (selten verwendete) Funktion eines Geräts ignorieren, um zwischen Master und Slave zu wechseln, muss der I 2 C-Master über ausreichende Kenntnisse des Gesamtsystems verfügen , um mit allen I 2 C kommunizieren zu können Sklaven in diesem Bus.

Welche Frage sollte ich mir stellen, um die gute Wahl zu treffen? (im Allgemeinen nicht für dieses spezielle System)

Überlegen Sie, welche MCU in Ihrem System weiß:

  • am meisten über den Gesamtsystemstatus und kann daher entscheiden, wann I 2 C-Befehle an die Slaves gesendet werden sollen;
  • Welche I 2 C-Befehle müssen an jeden Slave gesendet werden?
  • Welche Daten müssen von jedem I 2 C-Slave gesammelt werden ?
  • welche I 2 C-Geräte nur auf eingehende Befehle reagieren (dies gilt für Ihre "S1" -MCUs - es scheint klar zu sein, dass sie am besten als Slaves geeignet sind);

Unabhängig davon, welche MCU der I 2 C-Master sein wird, müssen Sie die gesamte Systemarchitektur entwerfen und überlegen, welche Befehle an jedes Gerät gesendet werden müssen und wie schnell Antworten empfangen werden müssen. Versuchen Sie, ein System zu entwerfen, das einen offensichtlichen "Master" hat und den gesamten Systemstatus kennt. Dann kann es wahrscheinlich auch das I 2 C-Master-Gerät sein.

Du sagtest:

S3 ist das Zentrum des Systems, aber andererseits kann S2 mehr Nachrichten als S3 senden.

Es ist nicht klar , wer „S2“ Nachrichten sendet an . Muss es aktiv Nachrichten an jemanden senden ? Oder kann "S2" von "S3" als I 2 C-Master abgefragt werden , um die Sensor- und Schaltinformationen zu empfangen, die "S2" sammelt? Wenn "S2" von "S3" abgefragt werden kann, scheint es auf der Grundlage der Beschreibung klar zu sein, dass die MCU "S3" der I 2 C-Master sein könnte.

Ich bin vorsichtig , wenn ich noch eine weitere MCU (nennen wir sie "S10") als I 2 C-Master hinzufüge . Das liegt daran, dass eine "S10" -MCU anscheinend viele Abfragen durchführen muss, um das gesamte Systemstatuswissen zu sammeln, das "S3" bereits bekannt ist. Das scheint eine unnötige Vervielfältigung zu sein.

Daher kann es weniger kompliziert sein, wenn "S3" das System steuert, indem es zum I 2 C-Master gemacht wird, anstatt es hinzuzufügen , es sei denn, "S3" kann die Aufgabe nicht ausführen, da die Grenzen des RAM-Speicherplatzes, des Flash-Speicherplatzes oder der CPU-Zyklen usw. erreicht sind ein zusätzlicher "S10" Controller.

Wenn Ihnen die zusätzliche Komplexität nichts ausmacht, erhöht das Hinzufügen eines allgemeinen "S10" -Controllers die Modularität (Segmentierung) des Systems, da "S3" dann nur Bluetooth und Audio ausführt - sonst nichts. Dies könnte zusätzliche Flexibilität für das Hinzufügen neuer (unvorhergesehener) Funktionen / zusätzlicher MCUs in der Zukunft ermöglichen, ohne dass der Code in "S3" geändert werden muss.

SamGibson
quelle
1

S1 sollte ein I 2 C-Slave sein. Für einen Master wäre entweder S2 oder S3 eine sinnvolle Wahl. Aber das ist nur eine Wiederholung dessen, was in der ursprünglichen Frage erwähnt wurde.

Oft ist die MCU, die sich mit der größten Vielfalt der Eingaben befasst, ein guter Kandidat für einen Master. In Ihrem Fall ist es entweder der S2 (eine Vielzahl von Benutzertasten, RTC) oder der S3 (eine Vielzahl von Befehlen über Bluetooth). Wenn Sie sich nicht entscheiden können, können Sie einen größeren Controller erwerben und beide Funktionen S2 und S3 in eine MCU integrieren. Dieser Ansatz bietet Ihnen mehr Flexibilität.

Nick Alexeev
quelle
0

Jeder Mikrocontroller in Ihrem System kann der Master sein. Einige von ihnen eignen sich jedoch besser für diese Funktion. Wie von anderen Leuten gesagt, sollte der Mikrocontroller mit den mehr Informationen der Meister sein.

Kleiner Riegel
quelle