Robotrontechnik-Forum

Registrieren || Einloggen || Hilfe/FAQ || Suche || Mitglieder || Home || Statistik || Kalender || Admins Willkommen Gast! RSS

Robotrontechnik-Forum » Technische Diskussionen » Tastaturersatz für KC85 » Themenansicht

Autor Thread - Seiten: -1-
000
13.07.2024, 17:31 Uhr
DL
Default Group and Edit


Ich weiß, es nervt... aber lustigerweise fragen in letzter Zeit wieder Leute nach dem kleinen PS/2 Adapter für den KC85, ich dachte mit dem M052 hätte sich das erledigt.
Weil gerade noch der Digispark herum lag hab ich mal fix auf der Arduino Plattform eine Kurzversion mit der PS2KeyAdvanced library zusammengestellt.
Die Schaltung ist fix zusammengesteckt und der Digispark kann über USB mit dem Micronucleus geflasht werden. Es funzt natürlich auch mit anderen Boards, wie dem NANO o.ä., das ist zwar etwas größer als das Original, aber zum testen reicht es.



Die *.ino:

Quellcode:

//----------------------------------------------------------------------------
//Emulation  KC85-Tastatur mit PS/2 Tastatur + Digispark und Paul Carpenter's
//PS2KeyAdvanced library
//----------------------------------------------------------------------------
#include <PS2KeyAdvanced.h>

#define DATAPIN 3 // PS/2 DATA
#define IRQPIN  2 // PS/2 CLK
#define KCDATA  4 // DATA -> KC

uint8_t mapping[][2] = // uebernommen aus KC85/5 Handbuch S148 ff.
{ // Returned keycode definitions 0x11-0x6c (PS2KeyAdvanced.h)-> KC-Code
/*0x11*/{8,9},{60,61},{86,120},{87,119},{6,7},{122,123},{120,121},
/*0x18*/{118,119},{56,57},{40,41},{76,77},{24,25},{0,0},{126,127},{70,71},
/*0x20*/{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},{0,0},
/*0x28*/{0,0},{0,0},{0,0},{126,127},{0,0},{0,0},{0,0},{0,0},
/*0x30*/{10,43},{116,117},{4,5},{0,21},{100,101},{36,37},{84,85},{107,53},
/*0x38*/{68,69},{58,59},{0,0},{104,75},{106,0},{27,91},{103,11},{0,0},
/*0x40*/{22,23},{2,3},{94,95},{110,111},{98,99},{16,17},{34,35},{82,83},
/*0x48*/{50,51},{64,65},{66,67},{72,73},{88,89},{78,79},{62,63},{54,55},
/*0x50*/{38,39},{112,113},{96,97},{18,19},{32,33},{48,49},{46,47},{128,1},
/*0x58*/{30,31},{80,81},{14,15},{0,0},{52,20},{0,0},{26,105},{0,0},
/*0x60*/{0,0},{124,125},{12,13},{28,29},{108,109},{44,45},{92,93},{0,124},
/*0x68*/{0,12},{0,28},{0,108},{0,44},{0,92}
};
uint8_t l,s;
  
// classes
PS2KeyAdvanced keyboard;

void setup( )
{
keyboard.begin( DATAPIN, IRQPIN );
keyboard.resetKey();
keyboard.setNoRepeat(1);
keyboard.setNoBreak(1);
pinMode(KCDATA, OUTPUT);
digitalWrite(KCDATA, HIGH);
}

void loop( )
{
uint8_t i; uint16_t j;  // Variablen Hauptprogramm
  if (keyboard.available()) // wenn Daten im Puffer sind
   {
    j = keyboard.read( );i=0;    // j enthält nun den Advanced-Keycode
    l = keyboard.getLock(); // l enthält nun den Status von CAPS,Num,Scroll
    if (((j&0xff)>=0x11)&&((j&0xff)<=0x6c)) //aussieben
     {
      i = mapping[(j&0xff)-17][1]; // codes aus dem mapping ohne und
      if(j&PS2_SHIFT)i = mapping[(j&0xff)-17][0]; // mit shift
     }
    if ((j&0xff)==PS2_KEY_EUROPE2){i=74;if (j&PS2_SHIFT)i=90;} // < >
    if ((l&PS2_LOCK_CAPS) != (s&PS2_LOCK_CAPS )) {s=l;i=115;} // CAPS -> KC
    if (j==PS2_ALT_GR + PS2_KEY_EUROPE2)i=102; // altgr+< |
    if (j==PS2_ALT_GR + PS2_KEY_Q)i=42; // altgr+q @
    if (i>0)put_kc(i); // ausgeben
   }
}

// -----Senderoutine zum KC-----
void put_kc(uint8_t y){send_kc(y);delay(12);send_kc(y);} // send twice
// Byte Ausgabe
void send_kc (uint8_t i) // send
    {  
    uint8_t z; // Bitzähler
    for(z=0;z<7;z++) {(i & (1 << z))? bith():bitl();} // Einzelbits auswerten
    burst();
    }

void bith (void){ burst();delay(7);} // Hi Impulsabstand
void bitl (void){ burst();delay(4);} //Low Impulsabstand

void burst (void) // Burst, ist beim Original so, einfaches Low tut es aber auch
  {
    uint8_t t=5; // ca 140 uS
    do
    {
    digitalWrite(KCDATA, LOW );delayMicroseconds(14);
    digitalWrite(KCDATA, HIGH);delayMicroseconds(14);
    t--;
    }
    while(t);
  }



Edit: mal das mapping etwas logischer angeordnet, da kann man die Tastencodes für den KC besser anpassen...
(0x20-0x2f ist das Keypad, meine Minitastatur hat keins, da konnte ich das ohne Aufwand nicht so recht zuordnen)

Dieser Beitrag wurde am 16.07.2024 um 11:39 Uhr von DL editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
13.07.2024, 18:37 Uhr
schlaub_01



Wobei Deine kleinen Miniplatinen für den Einbau direkt in den Stecker einfach nur genial sind. Einfache Lösung, kann man gut verstecken und funktioniert absolut problemlos.

Viele Grüße,
Sven.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
13.07.2024, 22:00 Uhr
Bert



Danke für's teilen!

So ein Adapter steht schon schon seit längerem auf meiner KC85-TODO-Liste.

Viele Grüße,
Bert
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
14.07.2024, 12:11 Uhr
Andre.as



Hallo Bert,

ich fand diese kleine LP auch sehr schön und habe sie als 2 Ebenen-LP mit 0,8mm gemacht, dann passt sie direkt zwischen die PINs.

Bring ich dir mit, wenn wir uns sehen...


Schönen Sonntag
Andreas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
14.07.2024, 14:00 Uhr
schlaub_01



Hallo Andreas,
bei meinen Steckern waren die 0,8mm zu wacklig. Mit 1mm passte alles perfekt. Ich nehme sehr gerne die ungarischen DIN Stecker, die lassen sich mit Abstand am besten löten, denn die haben so einen halboffenen Kelch. Die meisten DIN Stecker heutzutage haben ja nur noch eine Hülse und lassen sich irgendwie sehr bescheiden löten. Die ich mal von Reichelt hatten gingen gar nicht und wenn man zu lange dran war, dann hat es die Pins verbogen.

Viele Grüße,
Sven.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
17.07.2024, 09:22 Uhr
Andre.as



Hallo DL,

könntest du bitte die Versionen von der Arduino IDE und Digistump mit angeben?
PS2KeyAdvancer habe ich die V 1.0.9 in Verwendung.


Ich bekomme nur eine Fehler:

"error: 'digitalPinToInterrupt' was not declared in this scope"


Mit dem ATiny85 funktiniert aber alles.



Danke und schönen Tag
Andreas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
006
17.07.2024, 10:45 Uhr
DL
Default Group and Edit




für die 1.xxx ist da was beschrieben -> https://www.jentsch.io/digispark-attiny85-mit-arduino-ide/ Seite ist anscheinend nicht mehr erreichbar...
Alternative: https://wolles-elektronikkiste.de/digispark-die-bequeme-attiny85-alternative
(dort wird auch noch mal darauf hingewiesen, dass digistump.com offline ist und der ATTinyCore von Spence Konde verwendet werden sollte)

Dieser Beitrag wurde am 25.07.2024 um 11:49 Uhr von DL editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
007
17.07.2024, 11:16 Uhr
Andre.as



Danke

Andreas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
Seiten: -1-     [ Technische Diskussionen ]  



Robotrontechnik-Forum

powered by ThWboard 3 Beta 2.84-php5
© by Paul Baecher & Felix Gonschorek