usb multiplexer als kvm


Stijnos

Golden Member

helaas
1. het beeld loopt via hdmi en daar hebben we al een oplossing voor.
2. Het moet dmv usb of tcp of whatever software matig geschakeld kunnen worden

Ik zie inderdaad wel chinese kastjes voor 1:2 hdmi/usb, maar dan moet ik daar weer aan gaan knutselen om hem software matig te laten schakelen.
Ik zou eerst liever voor een eigen ontwerpje gaan en ik snap dat dat veel duurder is inderdaad, maar dan wel alles mooi op 1 pcb

fripster

Golden Member

Misschien een idee om een aantal microcontrollers te nemen (1 per PC), deze met Arduino Leonardo bootloaders firmwares te flashen en te voorzien van USB connectie naar de PC toe. Dan heb je daarmee de HID USB kant voor de PCs klaar. Beetje bruut maar wel overzichtelijk.

Dan deze allen in een multidrop serial bus hangen (op de Pcb zelf, I2C misschien?), met een busmaster die ook weer op een losse microcontroller zit. Deze 'pakt op' wat de muis en het toetsenbord doen, en stuurt dit naar de respectievelijke controller.

Omschakelen zou dan op het master keyboard kunnen met een toetsencombinatie. Of natuurlijk via een externe RS232 of Ethernet connectie. (Een Ethernet naar serial converter is ook niet duur).

Het kan zelfs met een zooitje Arduino micros die allemaal op een soort carrier PCB worden geprikt (hoef je alleen die maar te engineeren, de rest is van de plank), heb je meteen een oplossing voor de Ethernet naar serial, want die koop je ook van de plank. Niet het goedkoopst, wel snel!

Just my two cents.

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
Stijnos

Golden Member

he Fripster,

Ja dat is wat ik min of meer in gedachte heb, als ik niet met de MAX4899 multiplexers zou werken. En die aanpak geniet eigenlijk ook inderdaad mijn voorkeur.
Ik heb alleen al wel gelezen dat het vaak lastig om 2 hid devices aan een usb host interface van een micro te hangen. Ook de arduino hid device kan maar 1 device emuleren tegelijkertijd dacht ik.
Die supporten geen usb HUB en daarnaast is de usb mouse HID class nogal naar eigen smaak geimplementeerd voor veel muizen schijnbaar, maar dat ga ik eens bekijken.
Ik twijfel of het snel genoeg gaat zijn als ik alle keyboard toetsaanslagen of muis bewegingen via uart naar de clients moet sturen, maar dat gaan we onderzoeken.

Desnoods maak ik mijn ontwerp 2x, 1x voor het toetsenbord en 1x voor de muis

Op 16 november 2021 08:02:51 schreef fripster:
Misschien een idee om een aantal microcontrollers te nemen (1 per PC), deze met Arduino Leonardo bootloaders te flashen en te voorzien van USB connectie naar de PC toe.

Het feit dat die "bootloader" zich als HID device presenteert richting de PC wil niet zeggen dat de PC dat dan als toetsenbord kan gebruiken, of dat die driver zich makkelijk tot toetsenbord laat omprogrammeren.

Dat van HID als bootloader dateert van vroeger toen "men" het lastig vond als je een driver moest installeren op windows. En HID klasse was dan de enige USB device waarvan windows zei: daar heb ik een driver voor en klaar. Met een windows call kon je dan: "stuur dit naar <mijn> HID device" bijvoorbeeld de bootloader besturen en z'n werk laten doen. Tegenwoordig implementeert men een USB-storage-device op devices als MBED.

@stijn: Gewoon die multiplexers inzetten. Des noods even een enkel-stuks als prototype snel in mekaar klussen om te kijken of de PCs het trekken als je live het keyboard en muis d'r uit trekt.

Of even wat in mekaar klussen met het evaluatieboard. MAX4899AEEVKIT+

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Stijnos

Golden Member

die heb ik inmiddels 2 besteld ja. Dat lijkt me momenteel gezien de tijds druk de makkelijkste en veiligste oplossing. Die andere is wel leuker, maarja wellicht een andere keer.

Tja. Als je de STM-code voor "Hoi, ik ben een hub en.... " op de plank zou hebben liggen dan is een microcontroller oplossing waarschijnlijk haalbaar. Maar ik heb dat niet. :-(

En dan moet je nog host spelen naar het toetsenbord en muis. Da's echt een maandje werk om dat softwarematig af te krijgen.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
fripster

Golden Member

@rew: ik bedoel de firmware, niet de bootloader. Sorry verkeerde woord gebruikt. Een Leonardo heeft standaard HID aan boord voor muis en toetsenbord. Heb er een eenhandig toetsenbord mee gebouwd, werkt prima.

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
Stijnos

Golden Member

Maar die doet muis EN keyboard hid of enkel keyboard?

Langzame USB kan je eventueel ook gewoon lomp schakelen met relays.

https://www.robot-electronics.co.uk/products/relay-modules/eth8020-20-…

Wordt geleverd inclusief probleemloze software.

fripster

Golden Member

hi Stijnos,

Muis en Keyboard (en tegelijk)

voorbeelden: https://www.sparkfun.com/tutorials/337

Eens een wirehead,altijd een wirehead.... gopher://fripster.ydns.eu
Stijnos

Golden Member

@fripster
ik zie in dat artikel nog steeds niet dat ze muis en keyboard hid tegelijkertijd doen volgens mij, maar goed.

Ik heb inmiddels de MAX4899AE dev kits binnen en even snel wat mee getest.
Dat lijkt wel te werken, al haf ik even geen rekening gehouden met de 5V.
DAt bordje is echt bedoel om 4 devices aan 1 host te hangen eigenlijk. Duis de vbus van de host gaat naar de 4 device connectors.
Bij mij hanger er dus 4 pc's aan die usb A connectoren en een hub met huis en keyboard aan de usb B connector. Die moet ik dan dus extern voeden met 5V of van 1 van de 8 pc's
Het duurt echter nog wat lang 2 tot 3 sec, voor het toetsenbord operationeel is op de desbetreffende pc na het switchen van de mux. Dat zou eigenlijk sneller moeten, maar ben bang dat ik daar weinig invloed op heb. DAt is puur het gedrag van het OS die de usb handshake steeds weer opnieuw moet doen, omdat die het weer gewoon ziet als een nieuw aangesloten apparaat.

ik wil de andere optie nog kort bekijken, maar ik ben bang dat als ik alle hid commando's van muis en keyboard moet afhandelen en via een uart door moet sturen naar 1 van 8 micro's die een usb hid client vormen, ik meer iritatie krijg van haperende toetsen of langzame response dan dat ik initieel even 3 tellen moet wachten.

Handshake delay is misschien ook afhankelijk van het toetsenbord. Even getest: Mijn Logitech "K120 for business" toetsenbord stuurt binnen 0.5 seconde na inpluggen de eerste toets door. Doorsnee laptop met Windows 10 hier.

Stijnos

Golden Member

Oh dat zou kunnen, dit was een El cheapo van 10.-
Zal ook eens met mijn logitec proberen

Volgens mij heeft het toetsenbord er weinig invloed op. Die moet gewoon antwoorden als er wat gevraagd wordt (en wel op een tijdschaal zo snel dat jij het niet merkt!).

Oh wacht! Ik had in m'n STM32 code ergens vandaan:

turnoff_usb ();
sleep_ms(1500);
enable_usb ();

En dat resulteerde in een irritante wachttijd als je het ding inplugt. Ik heb nu de delay naar 200ms teruggebracht en dat werkt voor mij nog steeds prima. Ik laat het voorlopig zo. :-)

Dus zoiets kan natuurlijk ook in zo'n toetsenbord zitten.

four NANDS do make a NOR . Kijk ook eens in onze shop: http://www.bitwizard.nl/shop/
Stijnos

Golden Member

ik heb inmiddels wat testjes gedaan.
Ik heb eerst eens gekeken door een usb host te implementeren op een stm32F4 discovery en dan de keyboard HID class afvangen de payload daarvan (een 8 tal bytes) via de uart te verzenden.
Dat gaat best makkelijk en goed. Hetzelfde voor de mouse HID class werkt dat goed.
Ik heb in dit testje nog niet de usb devices gemaakt om te kijken of die de ontvangen uart data weer kunnen vertalen naar een valide usb HID keyboard of muis bericht. Dat kost me nu even teveel tijd, maar ik zie het nog steeds als een mooie oplossing,

De usb multiplexer development kits waren echter makkelijker om dat concept even te testen. Met een logitech K120 keyboard kan ik na 550ms een toets ontvangen. Ook een logitech muis na 450ms. Toen getest door beide in een usb hub te stoppen, gezien de multiplexer uiteraard maar 1 usb lijn heeft.
Nou dat wordt hem niet want de enumeration via een usb hub duurde 3 tot 4 seconden!
Dus toen de muis en keyboard beide via een eigen multiplexer geprobeerd en dan heb ik als ik beide devices gelijktijdig met de pc verbind nagenoeg dezelfde tijden als mijn eerste testje.

Met dit concept maar eens een printje gaan maken.

Nu vroeg ik me af, loont het de moeite om echt de 90ohm transmissie lijntje te maken? Dat kan via jlcpcb, maar dan moet ik minstens een 4 laags print hebben volgens mij. Die heb ik nog nooit gemaakt en moet daarvoor denk ik eerst mijn eagle licentie even opkrikken, want ik kan nu enkel 2 laags meen ik.
Of zal het voor deze muis en keyboard geen fluit uitmaken als ik gewoon 2 nette lijntje op een 2 laags printje teken?

Voor HID gaat het weinig uitmaken, voor echt heel snelle USB communicatie wel...

Arco - "Simplicity is a prerequisite for reliability" - hard en software ontwikkeling: www.arcovox.com

Op 28 november 2021 23:55:57 schreef Stijnos:
Nu vroeg ik me af, loont het de moeite om echt de 90ohm transmissie lijntje te maken? Dat kan via jlcpcb, maar dan moet ik minstens een 4 laags print hebben volgens mij. Die heb ik nog nooit gemaakt en moet daarvoor denk ik eerst mijn eagle licentie even opkrikken, want ik kan nu enkel 2 laags meen ik.
Of zal het voor deze muis en keyboard geen fluit uitmaken als ik gewoon 2 nette lijntje op een 2 laags printje teken?

90 ohm op een tweelaags print kan best, maar je spoorbreedte wordt gigantisch.

Beter kun je de sporen gewoon kort houden, een paar cm geen 90 ohm werkt prima op USB 1.1.

Je kunt het uitproberen door een stukje USB-kabel te vervangen door losse draadjes. Hoeveel los draad voordat je problemen kijgt?

Stijnos

Golden Member

wat zouden jullie met de shielding doen?
Ik lees dat geadviseerd wordt de shield van de usb connector met weerstand en c aan de ground te hangen.

Gezien de 8 usb connectoren naar 8 pc's gaan (welliswaar bij elkaar in een rack) twijfel ik of ik deze JUIST allemaal aan elkaar moet hangen? of per pc een weerstand en condensator naar de gezamenlijke ground.
De ground van de 8 pc's heb ik maar aan elkaar gehangen, want om dat allemaal te isoleren wordt teveel van het goede.

Is het nog verstandig om tussen die gounds per pc een bead te leggen of voegt dat niet veel toe?

Stijnos

Golden Member

Zo even een update van het resultaat,
Het heeft wat voeten in aarde gehad, maar al met al was dit wel echt weer een leuk project.

Ik zal hier even het project beschrijven en het resultaat laten zien.

Goed ik was dus begonnen met 2 development kits te bestellen van de MAX4899.
Deze waren niet al te duur en gezien bij dit soort projectjes vaak nogal haast hebben en ik dus geen tijd heb om meerdere printen te laten maken, wil ik vaak vooral al zoveel mogelijk als concept werkend hebben.
Nou met wat geknutselde usb kabel verloopjes en de development kits en een xplained atmel bordje was mijn concept bevestigd dat dit wel een grote kans van slagen had.
http://www.stijnmaes.nl/CO/mux/thumb/exp.jpg

vanuit hier ben ik mijn pcb gaan designen. Uiteraard hoort hier een hele zoektocht aan de juiste componenten qua connectoren, leds en knopjes bij.
Het moet er natuurlijk wel allemaal gelikt en professioneel uitzien.
Gelukkig was voor dit ontwerp het componenten tekort niet zo'n issue. Ik had nog wat micro controllers liggen en de rest van de componenten was allemaal goed verkijgbaar.
Ik heb van de meeste componenten gelijk een goede #D librarie gemaakt in Eagle, omdat ik de 3d view in Eagle/Fusion toch wel erg handig vind, zeker als zaken mechanisch in een behuizing moeten passen.
Dit was de eerste keer dat ik een 4 laags pcb heb gemaakt, wellicht niet echt nodig voor deze toepassing, maar wilde het gewoon eens proberen om de 90 ohms usb lijnen te maken. Uiteindelijk stelde dit niet zo heel veel voor.

Uiteraard moest het geheel ook in een kastje komen. Daar waar ik vroeger nog een standaard behuizing zocht, maar altijd zat te klooien met hoe daar dan fatsoenlijke gaten in te krijgen en uberhaubt alles passend, heb ik sinds 1,5 jaar een 3d printer hiervoor aangeschaft.
Het voordeel daarmee is dat je met wat creativiteit in wat wel en niet printbaar is, je iets helemaal naar je wens kan ontwerpen. Mocht na het bestukken van de pcb blijken dat je eerste idee toch niet helemaal pas ( en dat was zo :) dan kun je het eenvoudig aanpassen en opnieuw printen.

het mooie in Eagle/Fusion tegenwoordig is dat je dus ook echt even je pcb vooraf al even kan passen in je eigen ontworpen behuizing

http://www.stijnmaes.nl/CO/mux/thumb/3d.jpg

na wat probeersels, was de behuizing dus al gereed.

http://www.stijnmaes.nl/CO/mux/thumb/3dprint.jpg

Ok vervolgens de pcb besteld. Ik heb gekozen om met een bestukkings variant 2 pcb's op elkaar te plaatsen om zo 2x een 1:8 mux te krijgen.
De pcb's zijn in 4 lagen toch wat prijziger en je moet er minimaal 5 bestellen, dus wilde hier toch gebruik van maken om het zo te combineren. Functioneel was bijna alles hetzelfde dus prima idee :)

Toen was het dus even een dikke week wachten voor we verder konden.

Eenmaal de pcb's binnen (dit keer eens een keertje paars, die had ik nog niet ;) )stencil framepje gemaakt van wat rest pcb's en pasta erop.

http://www.stijnmaes.nl/CO/mux/thumb/pasta.jpg

Alle componenten waren inmiddels ook binnen via mouser en farnell.
Ik bestuk handmatig, maar wel met ene vacuum pick en place tafel.
Om dit zo efficient mogelijk te doen, heb ik een pc tooltje geschreven in WPF waarbij ik mijn gexporteerde BOM en XY data kan laden samen met een gerenderde afbeelding van de pcb. Deze tool markeerd met rode bolletjes precies waar welk component moet komen.

http://www.stijnmaes.nl/CO/mux/thumb/pnptool.jpg

Hier de vacuum pick and place tafel
http://www.stijnmaes.nl/CO/mux/thumb/pnptable.jpg

nadat alles geplaatst is kunnen de pcb's in de vapor phase om ze even af te bakken

http://www.stijnmaes.nl/CO/mux/thumb/placed.jpg

http://www.stijnmaes.nl/CO/mux/thumb/vapor.jpg

hierna het THT spul erop gezet:

http://www.stijnmaes.nl/CO/mux/thumb/assembly.jpg

nu het moment van de waarheid, stekker erin en kijken wat er gebeurd.
POEF! rook...
shit...
De ESD TVS diode fikte er meteen uit. hmm had ik die dan verkeerd geplaatst? nouja, dat ding eraf gestookt en verder. Nu bleek er ook geen 3,3V uit te komen waar ik verwachtte maar 4,2V...
paniek, had ik nu toch weer wat stomme fouten gemaakt in mijn ontwerp?
Na wat onderzoek, meende ik dat mouser een verkeerd IC had geleverd voor de 3,3 regulator, maar na nieuwe hiervan besteld te hebben, bleek het probleem nog steeds hetzelfde...nog eens goed kijken en toen bleek dat ik een foutje in de pinning van de footprint had gemaakt... grrrr.
Wat betreft de TVS diodes, lijkt farneel hier toch echt een ander type te hebben geleverd, deze heeft op pin 2 en 4 de vcc en gnd precies andersom... handig.. even omgedraaid dus.
met die spannings regelaar kon ik niet zoveel gezien de SC70 package toch wel erg klein is om draadjes aan te solderen.
Ik heb gelukkig een 3 pins hedertje voorzien voor 5V - GND - 3,3V. Ergens in al die rommel bakken had ik nog een low drop 3,3 regulator printje liggen dat hier gelukkig oppaste.

Het grootste deel van de software, had ik al werkend op de evaluatie bordjes opstelling, maar hier en daar wat aangepast naar de 8 poorten en leds etc.

Helaas kreeg ik die software nu weer niet geflashed. Hij kreeg geen connectie met de micro.. Wat nu weer? geen idee waarom, maar ik bleek de isp connector aan de verkeerde pinnen van de atmega geroute te hebben... WHY??? gelukkig, was dit gunstig gelayout en kon ik het relatief eenvoudig en netjes op de juiste pinnen hangen. De TQFP32 behuizing leende zich hier goed voor.

http://www.stijnmaes.nl/CO/mux/thumb/dow.jpg

Nou hierna werkte alles eigenlijk goed gelukkig en kon alles samengevoegd worden, de 2 pcb's met de juiste studs op elkaar

http://www.stijnmaes.nl/CO/mux/thumb/sandwich.jpg

en in de behuizing ermee!

http://www.stijnmaes.nl/CO/mux/thumb/final.jpg

http://www.stijnmaes.nl/CO/mux/thumb/final2.jpg

ok.
Lessons learned:

* check die footprints!!!!
* 3d modeling van behuizingen is ook leuk
* I love Eagle vs Fusion360
* bij een 4 laags print met een complete layer ground, is het termische oppervlak zo groot dat je geen ground pin fatsoenlijk meer gesoldeerd krijgt

Jullie ook bedankt voor jullie input!

[Bericht gewijzigd door Stijnos op 13 januari 2022 00:45:00 (80%)]

fatbeard

Honourable Member

Mooi geworden!

* check die footprints!!!!

altijd, ALTIJD, maar dan ook echt ALTIJD controleren!!! (bin d'Aire-Dunndad) ;)

* bij een 4 laags print met een complete layer ground, is het termische oppervlak zo groot dat je geen ground pin fatsoenlijk meer gesoldeerd krijgt

Daar heb je thermals voor...
Maar als je die niet goed hebt ingesteld (of je bout is te licht) blijft het knudde.

Een goed begin is geen excuus voor half werk; goed gereedschap trouwens ook niet. Niets is ooit onmogelijk voor hen die het niet hoeven te doen.
Stijnos

Golden Member

ja die maakt eagle volgens mij wel zelf by default, maar zeker als ze dan in 2 volle lagen koper zitten dan moeten ze wel wat grotere afstand tot het koper hebben.

PE9SMS

Golden Member

Netjes, goed bezig hoor. Ga je nog een redesign doen ivm die regulator en ISP connector of laat je het zo? Ja, thermal spokes kan je wel gebruiken met meerdere planes op een pin :)

This signature is intentionally left blank.
Stijnos

Golden Member

ik heb de fouten wel gelijk gecorrigeerd in het ontwerp, maar dit was een custom made project en voor 1 stuks te kostbaar om het over te doen. Daarbij kon ik de spannings regelaar netjes met dat groene printje oplossen. De TVS diodes hoefde ik enkel om te draaien. Alleen die isp lijntjes, maar dat is ook wel netjes gereworked.

bprosman

Golden Member

Wat voor 3D printer heb/gebruik je Stijn ?

De jongere generatie loopt veel te vaak zijn PIC achterna.