Hallo Besucher, der Thread wurde 110k mal aufgerufen und enthält 679 Antworten

letzter Beitrag von Emwee am

Keyman64: Tastatur- und Hardwarecontroller

  • oobdoo
    Seid Ich Henning "erwischt" habe dass er einen Teil einer Idee von 2012 von mir umsetzt bin ich am verzweifeln, da ich kaum Zeit finde den anderen Teil umzusetzen...


    Angedachte Funktionen waren (* umgesetzt)
    - Anschluss weiterer/anderer Tastaturen
    - Verlängern des Tastaturkabels bzw. Nutzung externe C128D Tastatur
    * Steuern von anderen Dingen
    * Makros
    * Tastenbelegung ändern
    (*) Passwortschutz (kann wohl durch Firmware Anpassung / KeyMan-Skript abgebildet werden)
    - Mappen von Joystick auf bis zu drei Feuerknöpfe
    - Joystick-Umschalter


    Für die Joystick-Behandlung müsste da auch ein entsprechendes Interface ran... und da kommt meine Aussage von vorhin zum tragen ("arbeitslos") ;)


    Henning
    Wäre Dein Joystickport-Prototyp nicht schon wieder ein Teil davon? Ob nun der PC/KeyMan64 die Joysticks steuert oder die dann noch zu entwerfende am KeyMan64 anzuschließende Joystick-Abfrage-Einheit sollte egal sein... aber ich mag kein Threadnapping betreiben. Let's PM :D


    Auf jeden Fall nehme ich auch drei Bausätze (sofern soviele verfügbar sind) eventuell sogar noch mehr (wüsste paar Leute die ich beschenken könnte :D )

  • Bildschirm abschalten per Tastenkombination. Man könnte Aktionen auslösen, ohne den C64 dazwischen.


    Genau, was immer sich mit digitalen Signalen schalten lässt. Wie gesagt ist der keyman vom C64 komplett unabhängig (bis auf die Stromversorgung). Da der keyman selbst und ausschließlich die physische Tastatur scannt und dem C64 mittels des Crosspoint-Switch ICs nur eine "virtuelle" Tastatur vorgaukelt, funktionieren die Tastenkombinationen immer, unabhängig vom Zustand des C64. Der keyman64 macht aus der Tastatur quasi ein universelles Steuergerät für Zusatzhardware.

  • Spontaner Einwurf zu

    Der keyman64 macht aus der Tastatur quasi ein universelles Steuergerät für Zusatzhardware.


    Am besten dann aber auch im alternativen Betriebsmodus "C64 ausgeschaltet" bzw "Betrieb nicht am C64": bitte in diesem Modus die Meta-Taste als "Dauer gedrückt" ansehen - so könnte man durch das Drücken einer Taste (und nicht einer Tasten-Combo/-Serie) Schaltungen auslösen. So als Beispiel: die Modellbahnanlage mit nem C64 Keyboard gesteuert (natürlich nur von einem unrettbaren C64 - hmmm... hab da noch einen, da ist schon ein fähiger Mensch dran gescheitert... und mein Sohn und mein Schwiegervater bauen bald eine Anlage *grins*)


    Träumen darf man ja mal...

  • Am besten dann aber auch im alternativen Betriebsmodus "C64 ausgeschaltet" bzw "Betrieb nicht am C64": bitte in diesem Modus die Meta-Taste als "Dauer gedrückt ansehen"


    Naja, du musst das Gerät nicht zwingend am C64 betreiben, dann brauchst du auch den Matrix-IC eigentlich nicht, nur halt Strom... und dann könnte man die Meta-Taste auch über einen Konfigurationsbefehl deaktivieren. Da der Matrix-IC nicht gebraucht würde, wäre auch noch ein zusätzlicher Port für die Steuerleitungen drin. Eine solche Option sollte sich problemlos realisieren lassen können.


    Zum Beispiel:


    Code
    1. standalone true
    2. meta off
    3. K: set port c bit 0
  • Stimmt, an die Ultimate habe ich noch gar nicht gedacht. Grossartige Sache. Wäre ich gern dabei


    Die Ultimate kannst du natürlich nur steuern, wenn du sie öffnest, kabel an die Button-Leitungen lötest, diese über Schutzwiderstände aus dem Ultimate-Gehäuse führst und dann irgendwie zum keyman64 bringst.


    Heißt "wäre ich gern dabei" dass du auch ein Exemplar haben möchtest? Wenn, dann bitte explizit formulieren ;)

  • Nicht vergessen: Diese Hardware hängt an den gleichen Leitungen, wie auch die Joysticks. Da böte sich an, auch Autofeuer mit in die Firmware aufzunehmen. Das geht zwar nicht allein mit dem Crosspoint-Switch, aber zwei Pins werden am Atmel noch frei sein, oder?


    Jens

  • Wie kommt denn ein ziemlicher Laie wie ich damit klar?


    Sollte gehen, das einzige SMD-Bauteil ist die Mini-USB-Buchse, sonst alles through-hole. Genauere Dokumentation gibts auf der Website bzw. direkt in den Design-Dateien. Löten solltest du allerdings schon können. Ich wollte auch nochmal schauen, ob ich das Design auf through-hole Mini-USB-Buchse umstellen kann.


    Zum Preis siehe Post #12, eine pessimistische Schätzung würde ich bei ca. 33€ Ansiedeln (ungefähr 13€ Teile, 10€ Crosspoint Switch (darin anteilig die Versandkosten bei Mouser für Privatpersonen, 20€), 10€ Platine). Je nach Anzahl der Besteller und Wahl des Platinenherstellers wird's dann günstiger.

  • Nicht vergessen: Diese Hardware hängt an den gleichen Leitungen, wie auch die Joysticks. Da böte sich an, auch Autofeuer mit in die Firmware aufzunehmen. Das geht zwar nicht allein mit dem Crosspoint-Switch, aber zwei Pins werden am Atmel noch frei sein, oder?


    Stimmt, könnte man machen. Ich bin kein großer Zocker, da entgeht mir sowas...


    Alle freien Pins (Port C und B des Atmegas) sind erstmal als vom Benutzer frei belegbare Steuerleitungen vorgesehen. Der Benutzer könnte die auch selbst mit den Feuerleitungen der Joysticks verbinden. Dann könnte ich noch eine Funktion schreiben, mit der man "Dauerfeuer" (also automatisches Wechseln zwischen zwei Zuständen mit wählbarer Frequenz) ein/ausschalten und konfigurieren könnte.


    Ich kann aber mal schauen, ob man zu diesem Zweck u.U. noch zwei Jumper hinzufügen kann, mit denen der Benutzer dann zwei der Steuerleitungen direkt mit den CIA-Leitungen verbinden kann. Dann müsste ich allerdings nochmal ans Layout ran. Aber wenn es gewünscht wird, sehe ich, was sich machen lässt.

  • Ich melde ebenfalls Intresse an einem Bausatz an !


    Danke, tolles Projekt !!!


    :ilikeit:

  • Ich kann aber mal schauen, ob man zu diesem Zweck u.U. noch zwei Jumper hinzufügen kann, mit denen der Benutzer dann zwei der Steuerleitungen direkt mit den CIA-Leitungen verbinden kann. Dann müsste ich allerdings nochmal ans Layout ran. Aber wenn es gewünscht wird, sehe ich, was sich machen lässt.


    Nein, das geht nicht, du brauchst hier Open-Collector-Treiber. Also einen einfachen Transistor an den Portleitungen des Atmel und der Transistor zieht dann die Leitung des CIA auf GND oder tut gar nichts.

  • Nein, das geht nicht, du brauchst hier Open-Collector-Treiber. Also einen einfachen Transistor an den Portleitungen des Atmel und der Transistor zieht dann die Leitung des CIA auf GND oder tut gar nichts.


    Ok, danke für den Hinweis. Dann werde ich das einfach garnicht über Jumper anbieten und sehe "Dauerfeuer" auch einfach als normale Anwendung. Wer Dauerfeuer möchte müsste sich also enstprechende Transistoren an die CIA-Leitungen hängen und vom keyman64 aus über die allgemeinen Steuerleitungen anbinden. Ich werde aber die zu solchen Zwecken benötigte allgemeine Puls-Funktion einbauen (dauerhafter Wechsel zwischen zwei Zuständen auf einem bestimmten pin mit wählbarer Frequenz, an- und ausschaltbar).

  • Das wird langsam interessant :)


    Mal ne Verständnissfrage:
    Ich hab'n StereoInSid. Darauf ist ne kleine Stiftleiste wo dann mittels Jumper die SIDs konfiguriert werden.
    Haut es hin nun einen Reset über meta-R auszulösen, wo kein POKE abgeschickt wird, sondern die Resetleitung auf high gezogen wird, dann ca. 2 Sek. zu warten um bei Bedarf eine weitere Tastenkombination zur Auswahl der Modi für die SIDs einzugeben und danach den C64 wieder starten zu lassen, sprich Resetleitung wieder auf low?


    Oder würde man, sofern man das überhaupt so verkabeln kann zwangsläufig eine weitere Taste drücken müssen?
    Kann die Platine für diesen Zeitraum auf Eingaben warten und ggf. ohne weiteren Tastendruck automatisch weiterarbeiten?


    Wenn sowas hinhaut nehme ich so'n Teil mindestens einmal unbedingt.

  • Lt.Dan: Verstehe noch nicht genau, was du meinst. Also, erstmal ist Meta-R nur ein Beispiel. Du kannst jede der 16 Steuerleitungen mal kurz von tristate auf low und wieder auf tristate schalten. Wenn da die Reset-Leitung dranhängt, ist das genau dasselbe, was ein typischer Reset-Taster macht, nur eben ohne physikalischen Taster.


    Beim Reset wird also kein POKE ausgeführt, sondern ein echter Hardware-Reset, sofern du das so verkabelst und programmierst, wie oben gezeigt.


    Den StereoInSid kenne ich jetzt nicht genau. Ich habe bei meinem DualSID auch Jumper. Da wird immer nur eine von vier verschiedenen Leitungen per Jumper auf die Chip-Select Leitung des zweiten SIDs gelegt, um den zweiten Sid an vier mögliche Addressen zu legen (ich nehme an, dass es das ist, was du meinst). Das kannst du nicht direkt mit dem keyman64 machen, da dieser nur einzelne Ausgangs-Leitungen kontrolliert (und nicht Leitung A auf B weiterleiten kann, so wie es ein physischer Jumper tut).


    Ich habe für diesen Zweck ein Kontrollmodul für meinen Dualsid gebaut. Dort nutze ich einen 74153 (dual 4-line to 1-line data selector/multiplexer). Der kann genau dieses Schaltverhalten realisieren, also je eine von vier Leitungen auf einen Ausgang schalten. Der hat dann zwei Kontrolleitungen, die je nach Zustand den Verbindungsweg (also die "Jumperposition") auswählen. Nehmen wir an, diese beiden Leitungen verbindest du auf dem Keyman64 auf dessen port a, bits 0 und 1. Dann kannst du so konfigurieren:


    Code
    1. 1: set port a bits 0-1 to 0
    2. 2: set port a bits 0-1 to 1
    3. 3: set port a bits 0-1 to 2
    4. 4: set port a bits 0-1 to 3


    Und dann kannst du mit Meta-1 die erste "Jumperposition" setzen, mit Meta-2 die zweite, usw. Das wäre also genauso, also würdest du den C64 aufmachen und den Jumper umsetzen. Da hier unmittelbar "umgejumpert" wird, hast du auch keinen Moment, in dem die CS-Leitung "in der Luft" hängt und sich der SID dann mal zufällig genötigt fühlt, Daten auf den Bus zu legen (was zu Abstürzen führen würde).


    Wenn du trotzdem gleichzeitig einen Reset willst, kannst du das bei verbundener Resetleitung auch entsprechend konfigurieren (siehe Beispiele oben).


    Du müsstest also das Jumpern der Platine digital kontrollierbar machen, um es über den keyman64 steuern zu können. Falls der StereoInSid das ähnlich wie der DualSID macht, sollte ein 74153 reichen, das wäre recht simpel.