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