Forum: Mikrocontroller und Digitale Elektronik Master /Slave Kommunikation


von no name (Gast)


Angehängte Dateien:

Lesenswert?

Hallo Leute,
ich brauche dringend Hilfe, und zwar habe ich folgendes Problem:
ich will eine Master(Receiver) Slave(Transmitter) Kommunikation zwischen 
2 µC herstellen. Der Slave soll einen Low Pegel(PINA0 von atmega32 soll 
dabei verwendet werden) an den Master schicken, damit weiss dann der 
Master, dass der Slave Daten an ihn schicken möchte. Nimmt der Master 
diese Anfrage an und schickt Daten an den Slave so soll der Pegel high 
werden. ich habe hier einen Codebeispiel, weiss aber absolut nicht wie 
ich das da einbauen kann. kann mir da vllt jmd helfen?

von Karl H. (kbuchegg)


Lesenswert?

no name schrieb:
> Hallo Leute,
> ich brauche dringend Hilfe, und zwar habe ich folgendes Problem:
> ich will eine Master(Receiver) Slave(Transmitter) Kommunikation zwischen
> 2 µC herstellen. Der Slave soll einen Low Pegel(PINA0 von atmega32 soll
> dabei verwendet werden) an den Master schicken, damit weiss dann der
> Master, dass der Slave Daten an ihn schicken möchte. Nimmt der Master
> diese Anfrage an und schickt Daten an den Slave so soll der Pegel high
> werden. ich habe hier einen Codebeispiel, weiss aber absolut nicht wie
> ich das da einbauen kann. kann mir da vllt jmd helfen?

Wie, du weißt nicht, wie man einen Pin gezielt auf 0 bzw. 1 setzt, bzw. 
einen Pin abfragt?
Dann solltest du noch nicht mit I2C rummachen.

von no name (Gast)


Lesenswert?

wie ich diese demotivierenden Sätze liebe :-/

von Karl H. (kbuchegg)


Lesenswert?

no name schrieb:
> wie ich diese demotivierenden Sätze liebe :-/


Das mag schon sein.
Aber was soll man ihm sonst sagen? Du hilfst niemandem damit, der gerade 
mal mit Stützrädern radfahren kann, wenn du ihn ermunterst, beim 
Radrennen "rund um den Henninger Turm" mitzumachen.

Erst muss man krabbeln lernen, dann gehen, dann laufen und erst dann ist 
man reif für seinen ersten Marathon. Keine einzige der Stufen kann 
übersprungen werden.


Zumal wir hier davon reden, einen Pin gezielt auf 0 zu setzen und wenn 
danach über TWI was reinkommt, den Pin wieder auf 1 zu setzen. Also eine 
Variation der allerersten Programme: Led ein/ausschalten.

von no name (Gast)


Lesenswert?

ja und du willst mir dabei nicht helfen oder wie verstehe ich das??
ich mein den Code den ich geschickt habe verstehe ich ja, wie man pins 
auf 0 oder 1 setzt ist mir auch klar, nur weiss ich nicht genau wie ich 
eine anfrage an den master senden soll. Ich denke vllt zu kompliziert 
und vllt würde mich ein wort ein satz ein hinweis weiter bringen. Aber 
wenn man solche kommentare liest hat man dann kein bock mehr weiter zu 
machen und das ist doch schade oder??

von Karl H. (kbuchegg)


Lesenswert?

no name schrieb:
> ja und du willst mir dabei nicht helfen oder wie verstehe ich das??
> ich mein den Code den ich geschickt habe verstehe ich ja, wie man pins
> auf 0 oder 1 setzt ist mir auch klar, nur weiss ich nicht genau wie ich
> eine anfrage an den master senden soll.

Du sendest gar keine Anfrage.
Der Slave sendet von sich aus überhaupt nicht.

Du setzt den Pin und damit die Leitung auf 0 und da die Leitung zum 
Master führt, fragt der irgendwann den Pegel ab und fängt daraufhin an, 
mittels TWI rauszufinden, was der Slave eigentlich will.

(Aus Sicht des Slave ist die Leitung eine LED die er ein/ausschaltet. 
Aus Sicht des Master ist an der Leitung ein Taster, der gedrückt wird. 
Einfach nur ein Stück Draht von einem µC zum anderen. Der SLave schaltet 
die Leitung auf 0 oder 1 und der Master sieht sich an, welcher Pegel 
vorliegt)

Das ist wie:
Wenn du haben willst, dass dein Kumpel dich anruft, dann ziehst du eine 
Fahne am Fahnenmast hoch, aber du rufst ihn nicht an. Du hast als Slave 
nicht das Recht dazu. Er ist der Master, du der Slave. Jegliche TWI 
Kommunikation geht von ihm aus. Er ruft dich an, nicht du ihn.

von no name (Gast)


Lesenswert?

hmm.. ich dachte, dass der Slave durch den einen Pin eine Anfrage an den 
Master sendet und er dann darauf reagiert, denn der Slave soll in 
unregelmäßigen Abständen Daten senden..

von Rene S. (Firma: BfEHS) (rschube)


Lesenswert?

Wozu brauchst du die extra Leitung?

Der Master schickt dem Slave ein Zeichen, darauf Antwortet der Slave, 
fertig.
Bei I2C habe die Teilnehmer doch Adressen, da brauchst du keine CS oder 
EN Leitung...

Wenn der Slave von sich aus einfach Daten sendet, solltest du dein 
Master-Slave Konzept überprüfen.

Gruß aus Berlin

von Karl H. (kbuchegg)


Lesenswert?

no name schrieb:
> hmm.. ich dachte, dass der Slave durch den einen Pin eine Anfrage an den
> Master sendet

streich einfach das Wort 'senden' und du bist dort. Der Slave sendet 
nichts. Der Slave zieht einfach einen Portpin auf 0. UNd das wars dann 
schon. Damit weiß der Master (wenn er die Leitung abfragt und dort die 0 
vorfindet) dass er sich mit diesem Slave beschäftigen muss.

Slave:
1
int main()
2
{
3
   ....
4
5
6
   while( 1 ) {
7
8
      if( irgendwas ist vorgefallen, was der Master wissen muss )
9
        PORTA &= ~( 1 << PA0 );
10
11
12
      if( der Master hat den Vorfall abgefragt )
13
        PORTA |= ( 1 << PA0 );
14
15
      ....
16
   }
17
}

(Sicherheitshalber wird man die Reaktion auf das Abfragen direkt in die 
TWI Routinen einbauen, aber im Grunde wars das aus Slave Sicht.

Master:
1
int main()
2
{
3
   ....
4
5
  while( 1 ) {
6
7
    if( !(PINC & ( 1 << PC4 )) )  // der Slave will was
8
    {
9
       .... frag den Slave per TWI was er will
10
    }
11
  }
12
}

(Annahme: Die Leitung geht vom Slave, Port A/Pin 0 zum Master Port C/Pin 
4)

Kann man so machen, muss man nicht.
Normalerweise fragt der Master einfach reihum alle Slaves: Hast du was 
für mich?

von no name (Gast)


Lesenswert?

das konzept sieht folgendermaßen aus:
zunächst muss die Leitung auf low gelegt werden, dann soll der master 
die Start-Bedingung plus SLA +R an den Slave senden, daraufhin wird 
geprüft, ob der Slave ein ACK sendet, wenn ja geht die Leitung auf high, 
wenn nicht wird eine Error Message gesendet. Ist die Leitung high, 
sendet der Slave seine Daten an den Master. Sendet der Master einen NACK 
wird die Kommunikation beendet. Und anschließend folgt die Stop - Bed. 
seitens des Masters.

von ....bitte ausfüllen.... (Gast)


Lesenswert?

Oder ist mit dem Pin ein zusätzliches Interrupt-Signal gemeint?
Hat der Slave etwas, was sich der Master holen kann, gibt er ein Signal 
(Low). Daraufhin sendet der Master seine Anforderung (und holt ggf Daten 
ab). Nachdem die Anforderung vom Slave verstanden wurde, setzt er das 
Signal wieder auf High.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.