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? :-))))
... würde das mitteld Dioden machen - sobals eine HIGH ist, ist am Ausgang ein HIGH ... ein ODER eben
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?
@ Der wohl ahnungslose Du hast wohl leider nicht mitgekriegt, das es um eine Wired-And-Verknüpfung ging. Dioden sind da nicht nötig.
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?
wie? mit einer wired-and verknüfung erreiche ich das selbe wie bei einer or verknüpfung?
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.
Mist. Es muss natürlich heissen: Wenn der Bus frei ist, setzt er selbst die Leitung auf Low 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.
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?
>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.
>und davon ausgeht, dass kein anderer gleichzeitig das selbe macht
Davon kannst Du eben nicht ausgehen. ALOHA!!!!
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.
gibt es von I2C oder can eine fertige library die man verwenden kann?
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.