Forum: Mikrocontroller und Digitale Elektronik Handshake mit Oder-Gattern


von Vul Kain (Gast)


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

von STK500-Besitzer (Gast)


Lesenswert?

>Oder gibt es einen besseren weg?
Wired-AND oder Wired-NOR

von Vul Kain (Gast)


Lesenswert?

gibt es sowas eigentlich als fertiges IC?

von Zulu (Gast)


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.

von Vul Kain (Gast)


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.

von Zulu (Gast)


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? :-))))

von Der wohl ahnungslose (Gast)


Lesenswert?

... würde das mitteld Dioden machen - sobals eine HIGH ist, ist am 
Ausgang ein HIGH ... ein ODER eben

von Zulu (Gast)


Lesenswert?

Ich meine, ich gehe davon aus, das Du sowas wie AVR-Atmels oder 
jedenfalls einen Prozessor mit Open-Kollektor-Ausgängen benutzt.
Ist das so? Falls nicht, was dann?

von Zulu (Gast)


Lesenswert?

@ Der wohl ahnungslose

Du hast wohl leider nicht mitgekriegt, das es um eine 
Wired-And-Verknüpfung ging. Dioden sind da nicht nötig.

von Vul Kain (Gast)


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?

von Vul Kain (Gast)


Lesenswert?

wie? mit einer wired-and verknüfung erreiche ich das selbe wie bei einer 
or verknüpfung?

von Zulu (Gast)


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.

von Zulu (Gast)


Lesenswert?

Wired-Or ergibt sich durch die Negation der ganzen Geschichte. Negation 
einer Und-Verknüpfung ist das selbe wie die Oder-Verknüpfung der 
negierten Eingangssignale.

von Zulu (Gast)


Lesenswert?

De Morgan.

von Vul Kain (Gast)


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?

von Zulu (Gast)


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.

von Zulu (Gast)


Lesenswert?

Mist. Es muss natürlich heissen:

Wenn der Bus frei ist, setzt er selbst die Leitung auf Low und fängt 
an
zu senden.

von Vul Kain (Gast)


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.

von Vul Kain (Gast)


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?

von Zulu (Gast)


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.

von Vul Kain (Gast)


Lesenswert?

wenn man nicht mehr schauen will und davon ausgeht, dass kein anderer 
gleichzeitig das selbe macht würde doch auch eine einzige Leitung 
reichen oder?

von Zulu (Gast)


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.

von Zulu (Gast)


Lesenswert?

>und davon ausgeht, dass kein anderer gleichzeitig das selbe macht

Davon kannst Du eben nicht ausgehen. ALOHA!!!!

von Vul Kain (Gast)


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?

von Zulu (Gast)


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.

von Zulu (Gast)


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.

von Vul Kain (Gast)


Lesenswert?

gibt es von I2C oder can eine fertige library die man verwenden kann?

von Zulu (Gast)


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.

von Vul Kain (Gast)


Lesenswert?

werde es auch so wie geplant machen, ist hardwaremäsig eh schon alles 
aufgebaut. mir geht es ebenfals ums lernen und deshalb werde ich das mit 
dem i2c auch mal ausprobieren.

von Route_66 (Gast)


Lesenswert?

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.

von ... .. (docean) Benutzerseite


Lesenswert?


von Zulu (Gast)


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.

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.