Hallo Besucher, der Thread wurde 922 mal aufgerufen und enthält 2 Antworten

letzter Beitrag von cbmhardware am

CBM 8296 Keymap und Umschaltung

  • Ich programmiere im Moment einen Arduino mit Intersil Crosspoint-Switch (8x12), um eine PS/2-Tastatur am CBm8296 verwenden zu können. Bisher konnte ich nur eine Matrix für den CBM 8032 finden:

    Damit klappt es soweit auch. Das Problem ist nun Shift. Wenn ich die Switch für Shift setze, würde ich erwarten, dass z..B. aus einem "a" ein großes "A" wird, wenn man die 128 Byte Keymap dafür kopiert. Ich habe mich an diesem Source für den C64 orientiert: https://github.com/Hartland/C64-Keyboard. Dort klappt es mit geringfügigen Änderungen so. Ich habe auch zwei 128 Byte Arrays dafür angelegt.


    Wenn ich nun die Shift-Switch setze und die kopierte Keymap verwende, passen nur noch sehr wenige Tasten. Eigentlich werden doch die gleichen Leitungen verwendet, warum ist das wohl so ? - Einen Defekt der Crosspoint-Switch würde ich erst mal ausschließen.

  • Immer noch ratlos und nun einen ST M3494 (16x8) aus einer anderen Quelle da (Ebay 271831539838). Ich kann den Fehler nun aber einkreisen. Irgendetwas läuft mit allen ICs bei Bit 6 (x6) schief. Laut Datenblatt muss man für x6 die Leitung ax3 verwenden.


    Dementsprechend wäre x6 dann ax3...ax0 = B1000 oder dezimal 8. Dann lande ich aber in Zeile 8 und verwende RVS. Wenn ich B0110 oder dez. 6 verwende, dann funktioniert Shift und nur für die unteren Zeilen, oben scheint sich das zu spiegeln.


    Ich habe nun Mitel MT8816 und ST 3494 da und alle verhalten sich gleich (falsch). Die Leitungen auf Steckboard und Arduino habe ich eben nochmals überprüft, da stimmt alles.

    Datenblatt: https://www.datasheetbank.com/…atasheet.pdf#page=1&_=1.0


    Bei mir funktioniert auch das Löschen einzelner Bits per Data=Low nicht. Daraufhin habe ich es dann mit einer anderen Lib versucht: https://github.com/DatanoiseTV…_ConnectAndDisconnect.ino

    Abwechselnd: x,y= 0,0 und 1,0 für 2,1 auf dem Bildschirm mit verschiedenen Delays. Das Ergebnis: 2111111111111111111..... also wenn ein Bit mal gesetzt ist, dann bleibt das auch so.


    B00000001, // Key "1"

    B00000000, // Key "2"


    Mein Workaround:

    Eigentlich müsste Reset reichen, damit alle Switches aufgehen, hatte aber nicht gereicht. Mann muss die Nullen reinbomben.


    Jemand eine Idee woran das alles liegen könnte ? - Mir fällt es sehr schwer zu glauben, dass die mir irgendwelche Fakes oder Bauteile mit jeweils identischem Fehler angedreht haben.

  • Kurze Korrektur: AX3 wird doch verwendet. Stand in der LIB "if(x >= 6) x+= 2; ". Hatte ich total vergessen ....:anonym Der Fehler mit der Spiegelung und der Rest stimmt aber. Beim Auslesen des Arrays kann ich mir (im Moment) nichts vorwerfen:


    Code
    1. m = pgm_read_byte(cbm8296+ofs);
    2. y = m >> 4 & B0111;
    3. x = m & B1111;

    MSB = y ,LSB =x.


    Code
    1. matrix.setState(6, 0, CONNECTED); set shift
    2. delay(100);
    3. matrix.setState(x, y, CONNECTED); set key
    4. delay(10);
    5. matrix.clearState(x, y); clear key
    6. delay(10);
    7. matrix.clearState(6, 0); clear shift

    Beim Setzen von Shift (x=6 +2 in der Lib:AX3) wird der nächste Wert addiert. Shift +8 =B, Shift+7 =N. Also aus Reihe 0 wird dann Reihe 8. Man kann also keine zwei Switches zugleich setzen, damit sind die Dinger wohl für die Tonne.