PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : I2C - RP6, M32 und M128



Fabian E.
27.05.2010, 17:04
Hallo,
ich habe gerade festgestellt, dass man als Slave im I2C-Bus nichts schreiben kann. Deshalb kann ich von meinen Ultraschallsensoren keine Werte abfragen.
Ich habe eine Kombination aus RP6, M32 und M128. RP6 und M32 sind Slaves, M128 ist Master.
Nun soll sich die M128 übergeordnet um alles kümmern, während die M32 die US-Sensoren abfragen und die Daten aufbereiten soll. Danach werden die Daten der M32 von der M128 abgefragt.
Aber dieses Szenatio scheint nicht möglich zu sein, oder?

Knipser-14
27.05.2010, 17:40
Hallo;

der Slave kann sehr wohl Daten senden, aber nicht von sich aus, sondern nur wenn er vom Master "angesprochen" wird.
Der Master fordert dann Daten vom Slave an und dieser kann diese dann senden. Der Slave kann nur nicht selber eine Start-Bedingung auslösen.
Am besten liest du dir einmal die entsprechenden Artikel im RN-Wissen durch.

MfG

Fabian E.
27.05.2010, 18:04
Okay, das habe ich mir gedacht, danke!

SlyD
28.05.2010, 17:25
Hallo,

dazu sind die "Interrupt" Leitungen am XBUS da.
Die muss man nicht als "echten" Interrupt verwenden - die kann man auch einfach in der Hauptschleife abfragen das geht problemloser.

Du musst mit diesen Leitungen nicht periodisch I2C Busabfragen machen sondern den Slave einfach nur den interrupt Pin setzten lassen sobald sich irgendwas an den Daten geändert hat. Das im Master abfragen und nur dann eine Abfrage (aller) Slaves machen.
(wird in den Beispiel Libraries genau so gemacht)

Kann man sich so vorstellen das der Slave beim Master das Telefon klingeln lässt und der dann rangeht und fragt was denn los ist ;)
Nur weiss der Master nicht direkt welcher Slave geklingelt hat und ruft quasi erstmal alle zurück ;)
Das kann man auch ändern - mit den Interrupt Jumpern auf den Boards kann man das umkonfigurieren.


Aber vorsicht! Immer die Pinrichtungen richtig einstellen - oder die vorhandenen Funktionen in der RP6Lib (sind aber nicht für alle pins vorhanden!) verwenden - extIntON und OFF! Der Pin darf nur aktiv High treiben, bei Low Pegel muss man den Pin stattdessen als Eingang konfigurieren(!!!) - ein externer Widerstand zieht das Signal dann runter.

MfG,
SlyD