Master /Slave Kommunikation

Gast #2811964
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?
Angehängte Dateien:
#2811982
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.
#2812014
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.
Gast #2812024
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??
#2812032
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.
(Firma: BfEHS) #2812060
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
#2812064
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?
Gast #2812070
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.
Gast #2812075
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren