PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : USB Switch selber bauen



Demian
24.12.2009, 08:04
Moin zusammen und fröhliche Weihnachten,

gleich vorneweg, ich erwarte über die Feiertage keine Antwort -> es gibt schließlich Wichtigers in diesen Tagen!!! Ich will es nur schonmal "loswerden".

Also ich will mir einen kleinen USB-Switch bauen um zum Beispiel meinen Drucker an 2 PC's anzuschließen, und dann mittels Schalter den PC zu wechseln.

Da ich noch Anfänger im Bereich der Elektronik bin, stelle ich mir das wahrscheinlich viel zu einfach vor, und übersehe einige grundlegende Details.

Ich hoffe, dass mir jemand bezüglich meines angehängten Schaltplans und Controllercode, helfen kann dieses Projekt zu einem qualmfreien Ende zu führen.

Ich bin mir nicht so schlüssig, ob ich was das "Durchschleifen" der Signale betrifft, so richtig vorgegangen bin. Müssen D- und D+gekreuzt werden?

Gruß
Demian


'General
$regfile = "m8def.dat" 'ATMega8-Declaration
$crystal = 3686400 'Quarz: 3,6864 Mhz

'Interrupts
On Int0 Switchusb 'USB-Switch Routine
Enable Int0 'activate INT0 interrupt
Config Int0 = Rising 'when pushing button
Enable Interrupts 'allow interrupts global

'Variables
Dim Usb As Bit '0=USB1, 1=USB2

'Input USB
Config Portb.0 = Input 'VBUS
Config Portd.5 = Input 'GND
Config Portd.6 = Input 'D+
Config Portd.7 = Input 'D-

'Output USB 1
Config Portc.1 = Output 'LED
Config Portc.2 = Output 'D-
Config Portc.3 = Output 'VBUS
Config Portc.4 = Output 'GND
Config Portc.5 = Output 'D+

'Output USB 2
Config Portb.1 = Output 'LED
Config Portb.2 = Output 'D-
Config Portb.3 = Output 'VBUS
Config Portb.4 = Output 'GND
Config Portb.5 = Output 'D+

'Initialize
Usb = 0 'start with USB 1
Portd.2 = 1 'enable internal pullup for button

'Mainloop
Main:

Select Case Usb
Case 0
Portb.1 = 0 'USB 2 LED off
Portc.1 = 1 'USB 1 LED on
Portc.2 = Portd.7 'D- of USB Input to D- of USB Output
Portc.3 = Portb.0 'VBUS from USB Input to VBUS of USB Output
Portc.4 = Portd.5 'GND of USB Input to GND of USB Output
Portc.5 = Portd.6 'D+ of USB Input to D+ of USB Output
Case 1
Portc.1 = 0 'USB 1 LED off
Portb.1 = 1 'USB 2 LED on
Portb.2 = Portd.7 'D- of USB Input to D- of USB Output
Portb.3 = Portb.0 'VBUS from USB Input to VBUS of USB Output
Portb.4 = Portd.5 'GND of USB Input to GND of USB Output
Portb.5 = Portd.6 'D+ of USB Input to D+ of USB Output
End Select


Goto Main



Switchusb:
Toggle Usb

Return

avr57
24.12.2009, 08:29
Hallo,

ob sich der Aufwand lohnt so einen USB-Switch selbst zu bauen?

http://www.pearl.de/c-1422.shtml

Qualmfrei wird es wohl auch sein.

MfG Karl

Demian
24.12.2009, 08:42
Moin Karl,

naja, die Teile hätte ich alle hier, wenn das so wie in der Schaltung überhaupt funktioniert. Klar gibt es fertige Lösungen, aber da fehlt ja der Spaß an der Sache und das "Erfolgserlebnis".

Gruß
Demian

schimpl
24.12.2009, 08:53
Wenn du deinen Drucker an mehreren Pc's anschließen möchtest würde ich das über ein Netzwerk lösen, dann haben alle zugriff auf den Drucker.

Demian
24.12.2009, 08:56
das mit dem Netzwerk kann ich so leider nicht machen, weil das eine ein Dienstrechner ist und der andere mein privater.

uwegw
24.12.2009, 12:50
Du willst doch nicht allen Ernstes die USB-Signale per Software weiterreichen?
Mal kurz durchrechnen:
Einen Durchlauf der mainloop würde ich mit mindestens 20 Takten veranschlagen. Das heißt, die Signale werden mit einer Frequenz von 184kHz abgetastet. Es lassen sich also laut Abtasttheorem höchstens Signale mit 92kHz übertragen.

Nun werfen wir mal nen Blick in den USB-Standard.
Selbst bei Low-Speed-Devices (üblich für Mäuse etc.) beträgt die Datenrate schon 1,5Mbit und somit ist die zu übertragende Frequenz 1,5Mhz. Der AVR ist daher viel zu lahm.

Außerdem werden auf D+ und D- differentielle, bidirektionale Signale übertragen. Das heißt, die Pegel sind nicht 0V/5V, sondern irgendwo dazwischen, und die Richtung der Signale ändert sich ständig. Das ist mit den IO-Pin eines AVRs nicht machbar.

Und das Schalten der Versorgungsspannung dürfte wirklich zu Rauchwolken führen, weil der AVR keine 500mA liefern kann.

Demian
26.12.2009, 17:59
ok, ich geb mich geschlagen. Das mit den Takten ausrechnen usw. sind für mich noch böhmische Dörfer.

Hätte das am liebsten auch einfach per Schalter gelöst, da entfällt wenigstens die externe Stromversorgung, habe aber keinen passenden rumfliegen und auch bei Conrad keinen gefunden.

Danke für die Tipps, nen Versuch wars wert. Muss ich wohl doch eine Fertig-Lösung bestellen.

Gruß
Demian

Basteltisch
21.01.2010, 16:23
Hallo,
die selbe Idee hatte ich nun auch. Naja eigendlich hatte ich die Idee für 3 USB Anschlüsse und einem DVI Anschluss, aber in der Theorie ist es das selbe :)

Würde es denn funktionieren wenn man schlicht jede Menge Relais verwendet?

Per Schalter wird ein Stromkreis geschlossen welcher in diesem Fall 5 Relais leitend macht. Diese 5 Relais sind dann die d, d-, vbus, gnd vcc Leitungen des USB Kabels. Also insgesammt 10 kleine Relais. Würde das funktionieren oder gibt es dort eine einfachere Methode? Mir graut es nämlich vor den 35 Pins des DVI Kabels, möchte aber nicht 40€ für 4 switchte ausgeben :S

Es grüßt,
Basteltisch