PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einfaches Master Slave Beispiel?



KingTobi
13.09.2007, 20:53
Hi

Wär jemand so nett mal ein einfaches Master Slave Beispiel zu posten?
Also ein Programm(Master) das eine Zahl zum Slave schickt.
Und ein Programm(Slave) Welches diese Zahl empfängt.
Ich bekomm das einfach nicht hin.

KayH
14.09.2007, 11:41
Meinst Du mit Master die Erweiterungskarte M32 bzw. Aehnliches? Dann sind z.B. die I2C Beispiele mitgeliefert.
Oder sollen sich nur zwei Programme auf einem muC unterhalten? Soweit ich das bisher verstanden habe hat der ATmega32 kein Multitasking. Du muesstest das erst selbst erstellen. Aber dann gibt es immer noch keine zwei verschiedenen Programme, nur zwei Module. Diese koennen natuerlich Daten ueber Variablen austauschen.
Kannst Du bitte noch etwas mehr Infos zu Deinem Vorhaben geben, dann koennte Dir besser geholfen werden (denke ich).

mfg
Kay

KingTobi
14.09.2007, 13:42
Hi

Ja, Slave ist der RP6 und Master ist die M32 Erweiterungsplatine.
Und ja, die Beispiele kenn ich, ich kenn auch die Doku doch irgendwie wills nich hinhauen.

Ich möchte "einfach" vom Master eine 1 senden und dann am Slave empfangen und in einer Variable ablegen.

Was ich daran dann weiter mache hat damit ja nichts zu tun.

KingTobi
14.09.2007, 14:48
Um nochmal etwas konkreter zu werden, ich benutze dieses Beipsiel für des Controler auf dem Hauptboard:


#include "RP6RobotBaseLib.h"
#include "RP6I2CslaveTWI.h" // I2C Library Datei einbinden (!!!)
// ACHTUNG: Das muss auch im Makefile eingetragen werden (!!!)
#define CMD_SET_LEDS 3 // LED Kommando, das über den I2C Bus
// empfangen werden soll.

int main(void)
{
initRobotBase();
I2CTWI_initSlave(10); // TWI initialisieren und Adresse 10 einstellen
powerON();
while(true)
{
// irgendein Kommando empfangen und KEIN Schreibzugriff aktiv?
if(I2CTWI_writeRegisters[0] && !I2CTWI_writeBusy)
{
// Register speichern:
uint8_t cmd = I2CTWI_writeRegisters[0];
I2CTWI_writeRegisters[0] = 0; // und zurücksetzen (!!!)
uint8_t param = I2CTWI_writeRegisters[1]; // Parameter

if(cmd == CMD_SET_LEDS) // LED Kommando empfangen?
setLEDs(param); // LEDs mit dem Parameter setzen
}

if(!I2CTWI_readBusy) // Kein Lesezugriff aktiv?
// Dann aktuellen LED Zustand ins Register 0 schreiben:
I2CTWI_readRegisters[0] = statusLEDs.byte;
}

return 0;
}

KingTobi
14.09.2007, 14:54
So, habs nun nochmal durchgelesen und hinbekommen!
Trotzdem Danke an alle, die mein Selbstgespräch verfolgt haben ;)