Hello, Guest the thread was called4.5k times and contains 72 replays

last post from Shadowolf at the

Frage an die ATmega-Gurus

  • Ich möchte den internen Tastaturanschluss der CIA1 mit einer PC-Tastatur verbinden. Dazu ergibt sich folgendes Problem: PC-Tastatur seriell <-> Anschluss im C64 8x8 matrix. Welcher ATmega ist hierfür geeignet? ( Serielles? Protokoll PC-Tastatur = Eingang <-> Parallele 16 bit Ausgabe ? - Tastaturmatrix) Ich bin sicher, das es dafür eine Lösung gibt, aber welche ? Ausserdem müsste ja auch die Restore-Taste irgendwie eingebunden werden! Oder gibt es dafür hier schon eine fertige Lösung?


    Hintergrund: Ich habe eine vorhandene nackte C64-Platine( aus dem Sperrmüll ) in einen Messcomputer "verwandelt" - Software über EProm; CIA-Uhren in der Zwischenzeit Quarzstabil; Funktionen: Frequenzzähler R/C/L-Messung..., die hat aber keine Tastatur zur Bedienung und ein paar "Nottaster" an der Tastaturmatrix sind auf die Dauer nicht befriedigend.

  • Oh ich dachte wir hätten hier ein paar "Gurus"


    Die ganzen "Gurus" hier meditieren gerade wahrscheinlich, oder liegen bei dem schönen Wetter in der Sonne, wer weiß. ;)


    Tut's statt dem PS/2- auch ein USB-Keyboard ? Wenn ja - dann guck Dir die Seite
    http://symlink.dk/projects/c64key/


    mal an.


    Und das Archiv mit den Plänen und Bildern dazu findest Du hier:
    http://symlink.dk/projects/c64key/c64key.zip



    Und mal abgesehen von der angebenen Web-Seite da oben - rein theoretisch reicht 'n ATmega8 mit seinen 23 I/O - Leitungen völlig aus. Aber was erzähl ich hier großartig, Spaceman Spiff hat den ja erfolgreich dafür verwendet . :D

  • @ C64-Camper :winke:


    Du hast natürlich recht, die C64-Tastatur fungiert da tatsächlich als PC-Keyboard. Ich sollte mal vorher die Docs und die Texte durchlesen, bevor ich was poste. :rotwerd: & :baby:
    Habe mir nämlich nur auf die Schnelle die Schaltpläne angeguckt, und die sind ja erstmal nicht so eindeutig.


    Aber im Prinzip bräuchte man wahrscheinlich ja mehr oder weniger nur die Signal-Richtung in der Soft umzukehren, und dann dürfte das auch von USB PC-Keyboard zum C64-Keyb.-Anschluß funktionieren.

  • @ greg64


    Nachdem ich mich mit Deinem Problem 'ne Weile beschäftigt habe, habe ich jetzt 2 Lösungen gefunden, von denen mindestens eine wahrscheinlich nicht so doll ist.


    1.)
    Du verwendest einen ATmega8, verbindest davon 16 I/O-Leitungen mit dem Keyboard-Anschluß des C64s, eine mit RESTORE und zwei mit 'ner DIN-Anschluß versehenen PC-Tastatur (Keyb.CLK & Keyb.DATA). Das Programm müßte nun - abgesehen davon, daß es die Codes von der Tastatur holt - laufend kurzzeitg jeweils die Leitungen (die am C64-Keyb.Anschluß hängen) auf Eingabe schalten u. die JoyPorts auslesen - und mit den KeyCode-Matrixbits verknüpfend wieder auf Ausgabe schalten.
    Das /RESTORE-Signal is'n Strobe von ca. 100 us Länge oder so (die müßte eigentlich reichen).
    Also nix besonderes soweit.


    Allerdings ist es fraglich, wie gut diese "fliegende Wechsel-Methode" funktioniert. Bestenfalls wäre 'ne Tastenwiederholung garantiert.

    Und


    2.)
    Um diesen "fliegenden Wechsel" zu vermeiden, wäre es eigentlich am besten, wenn man mit Hilfe eines (CIA) Adapter-Sockels den Datenbus, die untersten 4 Adressbits (also A0-A3), R/W und /Chip-Select (an einen INT-Eingang) direkt mit dem ATmega verbinden würde. Dann könnte man (verzögert, gemäß Phi2) die Schreibzugriffe auf die Daten- u. bzw. Datenrichtungs-Register (parallel zum CIA) mitlesen, und die Leitungen zum C64 KeyB.-Anschluß permanent auf Ausgabe belassen. Dazu bräuchte man dann aber mind. einen ATmega16, weil man dann ja 32 (mit der RESTORE-Leitung leider 33) I/O-Leitungen dazu benötigt.
    Um doch noch in den Genuß der RESTORE-Taste zu kommen, könnte man aber noch ein IC mit einem ODER-Gatter (mit 4 Eingängen) dazunehmen. An den Eingängen könnte man dann A2, A3, R/W u. /CS anschließen und den Ausgang mit einem INT-Eingang vom ATmega verbinden. So hätte man dann im Endeffekt 2 I/O-Leitungen frei, sodaß man theoretisch sogar noch Phi2 mitdranhängen könnte.

    Tja, soweit - so schlecht. Aber bestimmt fällt jemandem hier noch was genialeres dazu ein. :)

  • Danke , ich wusste, das man sich auf Euch verlassen kann ! :winke:


    Der auf der Seite http://symlink.dk/projects/c64key/ beschriebene Verfahren ist tatsächlich die Möglichkeit, die C64-Tastatur a la Kyra am PC zu nutzen. Ich habe aber keine C64-Tastatur! Ich benötige den umgekehrten Weg - PC-Tastatur als C64-Tastaturersatz. Einige der Tasten habe ich ja als Nottastatur mit Tastern realisiert. (Return, Run/Stop, Restore).
    Meine Überlegungen gehen dahin:


    Tastaturmatrix in einen 2 Eprom brennen -einer für PB und einer für PA (Ich weiss, Verschwendung, 2 Gals wären kleiner, aber wer soll die programmieren?). Datenausgänge an den Keybordanschluss des C64. Die Adressleitungen an ein ATmega - an den eine PC-Tastatur, die von ATmega decodiert wird und je nach Tastendruck die richtige Adresse an den EProm anlegt und über CS den Eprom aktiviert. Auf diese Weise kann die Restore-Taste mit in die Matrix des Eproms integiert werden und braucht nur am Datenausgang wieder "herausgefischt" werden. Oder Restore wird direkt aus dem ATmega ausgegeben.

  • Ne,ne viel zu aufwendig. Bei Atmel auf der Seite gibt es glaube ich schon ne fertige Routine die Tastendrücke von einer PS/2 Tastatur empfangen kann, ansonsten findet sich noch was im Netz - dann braucht man nen Atmel z.b. ATmega32 (weil se gerade rum fliegen) und benutzt 8 Eingang (Matrix-Scan vom C64) und schaltet im richtigen Moment eine der 8 zusätzlichen Ausgänge ein. Für die Restore Taste brächte man dann noch nen zusätzlichen AUsgang - da hat der ATmega 32 ja genug von und schnell genug ist der auch.


    Jetzt müste das nur noch einer umsetzten der Zeit hat :-)

  • Die IDE64-Leute haben das schon mal gebaut, siehe PC-KEYB:

    Quote

    PC-KEYB card is a device which allows user to replace standard C64 keyboard with any PC PS/2 compatible keyboard.
    The device is based on ST M3493B2 (GM62093A) crosspoint switch and AT89C51 8-bit microcomputer.

    Das mit dem Switch ist natürlich etwas aufwendiger, aber dafür ziemlich sauber. Wenn man die Sache ohne Switch (nur per ATmega-Software-Polling) machen will, muss man sicherstellen, dass das Ding schnell genug reagiert (was bei diversen Tastaturscanroutinen in Spielen wohl auf irgendwas zwischen 6 und 20us Zykluszeit hinauslaufen sollte und dementsprechend eher unmöglich ist) und z.B. auch das Tastaturauslesen in "umgekehrter" Richtung (DC01 schreiben, DC00 lesen) unterstützt, sonst geht die eine oder andere Software nicht.


    ATmega-Code zum Lesen von PS/2-Signalen findet sich beim Keyboard Twister .

  • Für "nur" PS/2->C64 ist das Ding also deutlich zu umfangreich und man muss erstmal die
    Schalter-Steine bekommen können.

    Ist richtig, aber die Quellcodes sind dabei und die erste Version kommt noch ohne den "Schalter" aus. Ich hoffe, hier einfach die "Datenrichtung" umdrehen zu können, das will ich in den nächsten Tagen dann doch erst mal ausprobieren !

  • Also "einfach" die "Datenrichtung" "umdrehen" wird schlichtweg nicht funktionieren.


    Es geht nicht darum Daten zu verschieben, die Kontakte der Tastatur-Matrix werden miteinander verbunden.
    Ich bin mir nicht einmal sicher ob ich verstanden habe, wie das ausgewertet wird.


    Auf jeden Fall mit zwei Ports der CIA die beide Eingang oder Ausgang sein können.


    Und ob man eine PS/2 Tastatur oder einen PS/2 "Empfänger" hat ist auch ein Unterschied.

  • Ich habe jetzt noch eine weitere Möglichkeit gefunden. In meiner "Kramkiste" habe ich noch eine alte Laptoptastatur gefunden. Ganz normal diskret aufgebaut - mit aufgelöteten Tastern. Brauche also nur die Matrix des C64 auf das Ding übertragen - ein paar Leiterbahnen aufschnippsel und neu verdrahten - und ich komme ganz ohne aufwendige Elektonik / Programmierung zu meiner "neuen" Tastatur! Von der "Bedienerseite:
    Von der Leiterplattenseite: