PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : RP6 Base mal als i2C Master und als I2C Slave



Lurchi
14.05.2009, 10:47
Hallo,

ich möchte die RP6 Base z.t. als I2C Slave betreiben (um es durch den das M32 Steuern zu lassen und Statusinformationen zu liefern) aber auch auf Sensoren am i2C Bus (z.b. Kompass) als Master zugreifen, damit ich die Motorsteuerung entsprechend überprüfen kann.

Weis jemand ob das geht und überhaupt sinnvoll ist?
Die Frage ist:
- geht ein ständiger Wechsel der Base von Slave zu Master überhaupt?
- kommt der M32 als Master nicht durcheinander wenn der Slave mal da ist und mal mal nicht?
- kann ich evtl. beide Boards als ständige Master am Bus betreiben und trotzdem Daten zwischen den beiden austauschen?

Die Alternative wäre, dass das M32 als Master die Sensorwerte der Base zur verfügung stellt - aber das erscheint mir sehr unelegant.

Vielen dank im Voraus

Lurchi :-)

Fabian E.
14.05.2009, 12:04
Was ist denn daran so unelegant, die M32 alle Sensoren auswerten zu lassen und dann die Base zu steuern?
Eigentlich klappt das ganz gut so =)

Fabi

PicNick
14.05.2009, 12:55
Die Sache ist zwar aufwendiger, geht aber tadellos
https://www.roboternetz.de/wissen/index.php/TWI_Praxis_Multimaster

Fabian E.
14.05.2009, 16:46
Generell würde ich dir raten, von dem Modell abzuweichen, dass die Base selber irgendwas auswertet...
Überlass der doch einfach nur die Steuerung der Motoren und den restlichen Kram auf der Base.
Wie genau die Motoren jetzt gesteuert werden, oder was mit den Sensordaten passiert, entscheidest du auf der M32.
Es gibt doch eine kleine Lib für die M32, mit der du sie wie die Base verwenden kannst. Guck dir mal das M32 Move2 Beispiel an, da ist noch eine extra .c-Datei dabei, die das kann.

Fabi

Lurchi
14.05.2009, 23:17
Hi,

danke für die Rückmeldungen.

Wenn ich das richtig sehe, scheint es möglich zu sein gleichzeitig Maste rund Slave zu sein. Leider schließt das die aktuelle implementierung der RP6 Lib aus... Mal sehen ob ich Quellen finde, die das implementieren...

@Fabi: Ich stricke gerade desdalb die Baselib um, da mir der Ansatz nicht gefällt, das die Base jegliche "Verantwortung" an das RP6 Control Board abgibt. Dann (wie im Beispielcode) brauche ich ja die Base nicht.

Die 8 MHz der Base sollten ausreichend sein, die paar Tätigkeiten zuverlässig auszuführen. Allerdings benötigt die Base ein paar zusätzliche Sensorwerte...

Grüße

Lurchi :-)

SlyD
15.05.2009, 12:14
> Dann (wie im Beispielcode) brauche ich ja die Base nicht.

Irrtum :). Der Base Controller entlastet den Master Controller von der kompletten Motorregelung und dem Überwachen des ACS / IRCOMM und einigen anderen Dingen... (kann per Interrupt bei niedriger Akkuspannung warnen z.B. und informiert auch NUR DANN über den Zustand des ACS oder der Bumper wenn sich etwas geändert hat ).
Man schickt nur kurz ein Kommando rüber - den Rest übernimmt der Controller auf dem Mainboard.

Das spart eine Menge Rechenzeit auf dem Master und man hat nebenbei auch noch mehr freien Speicher, freie Timer, mehr freie I/O Ports usw......

Das macht also sehr wohl Sinn ;)

MfG,
SlyD

Lurchi
15.05.2009, 22:08
Hmmm. Nicht von der Hand zu weisen... Aber mein Gedankengang geht in die Richtung, nicht einfach die LIB Commands den Control zur Verfügung zu stellen sondern ein etwas "höheres" und komfortables Interface.

Nebenbei bringe ich der Base im Moment ein wenig mehr Zuverlässigkeit bei Richtung (Compass), Hindernissabstand (US Sensoren), Klippensensoren (IR Sensoren) bei und eine komfortablere Schnittstelle für die Funktionen und die Motorsteuerung. Zudem bin ich halt einfach C++ Fan... (Leider gibt hier so wenige davon)

Der reine LIB Port ist fertig und funktioniert für Base und Controlboard... (Bis auf einen Bug im ACS...) Jetzt kommen die Funktionserweiterungen.

Wenn mein RP6 nicht mehr vom Schreibtisch hüpft hab ichs geschafft ;-)

Grüße

Lurchi