Handshake mit Oder-Gattern

Gast #1157405
Lesenswert?

Hallo Zusammen,

Ich habe folgendes Problem:

Mehrere Controller sollen über einen Steuer-Bus und einen Daten-Bus von 
einem einzigen anderen Controller Daten abfragen können. (der 
Datenverteiler)
Dazu hat jeder der anfragenden Controller einen Handshake-In und einen 
Handshake-Out. Wenn der H-In Low ist kann der Controller seinen H-Out 
auf High legen und so wissen die anderen, dass der Bus gerade belegt 
ist.
Nun muss ich die H-Out aller Controller jeweils mit allen H-In 
verbinden.
Kann ich das über mehrere Oder-Gatter realisieren?
Oder gibt es einen besseren weg?

Gruß,
Kain
Gast #1157423
Lesenswert?

>gibt es sowas eigentlich als fertiges IC?
Meinst Du Wired-Or bzw. Wired-And?

Das wäre zwar theoretisch machbar, jedoch vermutlich ohne grösseren 
praktischen Wert.

Sieh Dir einmal eine Schaltung an (wikipedia) dann wirst Du sicher 
sehen, warum nicht.
Gast #1157433
Lesenswert?

danke sehr, diese schaltung spart doch durchaus platz auf der platine. 
;-)

aber welche bekannten ICs außer dem MC10101 kämen noch in frage um eine 
solche wired-or schaltung zu bauen?
ich will die paar teile direkt bei uns in der stadt in einem shop kaufen 
und kann natürlich nur verwenden was es dort auch gibt.
Gast #1157449
Lesenswert?

>aber welche bekannten ICs außer dem MC10101 kämen noch in frage um eine >solche 
wired-or schaltung zu bauen?

Äh. Hast Du das jetzt wirklich verstanden oder nicht?
Du brauchst kein extra IC.

Oder stehe ich jetzt auf'm Schlauch?

Ich würde gerade einfach alle H-In und H-Out zusammenschalten und eine 
Wired-Verknüpfung basteln. Oder was? :-))))
Gast #1157459
Lesenswert?

dann hab ich es wohl doch noch nicht ganz kapiert?
wie genau mach eich nun eine solche wired-or verknüpfung?
und warum verwenden manche dioden, wenn ich für eine solche wired-or 
verknüpfung sonst "nichts" brauche?
Gast #1157464
Lesenswert?

Hier: http://de.wikipedia.org/wiki/Wired-AND ist das im Detail erklärt.

Dioden bräuchtest Du nur, falls Du keine Open-Kollektor Ausgänge hast.
Und dieses MC10101010101010 oder was weiss ich ist für ein Wired-Or in 
ECL-Technik. Brauchst Du auch nicht.

Im Wired-And ist der Ausgang dann 1 wenn alle Eingänge 1 sind. Also eben 
eine UND. Und negieren kannst Du, falls nötig, im Prozessor.
Gast #1157471
Lesenswert?

das im wikipedia verstehe ich, aber wie mir das bei meinem problem 
helfen soll, da stehe ich auf dem schlauch?

könntest du es nicht mal praktisch erkären?
- es gibt einen mega168 der die daten hat
- es gibt 3 mega168, welche die daten haben wollen
- jeder der drei hat einen H-In und einen H-Out

wie verknüpfe ich die nun?
Gast #1157475
Lesenswert?

Habe ich doch schon geschrieben:

>Ich würde gerade einfach alle H-In und H-Out zusammenschalten und eine
>Wired-Verknüpfung basteln.

Und auch Du schriebst doch:
>Nun muss ich die H-Out aller Controller jeweils mit allen H-In verbinden.

Genau das meine ich.

Also:

Leitung Low >> Bus belegt
Leitung high >> Bus frei

Wenn einer anfragen will, guckt er auf der Leitung ob der Bus frei ist.
Wenn nicht, wartet er eine zufällige Zeit (Aloha-Protokoll)
Wenn der Bus frei ist, setzt er selbst die Leitung auf High und fängt an 
zu senden.
Gast #1157480
Lesenswert?

kann man es so machen?

alles ganz normal verkabeln, dass auf jedem eingang die ausgänge der 
anderen liegen. solange der controller nichts macht ist der H-Out pin 
als eingang definiert. die H-In sind alle als Eingang definiert mit 
internem Pull-Up. Will ein controller den bus nutzen schaltet er H-Out 
auf ausgang um und setzt ihn Low. Bei allen anderen liegt nun an H-In 
Low an und nicht mehr High durch den Pull-Up -> Leitung belegt.
Gast #1157484
Lesenswert?

ah schön, glaube was du schreibst ist das worauf ich nun auch selbst 
gekommen bin.
sollte der controller der die leitung auf Low setzt um sie zu benutzen 
erst nochmal warten und schauen ob wer anders zufällig gleichzeitig das 
selbe getan hat oder kommt sowas eher nicht vor?
Gast #1157485
Lesenswert?

So könnte man es auch machen.
Musst mal das Manual vom Prozessor lesen.
Mir ist so, als ob beim AVR die Übergänge zwischen Input, Output Low und 
Out High nicht beliebig gehen, ohne das man ein paar Effekte beachten 
muss.


Falls das so nicht geht, oder auch wegen der Einfachheit:
Je Prozessor einen Ein- und Ausgang, die dann auch so bleiben und 
einen systemweiten Pull-Up.
Gast #1157487
Lesenswert?

>sollte der controller der die leitung auf Low setzt um sie zu benutzen
>erst nochmal warten und schauen ob wer anders zufällig gleichzeitig das
>selbe getan hat oder kommt sowas eher nicht vor?

Das ist da übliche Problem, bei dieser Art Kanalbelegung. Deswegen habe 
ich das Aloha-Protokoll erwähnt. Lies das mal. Ist recht einfach.

Besser wäre es natürlich, von vorneherein eine Schnittstelle/Protokoll 
zu verwenden, das mit Kollisionen klarkommt. Sowas wie CAN. Oder auch 
I2C wenn Du die Mimik so umdesignen kannst das es nur einen Master gibt.
Gast #1157489
Lesenswert?

Wie das geht wenn man H-Out auf Ausgang belässt verstehe ich nicht?
Wenn alle High pegel auf H-Out geben weil sie die leitung nicht benutzen 
wollen und dann kommt einer und setzt den ausgang auf Low, dann wird das 
doch von den ganzen High überdeckt oder wie funktioniert das?
Gast #1157490
Lesenswert?

>erst nochmal warten und schauen ob wer anders zufällig gleichzeitig das
>selbe getan hat

Das funktioniert halt nicht, weil die Leitung, dann nun mal LOW ist. 
Lower kann sie nicht werden. Und wie sonst sollte ein anderer 
signalisieren, das er senden will.

Deswegen sollte ja jeder erstmal selbst schauen ob der Kanal frei ist.
Gast #1157492
Lesenswert?

>Wie das geht wenn man H-Out auf Ausgang belässt verstehe ich nicht?
>Wenn alle High pegel auf H-Out geben weil sie die leitung nicht benutzen
>wollen und dann kommt einer und setzt den ausgang auf Low, dann wird das
>doch von den ganzen High überdeckt oder wie funktioniert das?

Das kannst Du Dir so klarmachen, das durch den Pull-Up das High immer 
"weich" ist, das Low hingegen "hart" weil über die viel niederohmigere 
CE-Strecke (oder DS) nach Masse verbunden. D.h. sind da einige Ausgänge 
auf High (aber Open-Kollektor) an einem Pull-Up und nur einer Low, 
dann ist das Ergebnis eben Low.
Gast #1157495
Lesenswert?

Musst Du mal googeln oder hier in der Codesammlung gucken.

CAN erfordert noch etwas Hardwareaufwand und ist nicht ganz einfach.

Ich würde das schon so machen, wie Du es ursprünglich geplant hast. Ich 
habe das nur als Beispiel gesagt, um den Gegensatz zu einem 
Aloha-Artigen Protokoll zu zeigen. Da lernst Du was dran.

CAN ist jedenfalls komplex und I2C ist auch nicht ohne.
Gast #1157983
Lesenswert?

@ Route_66

>Wenn Du mit Datenverstümmelung bei gleichzeitigem Zugriff (=Kollision)
>leben willst, dann kannste das so machen. Anderenfalls brauchst Du ein
>Protokoll oder eine andere Form des Handshakes.

Da hast Du recht. Deswegen habe ich ihm auch Aloha zu lesen empfohlen. 
Da können die Kollisionen zwar nicht vermieden werden, aber deren 
Folgen.

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