Robotrontechnik-Forum

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

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

Autor Thread - Seiten: -1-
000
05.04.2024, 17:53 Uhr
DL
Default Group and Edit


Analog zum Ersatz für die MC80.3x-Tastatur hier ein Vorschlag für den Betrieb einer PS/2-Tastatur als Ersatz am PC1715 unter Verwendung eines Arduino Nano.
Gibt ja immer wieder Ärger damit oder fehlt ganz...

Hinweis zu den 5V am Port, die scheinen nirgendwo abgesichert zu sein, da können schon mal ein paar Ampere fließen also etwas Vorsicht walten lassen !





Quellcode:

//----------------------------------------------------------------------------------------------------------------
//Emulation Tastatur PC1715 mit PS/2 Tastatur + Arduino Nano und Paul Carpenter's PS2KeyMap+PS2KeyAdvanced library
//----------------------------------------------------------------------------------------------------------------
#include <PS2KeyAdvanced.h>
#include <PS2KeyMap.h>
//#include <Arduino.h> //nur bei VSC
#define DATAPIN 4 //PS/2 DATA
#define IRQPIN  3 //PS/2 CLK
#define PCdata  6 //PC1715 DATAPIN
#define PCclk   5 //PC1715 CLKPIN
//Variablen
uint16_t c,d,rdat;
uint8_t S,x,idx;
//von KeyMap library nicht erzeugte bzw. umdefininierte Key Codes: ,{Taste,Code}
uint16_t Map[][ 2 ] = {
  {PS2_KEY_F1,0xd1},{PS2_KEY_F2,0xd2},{PS2_KEY_F3,0xd3},{PS2_KEY_F4,0xd4},{PS2_KEY_F5,0xcf},{PS2_KEY_F6,0xa0},//F1-6
  {PS2_KEY_F7,0xa1},{PS2_KEY_F8,0xa2},{PS2_KEY_F9,0xa3},{PS2_KEY_F10,0x83},{PS2_KEY_F11,0xc1},{PS2_KEY_F12,0xc2},//F7-12
  {PS2_ALT+PS2_KEY_F1,0xc2},{PS2_ALT+PS2_KEY_F2,0xcd},{PS2_ALT+PS2_KEY_F3,0x8e},//F13-15 Alt+F1-3
  {PS2_KEY_L_ARROW,0x88},{PS2_KEY_R_ARROW,0x86},{PS2_KEY_UP_ARROW,0x8b},{PS2_KEY_DN_ARROW,0x83},//Cursor
  {PS2_KEY_HOME,0x8c},{PS2_KEY_END,0xdd},{PS2_KEY_ENTER,0x9e},{PS2_SHIFT+PS2_KEY_ENTER,0x9d},//Home,S,Enter,NL
  {PS2_SHIFT+PS2_KEY_3,0x00},{PS2_KEY_DIV,0x2d},{PS2_SHIFT+PS2_KEY_DIV,0x5f},//..Minus,Unterstrich
  {PS2_SHIFT+PS2_KEY_F1,0xff}//S0/S1 Umschaltung Shift+F1
  };

//classes
PS2KeyAdvanced keyboard;
PS2KeyMap keymap;

void setup( )
{
//Serial.begin(9600); //Debug
keyboard.begin( DATAPIN, IRQPIN );
keyboard.typematic( 11, 1);
keyboard.setNoRepeat(1);
keyboard.setNoBreak(1);
keymap.selectMap( (char *)"DE" );
pinMode(PCdata, OUTPUT);
pinMode(PCclk, OUTPUT);
}

void loop( )
{
if( keyboard.available() )
  {
  c = keyboard.read( );
  if( c > 0 )
    {
    //Statusbyte setzen  
    x = 0xE0;                           //Status default E0
    if(c & PS2_SHIFT)bitSet(x,1);       //Status für Shift E2
    else if (c & PS2_CAPS)bitSet(x,3);  //Status für Caps E8
    else if (c & PS2_CTRL)bitSet(x,0);  //Status für CTRL E1
    if (S==1)bitSet(x,2);               //Status für S0/S1 E4
    d=keymap.remapKey(c );
    //die aus dem Remap fehlenden Tasten (s.0. codes) einfügen bzw redefinieren
    for( idx = 0; idx < sizeof(Map)/sizeof(Map[0]); idx ++ )
    if( rdat == Map[idx][0]  )          //Taste nachschlagen
     {
     rdat = Map[idx][1]; d &= ~0xFF; d |= rdat; //Code zuweisen                    
     break;
     }
    if(d==0xff)S=!S;                    //S0/S1 Umschaltung
    //Ausgabe  
    if((d>0)&&((d & 0xff)<=0xDD))
     {
      Serialto_pc( x);                  //Statusbyte ausgeben
      Serialto_pc(d & 0xff);            //Tastencode ausgeben    
     }    
    }
  }
}

void Serialto_pc(uint8_t i)    //zum PC1715 übertragen
  {
   //Serial.print((i),HEX); //Debug
   uint8_t z;            //Bitzähler
   //bith();            // original 2x sync?
   //bith();            // geht auch ohne
   bitl();                 //Startbit
   for(z=0;z<8;z++){(i & (1 << z))? bith():bitl();} //Einzelbits auswerten
   bith();                //Stoppbit
   bith();                //Stoppbit
    }

void bith (void)
  //Ausgabe 1-Bit
  {
   digitalWrite(PCdata, LOW);             // Datenbit löschen (weil Daten negiert übertragen)
     digitalWrite(PCclk, HIGH);          //Taktbit setzen
     _delay_us(20);
     digitalWrite(PCclk, LOW);            // Taktbit löschen
  }

void bitl (void)
//1 Ausgabe 0-Bit
  {
     digitalWrite(PCdata, HIGH);         // Datenbit setzen (weil Daten negiert übertragen)
   digitalWrite(PCclk, HIGH);             // Taktbit setzen
   _delay_us(20);
     digitalWrite(PCclk, LOW);             // Taktbit löschen
  }



Es sind noch nicht alle (Sonder-)Tasten verteilt, hier die Tastencodes, die können ja im Programm noch ergänzt werden.


Edit:
- Code ergänzt, irgendwie wird in der PS2KeyMap library das Minuszeichen und der Unterstrich nicht auf DE-Tastatur umgesetzt...
- Zeichensatzumschaltung eingefügt
- Datenarray auf 2D umgestellt, dürfte sich besser handhaben lassen zum ergänzen/ändern der Sonderzeichen

Dieser Beitrag wurde am 30.06.2024 um 11:13 Uhr von DL editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
001
05.04.2024, 21:09 Uhr
Rolly2



Hallo DL,
sehr interessant. Probiere ich morgen mal aus. Von dem Nano V3 habe ich noch einige liegen.

VG, Andreas
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
002
06.04.2024, 18:31 Uhr
jochen_LE



Ah, schön!
Ja, das mit den Sondertasten ist etwas nervig, da die wohl nicht einheitlich definiert waren.
Das ist bei der PS2Keyboard.h leider das Gleiche.
Man muss das wohl auf seine vorhandene Tastatur abstimmen, also schauen, was die für Codes raus schickt, da das wohl leider unterschiedlich war (meist aber dann doch gleich).

Schöne Sache, die die Tastaturen haben meist auch nicht das ewige Leben...
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
003
30.06.2024, 11:14 Uhr
DL
Default Group and Edit


Hatte noch einen kleinen Digispark in einer Tüte gefunden, damit funktioniert das auch recht simpel , es müssen evtl. nur die IO-Pins etwas angepasst werden:

Quellcode:

#define DATAPIN 3//4//PS/2 DATA
#define IRQPIN  2//3//PS/2 CLK
#define PCdata  4//6 //PC1715 DATAPIN
#define PCclk   0//5 //PC1715 CLKPIN


und bei Verwendung des AttinyCore noch "delay" von bith und bitl:

Quellcode:

//_delay_us(20);
  delayMicroseconds(20);


Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
004
30.06.2024, 21:04 Uhr
wpwsaw
Default Group and Edit


Guten Abend,

ich habe mal eine Frage dazu, vor vielen Jahren habe ich über das Forum einige PS/2 Adapter für meine 1715 und 8924 von dir erworben. Die LP waren passend für den EFS10 Stecker. Was ist in dieser Version anders/oder besser?

gruß
wpw
--
RECORD, CRN1; CRN2; PicoDat; LC80; Poly880; KC85/2,3,4,5 ; KC87; Z1013; BIC; PC1715; K8915; K8924; A7100; A7150; EC1834; und P8000 ab jetzt ohne Tatra813-8x8 aber mit W50LA/Z/A; P3; ES175/2 und Multicar M25 3SK; Barkas B1000 HP

Dieser Beitrag wurde am 01.07.2024 um 16:10 Uhr von wpwsaw editiert.
Seitenanfang Seitenende
Profil || Private Nachricht || Suche Zitatantwort || Editieren || Löschen
005
01.07.2024, 12:01 Uhr
DL
Default Group and Edit


Schön wenn DU alles schon hast, mit der Arduino Plattform ist es halt für JEDERMANN möglich, mal eben testweise so etwas aufzubauen...
Dieser Beitrag wurde am 01.07.2024 um 12:03 Uhr von DL editiert.
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