www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Handshake mit Oder-Gattern


Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: STK500-Besitzer (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Oder gibt es einen besseren weg?
Wired-AND oder Wired-NOR

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibt es sowas eigentlich als fertiges IC?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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? :-))))

Autor: Der wohl ahnungslose (Gast)
Datum:

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

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Vul Kain (Gast)
Datum:

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

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
De Morgan.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>und davon ausgeht, dass kein anderer gleichzeitig das selbe macht

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

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
gibt es von I2C oder can eine fertige library die man verwenden kann?

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Vul Kain (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Route_66 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ... ... (docean) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Zulu (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.