Projektidee "USB RetroArduInput"

Auswahl, Einrichtung und Betrieb von Rechnern und Komponenten
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Hallo zusammen,

sollte mir jetzt irgendwer die Idee klauen und schneller sein, nur zu ;-)

Mir kam ein sehr verwegener Gedanke: Alte Eingabegeräte werden nicht besser und nicht häufiger. USB-Geräte werden uns aber noch lange begleiten... Aber die alte Hardware wollen wir trotzdem benutzen und ggf. wenn sie ohne Eingabegerät kommt, auch mal testen können.

Na ja eigentlich fing die Idee schon etwas kleiner an: Mein großes Arbeitspferd hat eine Corsair K68 Tastatur (weil ich einfach die Cherry MX Red so liebe). Über einen USB Host Umschalter soll die aber auch bei Bedarf an meinem Legacy-Arbeitspferd (für Hardware, die an dem großen nicht mehr läuft) laufen. Das Legacy-Arbeitspferd hat zwar USB Tastatur-Support (wäre auch schlecht wenn nicht, bei einem Q6600), aber die Corsair Tastatur läuft, im Gegensatz zu anderen Billig-Tastaturen, nicht außerhalb von Windows. Heißt keine Möglichkeit, ins BIOS zu kommen oder im Dual Boot zwischen Win7 und XP zu wählen. PS/2 Tastatur zusätzlich geht, ist aber nervig, aktive USB zu PS/2 Converter gibt es (z.B. von Blackbox), aber die kosten ein Heiden Geld. Und Geld und Zeit investiere ich lieber initial einmal mehr, um dann in Masse für meinen Retro-Park günstiger wegzukommen (verwegene Idee: Alle Rechner via KVM am großen LCD, der Corsair Tastatur und der Logitech Maus).

Weil letztlich... ehe ich jetzt für fast 100 Euro pro Stück mal min. 3 Blackbox USB zu PS/2 Converter kaufe und dann für die XTs immer noch nix hab, oder für 30-40 Euro pro Unit Arduino-Krams und Teile, die es mir sogar ermöglichen, bis zu XTs und sogar auf Nicht-DOSen rüberzugehen, dann investiere ich die Arbeit lieber, und wenn mal irgendwann irgendwas sinnvolles rauskommt, teile ich es mit der Community. Außerdem habe ich, 15 Jahre nach meiner Diplomarbeit (auf einem Altera Cyclone II Entwicklerboard mit FPGA (VHDL) und Embedded C Entwicklung) endlich mal wieder Bock auf Programmieren.


Enter: USB-RetroArduInput. Die Idee war geboren.

Das USB Host Shield bedarf ja eines Uno oder Mega. Ich bin gleich in die Vollen gegangen und hab den Mega 2560 genommen. Dann lange Zeit Stagnation: Viele Dienstreisen (eigentlich tolles Projekt für Dienstreise, einen Arduino und meine Funktastatur könnte ich ja im Koffer verstauen, und die Entwicklungsumgebung ist auf meinem Laptop) und keine Zeit, ein Problem zu beheben: Es müssen noch drei Lötbrücken auf dem USB Host Shield gebrückt werden. Für alle interessierte: Hier steht die Lösung https://esp8266-notes.blogspot.com/2017 ... oards.html

Jetzt endlich: Die Lötbrücken sind gesetzt und der Arduino gibt mir mit dem Host Shield Beispielprogramm für Maus und Tastatur Mausbewegungen und Tasten-Scancodes über die USB-Serial Debugging-Schnittstelle aus.

Als nächsten Schritt kann ich also nun anfangen, Protokolle zu implementieren, frei verdrahtet auf den Pins zu testen und letztlich in ein weiteres PCB Shield zu gießen. Die Krönung wäre dann, wenn alles abgeschlossen ist, ein 3D-Druck-Gehäuse zu entwerfen. Aber bis dahin ist, wie ich meine Auslastung mit anderen Dingen sehe, 2022.

Aber was habe ich vor? Weil der Mega mir so viele Pins zur Verfügung stellt, inkl. Analog (PWM), habe ich gleich groß gedacht. Das Ding wird ein Interface-Monster!

Ports auf dem Arduino:
- Barrel Jack für Power
- USB Typ B für Power, Debug (ich gebe weiter Debug-Meldungen raus) und Software-Updates

Ports auf dem Host Shield:
- USB Typ A für eins oder mehrere Geräte (die Libraries unterstützen USB Hubs)

Ports auf dem Output Shield:
- PC-Kompatible Tastatur: 8-Pin DIN 270° - warum 8-Pin? Weil alles rein passt. 8-Pin DIN 270° ist Tandy 1000, außer beim SL, der hat 7,nur der mittlere Pin fehlt. Auch der 5-Pin 180° XT/AT passt und der lässt sich über einen mechanischen Adapter auf PS/2 anpassen. Somit lassen sich XT, AT/PS/2 und die verschiedenen Tandy 1000 auf einem Connector implementieren. Mittlerweile denke ich auch über Amiga 2000 (gleiches Pinout wie PC) nach.
- PS/2 Maus: 6-Pin Mini-DIN - selbsterklärend. Mal gucken, ob ich sogar Mausrad implementiert kriege, das Beispielprogramm gibt dafür keine Meldungen aus.
- Seriell: SubD 9 und ein Max232 zur Pegelkonvertierung - soll umschaltbar zwischen Mouse Systems und Microsoft werden
- Pulse Mouse: SubD 9 - Amiga und Atari Maus, die geben ja die Pulse von der Gabellichtschranke raus. Der Unterschied zwischen Atari und Amiga liegt wohl in zwei vertauschten Pins, die werde ich denke ich der Einfachheit halber über einen mechanischen Schalter drehen
- Digital Joystick: SubD 9 - Kompatibel zu Amiga, Atari, C64... Ich werde denke ich auch eine 1350 C64 "Joystick-Maus" Funktion einbauen, wo die Ausgabe von der Maus und nicht mehr vom Joystick bestimmt wird. Von der 1351 C64-Maus mit Proportional-Modus nehme ich Abstand, die scheint etwas aufwendiger zu programmieren zu sein.
- Analog Joystick: SubD 15 - die Analog-Signale generiere ich per PWM und glätte diese über Kondensatoren. Inkl. zuschaltbarer Begrenzung auf 3.3V (einige PCI Soundkarten hatten 3.3V Vref auf dem Joystick Port)
- evtl. (muss mich noch einlesen) Apple ADB - es gibt schon entsprechende Libraries für ADB Ausgabe, daher kann ich es auf Best Guess implementieren, aber nicht testen, da ich keine Mac Classic oder Vergleichbare habe. Vielleicht bereite ich es auch nur pintechnisch vor oder lasse es ganz weg.

Ziemlich verwegen, aber wenn ich erste vorzeigbare Resultate habe, geht das Ding in die Community und entwickelt dann hoffentlich eine gewisse Eigendynamik. Ich will zumindest mal das Easy Going Zeugs (PC-Tastaturen, Mäuse, Joysticks) am laufen haben und ein fertiges PCB für den "Dreiköpfigen Affen" (so habe ich das Shield getauft, hat zwar mehr als drei Anschlüsse, erlaubt aber drei Device-Typen). Zumindest habe ich schon mal ein Prototyp-Board, ein paar Transistoren und einen Max232 bestellt, um hoffentlich um Ostern erste Ausgaben testen zu können.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Benutzeravatar
b20a9
BIOS-Flasher
Beiträge: 382
Registriert: Mi 16. Apr 2014, 23:54
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von b20a9 »

Tolle Idee! Selbst, wenn das Teil am Ende nur halb soviel kann, dann wäre es schon eine Bereicherung für die Community.
Acer AcerMate 386SX 33, Cyrix FasMath FPU, 6MB RAM, 3Com Etherlink Mit XT-IDE, Miro PCM1 Pro, 1GB Transcent Industrial CF
S+M
DOS-Übermensch
Beiträge: 1059
Registriert: Mo 10. Jun 2013, 17:04
Wohnort: BW

Re: Projektidee "USB RetroArduInput"

Beitrag von S+M »

Das hatte ich in ferner Zukunft auch mal auf dem Schirm, aber bisher verrichtet die PS2/RS-232 Lösung von Matze noch sehr gute Dienste und PS2-Geräte sind noch vorhanden.
Prinzipiell hätte ich bei dem Thema auf STM32 gesetzt, da leistungsstark, klein, günstig und direkter USB-Host-Support.
Ich würde mich an deiner Steller erstmal auf USB -> PS2 konzentrieren. Wenn du das zuverlässig in verschiedenen Konstellationen zum Laufen bekommst, hast du schon gaz schön viel erreicht ;-)
Für die Konvertierung Richtung RS-232 kann man vermutlich auf den Code des PS2 -> RS232 Adapters aufbauen.

Insteressantes Projekt, halte uns auf dem Laufenden :like:
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Tatsächlich bewegt sich etwas, nämlich ein Mauszeiger. Während ich aus Mouse Systems noch nicht ganz schlau werde, funktioniert der Microsoft-Modus schon einigermaßen. Evtl. schwenke ich auch für 3 Tasten auf den Logitech-Modus, der ist besser dokumentiert und primär an den Microsoft-Modus angenähert.

Allerdings ist auch der Microsoft-Modus noch nicht perfekt. Die Maus geht zwar in die richtige Richtung und bedient die richtigen Tasten, aber die Cursorbewegung zieht nach und ab und zu sieht sich scheinbar der Maustreiber genötigt, einen Reset (also das, was er auch bei der Mausabfrage macht, RTS Low) zu schicken. Vermutlich muss ich die Routine gegen das Volllaufen des UART noch etwas optimieren. Aber: Ich konnte mit einer Logitech Wireless USB Maus auf einem Commodore PC20 in Deluxe Paint II zeichnen.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Noch mal ein kleines Projekt-Update: Den etwas nervösen Mauszeiger habe ich einfangen können, indem ich den überlaufenden UART eingefangen habe. Die Wartezeit hatte ich zwar implementiert, aber < und > verwechselt, weshalb die Implementierung nutzlos war ;-)

Jetzt habe ich in einem separaten Sketch (fusioniert wird später) mal mit Joystick gespielt. Sehr spannende Ergebnisse, bisher nur mit einem Speedlink Competition Pro USB und einem Trio Linker Plus (Gamepad auf USB Adapter für Playstation 1/2, Dreamcast und Gamecube Gamepads, wobei ich PS2 und DC besitze und getestet habe). Die verhalten sich allerdings komplett gegensätzlich (Stick Achse und Feuerknöpfe). Werde mir wohl mal ein paar gebrauchte USB-Joysticks besorgen.

Auch habe ich mal ein paar Eingabegeräte getestet. USB Hub muss noch separat implementiert werden, einzelne Geräte nehmen langsam Fahrt auf. Leider haben einige Gaming-Eingabegeräte wohl Probleme, die Corsair K68 Tastatur läuft nicht (auch nicht im BIOS-Mode) und die Logitech G502 Maus auch nicht. Diverse andere Tastaturen und Mäuse, die eher "so Standard" sind, gehen aber einwandfrei, bis hin zur Logitech MX500 Laser Maus.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Und noch ein Update:

USB Hub läuft (ohne Zutun aber mit viel Testen) einigermaßen out of the box mit dem USB HID Sketch von Felis um den ich den Rest drumherum baue. Allerdings muss ich noch den perfekten Hub finden, weil es hier so einige Unregelmäßigkeiten gibt. Evtl. muss ein Hub mit eigenem Netzteil her, weil die Geräte doch was viel ziehen für den Arduino. Im Moment habe ich zwei Hubs, die funktionieren, wenn ich den Arduino mit eingestecktem Funk-Dongle meines Logitech Wireless Sets einschalte und dann nach und nach weitere USB-Geräte einstecke.

Für den Joystick-Ausgang werde ich wohl ändern und mir zwei digitale Potis besorgen. Den Trick habe ich aus forum.classic-computing.de wo schon jemand einen USB auf Joystick Adapter mit dem Arduino Uno gebaut hat. Meine ursprüngliche Idee war, PWM mit einem RC-Tiefpass zu glätten, aber das hat entweder zu viel Ripple oder ist zu träge. Außerdem spare ich mir so die Umrechnung des Ausgangs zwischen 5V (für ISA Soundkarten) und 3.3V (für einige PCI Soundkarten). Und dann will ich mir noch ein paar USB-Joysticks zum Testen besorgen.

Aus Tastatur-Seite habe ich nun eine fast perfekt laufende XT-Tastatur inkl. zweitem Cursorblock (unabhängig vom Num-Lock des Ziffernblocks). Zwei, drei Scancodes sind noch nicht so, wie bei der Cherry G80-1000 im XT-Modus, da muss ich noch mal gegenprüfen. AT/PS/2 ist etwas aufwendiger, da hier eine größere Host zu Tastatur Kommunikation inkl. Selbsttest stattfindet. Aber nichts, das nicht lösbar ist.

Die serielle Maus verrichtet ihren Dienst auch. Allerdings werde ich wohl die RTS Low abfrage nicht mehr über einen Interrupt machen, sondern über eine Abfrage in der Loop. Der Maustreiber schickt regelmäßig RTS Low, die Interrupt-Routine antwortet mit M, und wenn das passiert, während gerade ein Paket übertragen wird, springt der Mauszeiger, wenn der Interrupt reingrätscht. Ist zumindest meine Vermutung, warum der ansonsten perfekt funktionierende Mauszeiger ab und zu mal springt (im zeitlichen Zusammenhang mit einem RTS Low Event) und oft genug aber auch nicht.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
S+M
DOS-Übermensch
Beiträge: 1059
Registriert: Mo 10. Jun 2013, 17:04
Wohnort: BW

Re: Projektidee "USB RetroArduInput"

Beitrag von S+M »

AVRs debuggen ist leider umständlich. Kannst du nicht in die ISR einen Haltepunkt setzen um zu schauen, ob er im entsprechenden Moment dort reingehüpft ist?
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Ich finde, es nimmt Gestalt an
Dateianhänge
KiCAD_RetroArduInput-01-Top.jpg
KiCAD_RetroArduInput-01-Top.jpg (67 KiB) 8580 mal betrachtet
KiCAD_RetroArduInput-02-Bottom.jpg
KiCAD_RetroArduInput-02-Bottom.jpg (55.12 KiB) 8580 mal betrachtet
KiCAD_RetroArduInput-03-Top-Bestückt.jpg
KiCAD_RetroArduInput-03-Top-Bestückt.jpg (67.54 KiB) 8580 mal betrachtet
KiCAD_RetroArduInput-04-BottomBestückt.jpg
KiCAD_RetroArduInput-04-BottomBestückt.jpg (53.69 KiB) 8580 mal betrachtet
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
S+M
DOS-Übermensch
Beiträge: 1059
Registriert: Mo 10. Jun 2013, 17:04
Wohnort: BW

Re: Projektidee "USB RetroArduInput"

Beitrag von S+M »

KiCAD, gute Wahl! Verwende ich nun auch schon seit Jahren und bin hochzufrieden damit :like:

Am Ende kannst den kompletten Arduino auch auf der Platine nachbauen, sodass du keinen separaten mehr brauchst. Die Bauteilanzahl dürfte sich da sehr in Grenzen halten und auch ohne Arduino Bootloader lassen sich die AVRs per UART bespielen und zwar auch mit dem Arduino Programm :idea:
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Jepp läuft gut, die Leiterbahnen habe ich dann anhand der Netzliste von Freerouting ziehen lassen. Verstößt zwar glaube ich gegen jede Regel guten PCB-Designs (sowas wie Masseflächen, ... aber ich denke mal das Thema Abschirmung und Laufzeiten ist bei so kleinen Frequenzen eher egal). Ich hab noch mal etwas an den Beschriftungen und dem Board Outline (Edge Cut - jetzt kein PCB mehr unter den Sub-D Steckern) gearbeitet und einfach mal bei PCBWay die erste Charge Prototypen bestellt. Bislang entspricht alles (außer den DS1803, die hab ich noch nicht getestet) meinen Tests mit dem Prototypenboard. Kleinere Fehler werden dann noch mit Messer und Lackdraht und dann im Layout korrigiert, aber ich glaube das müsste so passen.

Den Arduino zu integrieren halte ich für sehr verwegen. Ich brauch halt schon den 2560 wegen der schieren Anzahl IOs. Plus dass da auch noch das USB Host Shield mit drauf müsste. Ich will das Projekt anfängerfreundlich halten, also Through-Hole Löten. Auch ich selbst kann nicht sonderlich gut SMD-löten, und mit so kleinen Pins wie bei den Teilen vom Mega 2560 und USB Host Shield schon zweimal nicht. Neben SMD-löten würde halt alles auf einer Platine von der Grundfläche viel größer. Dafür flacher. Flach finde ich aber nicht das große Problem, vor allem auch mit meinem "Trick" die I/Os auf der Unterseite des Boards zu installieren. Aber größere Grundfläche... das Ganze soll ja auch in ein Gehäuse passen, dessen Grundlfläche sich noch in einem Consumer 3D-Drucker drucken lässt. Ich denke, der Stack ist schon gut, hält die Grundfläche (die eh schon groß ist) überschaubar, es ist anfängerfreundlich zu löten und es funktioniert.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

Das Projekt macht weiterhin Fortschritte. Leider hat die Platine ein paar kleine Macken. Die fehlerhafte Beschriftung DS1803-010 kann man ja noch ignorieren und einfach einen DS1803-100 (Joysticks haben 100kOhm Potis, keine 10kOhm), aber dass ich bei den Commodore Joystick/Maus Ports Masse vergessen und bei der Verbindung zwischen Max232 und seriellem Port TX und RX vertauscht habe (obwohl auf der Lochrasterplatine richtig, einfach gepennt), ist schon ärgerlicher. Kicad ist schon angepasst und die Platine habe ich temporär durch Auftrennen der TX und RX Leiterbahnen und Fädeldraht für selbige sowie die Masseleitungen gefixt. Jetzt werden Fehler gesammelt und dann neue Boards bestellt.

Das Keyboard-Interface spricht neben XT jetzt auch AT, auch wenn die Host-to-Device-Kommunikation, die mit AT eingeführt wurde, noch etwas schwächelt (Keyboard Error - Press F1 to continue - aber beim F1 drücken geht es auch brav weiter) und ein paar Scancodes einiger Sonderzeichen mir noch Rätsel aufgeben - und noch viel Arbeit auf mich wartet, weil AT/PS2 mal satte drei Scancode-Sets hat, die ich natürlich alle implementieren will, für den Fall der Fälle.

Gibt es eigentlich hier Amiga-Freaks, die mir bestätigen können, dass die interne Tastatur des Amiga 500 das gleiche Protokoll verwendet, wie die externen der Bigbox-Amigas (2000 und Co)? Weil der steht ja auch noch aus, und da ich keinen Bigbox-Amiga habe (kann man ja nicht bezahlen), könnte ich sonst nur blind implementieren und bei Fehlern hoffen, dass jemand anders sie fixt (und wenn es Adrian Black ist, von dem ich ja schon den Tandy Keyboard Code geklaut habe).

Die Amiga-Maus gibt auch schon Lebenszeichen von sich, allerdings habe ich hier noch Optimierungsbedarf für die Timings.

Joystick inkl. des DS1803-Wahnsinns (teste erst mal mit den 1803-010 mit "eingeschränktem Bewegungsradius) steht noch aus.

Aber insgesamt:
- Serielle Maus läuft mittlerweile gut und ohne Sprünge (Interrupt während Writes abgeschaltet)
- Tastatur für XT und AT läuft ganz okay mit letzten Feinabstimmungen, die noch ausstehen, Tandy muss noch "fertig geklaut" und Amiga programmiert werden
- Amiga Maus gibt Lebenszeichen von sich und muss nur noch eingetaktet werden
- Digitaler und analoger Joystick noch offen, auch wegen der Problematik der wirren USB-Joystick-Protokolle
- PS/2 Maus noch offen
- ADB muss noch geklaut werden (Quellcode aus einem anderen Open Source Projekt liegt vor), in der Hoffnung, dass das danach auch funktioniert

Da PCBWay zwar recht günstig ist, es in Summe aber recht teuer wird (min. 5 Boards, Versand, Verzollung durch den Versanddienstleister - teuer, aber nichts, was es rechtfertigt, einen halben Tag frei zu nehmen, um 30km zum nächsten Postzollamt zu fahren), melde ich mich in ein paar Monaten, wenn alle Bugs aussortiert sind, für alle Interessierte mal mit einem Aufruf zur Sammelbestellung.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Benutzeravatar
schubl
CONFIG.SYS-Autor
Beiträge: 271
Registriert: So 17. Mär 2019, 19:14

Re: Projektidee "USB RetroArduInput"

Beitrag von schubl »

Dark_Lord hat geschrieben: So 9. Mai 2021, 00:00 Gibt es eigentlich hier Amiga-Freaks, die mir bestätigen können, dass die interne Tastatur des Amiga 500 das gleiche Protokoll verwendet, wie die externen der Bigbox-Amigas (2000 und Co)?
Ja, sind alle gleich, nur anderer Stecker...
Dark_Lord hat geschrieben: So 9. Mai 2021, 00:00Da PCBWay zwar recht günstig ist, es in Summe aber recht teuer wird (min. 5 Boards, Versand, Verzollung durch den Versanddienstleister - teuer, aber nichts, was es rechtfertigt, einen halben Tag frei zu nehmen, um 30km zum nächsten Postzollamt zu fahren), melde ich mich in ein paar Monaten, wenn alle Bugs aussortiert sind, für alle Interessierte mal mit einem Aufruf zur Sammelbestellung.
Ich bestelle meine Platinen immer bei https://jlcpcb.com/
Qualität ist gut, Lieferung ist brauchbar schnell und es gab noch nie Probleme beim Zoll, bzw hab ich noch nie mehr als 20€ für 10 Platinen bezahlt...

schubl
Soviel Retro und nur sowenig Zeit... laufender WIP...
8086, 286, 386, 486, P1, P2, P3, P4 und dann noch Amiga, Atari, C64/128,...
villeneuve
Solitärspieler
Beiträge: 10
Registriert: Do 10. Apr 2014, 14:28

Re: Projektidee "USB RetroArduInput"

Beitrag von villeneuve »

USB-Lenkräder in DOS-Rennsimulationen benutzen zu können wäre echt der Hammer. Sehr cooles Projekt!
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

So, nachdem das Projekt aus Zeitmangel lange Zeit lag, hier mal wieder ein kleines Update.

Das PCB hatte einige Macken. Ich hatte TX und RX beim seriellen Port vertauscht, die Masseleitungen von Amiga Joystick und Mausports vergessen und die zwischenzeitig aufgetriebenen 8-Pin DIN-Anschlüsse (wegen Tandy - wobei ein 5-Pin auch reichen würde, da ich den auf Tandy Pin 6 liegenden Keyboard Reset derzeit nicht verwende - aber schon vorbereitet habe) passten nicht in die entsprechenden Löcher. Die nächste Testbestellung kam von JLCPCB statt PCBWay, doch einiges günstiger, Qualität ebenfalls gut, auch wenn PCBWay sich noch etwas wertiger anfühlt. Die Löcher für den Tastaturstecker sind immer noch etwas klein, da ich mich ein wenig vermessen habe mit der Schieblehre, aber sie sind an der richtigen Stelle und der Tastaturstecker ließ sich anlöten, was deutlich angenehmer ist, als ein Gehäusemontage-Stecker mit Lötkelchen an Kabel baumelnd.

An der Software habe ich auch gearbeitet.
Die XT-Tastatur lief ja schon beim letzten Update. Bei der AT-Tastatur steht mir noch einiges an Tests und Optimierungen bevor. Aber es funktioniert weitestgehend, sieht man mal vom 286 ab, der nach Strg+Alt+Entf erst mal einen Keyboard Error schmeißt (weil nach dem Keyboard Reset noch die Break-Codes für den Affengriff übermittelt werden, das muss ich noch unterdrücken), der Tatsache, dass BIOS und Keyb.com nach der Device-ID fragen und bei Übermittlung selbiger Phantomzeichen generieren und die Typematic Rate zwar reagiert, aber nicht ganz das bewirkt, was ich erwarte...
Serielle und Amiga Maus funktionieren
Analoger und digitaler Joystick-Ausgang funktionieren, jetzt geht es an die Implementierung verschiedener Joysticks. Auffällig ist, dass auch USB-Joysticks teilweise nicht sauber zentriert sind (Speedlink Phantom Hawk, dafür muss eine interne Kalibrierung im Gerät her) und teilweise nicht mit 8 sondern mit 9 Bit auflösen (Logitech Extreme 3D, dafür braucht es einen speziellen Parser, der zwar existiert, aber noch eingebaut werden muss). Der Speedlink Competition Pro USB bringt meine Software in unregelmäßigen Abständen zum Absturz, der Joystick Demo Sketch vom USB Shield läuft durch, ich muss noch rausfinden, was da los ist.
Um weitere Tastaturen (Tandy, Amiga) und die PS/2 Maus und das ADB-Interface kümmere ich mich als letztes, allerdings glaube ich, ab jetzt geht es etwas besser voran.

Sogar eine Basisplatte für das Gehäuse gibt es schon, ist mir lieber, als das etwas unförmige Output Shield ohne Gehäuse zu verwenden und ein Kippen (im schlimmsten Falle gegen eine metallische Oberfläche mit Kurzschluss "Gratis").

Da sich jeder Joystick anders verhält, hätte ich eine Bitte: Wer besitzt USB-Joysticks und würde sie zu späterem Zeitpunkt mal verleihen bzw. besitzt USB-Joysticks und einen Arduino Uno oder Mega mit USB-Input-Shield und kann mal den Joystick-Demo-Sketch laufen lassen und mir die Ausgaben mitteilen? Library und Sketches finden sich hier, ich bräuchte das Verhalten der Achsen (zentrierter Wert, Maximalwerte) und Buttons (der Competition Pro und der Logitech codieren die Tasten 1-4 in einem Achsenwert!). Hier findet sich für die Interessierten die Library samt Beispielen: https://github.com/felis/USB_Host_Shield_2.0

Was ich implementieren möchte, sind gängige Joysticks und Gamepads, was wohl eher nicht gehen wird, sind Lenkräder oder Sets für Flugsimulatoren. Hier geht es primär um die Limitierung, dass spezialisierte USB-Steuergeräte (z.B. Lenkrad mit Pedalerie für Rennspiele oder Yoke/Sidestick mit Throttle und Pedalerie für Flugsimulatoren) aus Einzelgeräten jeweils der Kategorie Joystick bestehen und ich, sofern ein USB-Hub überhaupt funktioniert (durch Limitierungen der Library etwas "random") nur je ein Gerät einer Kategorie sinnvoll abfragen kann. Aus zwei "Joysticks", also z.B. einem Lenkrad und einer Pedalerie, einen zu machen, und das auch noch so, dass alte Spiele das verstehen, ist für den Projektrahmen einfach "drüber". Was hingegen geht ist, mit einem funktionierenden USB-Hub (fast so selten, wie ein rosa Regenbogeneinhorn, aber immerhin existent), Tastatur, Maus und Joystick zu betreiben und über die jeweiligen Ports rauszugeben.
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Benutzeravatar
Dark_Lord
CONFIG.SYS-Autor
Beiträge: 261
Registriert: So 25. Mai 2008, 19:44
Wohnort: Nähe Köln
Kontaktdaten:

Re: Projektidee "USB RetroArduInput"

Beitrag von Dark_Lord »

So, es gibt wieder ein kleines Update.

Die AT/PS/2 Tastatur funktioniert mittlerweile weitestgehend. Manchmal verschluckt sich das Gerät noch mal etwas bei schnellen Tastenabfolgen mit Bezug auf Tasten, die LEDs schalten, das kann aber daran liegen, dass ich im Moment mit aktivierten Debug-Messages arbeite und die Ausgabe selbiger über den USB-Serial Port auch Zeit verbrauchen. Es funktioniert fast immer. Das Schalten der LEDs über CheckIt funktioniert auch noch nicht, die Werte sind falsch und danach ist das Gerät im Data Report Disabled Modus. Die kleinen Verschlucker und das CheckIt Problem habe ich erst mal hinten angestellt und fange an, neue Dinge zu implementieren. Offen sind noch PS/2 Maus, mit der ich gerade begonnen habe, sowie ADB und die Tastaturprotokolle für Amiga (sollte straight-forward sein) und Tandy 1000 (Fleißarbeit, da eine Adaption von Adrian's Digital Basement PS/2 to Tandy).

Mittlerweile gibt es zwar auch ein anderes Projekt dieser Art, basierend auf dem Raspberry Pi (USB4VC, gab schon Videos bei LGR und Michael MJD und der USB-Support ist auf dem Pi sicher deutlich besser, als die buggy USB Library auf dem Arduino) aber das Projekt einzumotten, daran denke ich derzeit nicht, weil ich noch ein paar Protokolle mehr an Bord habe, als der USB4VC, und weil es ja auch ein wenig eine Übung für mich ist, wieder in die Hardware/Software-Schiene zurück zu kommen. Mehrere Optionen/Projekte schaden der Szene ja auch nicht.

Zwischenzeitig gibt es auch ein fertiges 3D-Druck Gehäuse (Bilder hänge ich an), denn auf kurz oder lang bräuchte dieses unförmige Ungetüm ohnehin eines, und in fertig und cool hebt es die Motivation, auch an der Software weiter zu arbeiten.

Die Platine muss ich wohl noch mal überarbeiten. Abgesehen davon, dass ich mich wohl bei den Pins des Tastatur-Anschlusses etwas vermessen habe und dieser nicht ganz durchgesteckt werden kann (ziemlich abenteuerlich verlötet), habe ich mich dazu entschlossen, die 5V Versorgung für die Tastatur als Indikator zum Abschalten der LEDs (da XT und Amiga keine 2-Wege-Kommunikation haben und die LEDs irgendwie abgeschaltet werden müssen, da sie sonst beim nächsten Einschalten des Computers falsch stehen) zu verwenden und für die PS/2 Maus brauche ich ebenfalls die 5V, da die Maus wohl sofort nach Einschalten des Computers einen Handshake startet, ohne den der Computer den PS/2 Port gar nicht aktiviert. Zum Ausprobieren reichen erst mal ein paar fliegende Drähte, final wird es natürlich richtig gemacht. ADB bekommt auch die +5V als Pin, man weiß ja nie, wozu man es braucht. Und so langsam gehen mir dann auch die GPIO-Pins aus, es wird immer voller.

Der Joystick-Stack schreit auch noch mal nach einer Überarbeitung, für die höhere Auflösung neuerer USB-Joysticks und weil der Competition Pro USB mir dauernd abstürzt.

Aber insgesamt macht es sich.

Wenn ich die neuen Platinen (erst mal für mich zur finalen Qualitätskontrolle) bestelle, mache ich auch mal eine Testbestellung für ein SLA-gedrucktes Gehäuse von JLCPCB, denn wenn ich das Ding mal irgendwann freigebe, wollte ich ja eine Sammelbestellung für PCBs (weil man ja bei JLCPCB und PCBWay immer mindestens 5 bestellen muss), exotischere Teile (DS1803-100 bekommt man nicht an jeder Ecke) und Gehäuse machen. Und an dem Gehäuse drucke ich mehrere Tage mit dem Ender 3 V2. Für mich mache ich das gerne, zumal natürlich auch so coole Hacks wie der mehrfarbige Druck (Filamentwechsel - dank Jyers-UI, einem Marlin-Fork, der die Original-Firmware ersetzt, geht das auch) möglich sind, aber für zig andere Leute wäre das für mich nicht machbar.
Dateianhänge
IMG_20220320_084758.jpg
IMG_20220320_084758.jpg (113.75 KiB) 5922 mal betrachtet
IMG_20220320_084811.jpg
IMG_20220320_084811.jpg (101.29 KiB) 5922 mal betrachtet
IMG_20220320_084821.jpg
IMG_20220320_084821.jpg (119.15 KiB) 5922 mal betrachtet
IMG_20220320_084830.jpg
IMG_20220320_084830.jpg (105.61 KiB) 5922 mal betrachtet
IMG_20220320_084841.jpg
IMG_20220320_084841.jpg (107.42 KiB) 5922 mal betrachtet
IMG_20220320_085106.jpg
IMG_20220320_085106.jpg (128.21 KiB) 5922 mal betrachtet
IMG_20220320_085117.jpg
IMG_20220320_085117.jpg (116.24 KiB) 5922 mal betrachtet
Arbeitspferde: Xeon E5-2683v3 und Q6600

Retro:
P2-450
Commodore PC20-II/Tandy Sound
286/ET3000/Aztech NX-II
Amiga 500/Gotek/Vortex AT-once Plus 286
Pentium 166/FAST Video Machine

Projekt-PCs: C64, Dual Pentium MMX 233, 486 VLB, 486 PCI, K6, Athlon 64
Projekte: USB RetroArduInput
Antworten