Achso ja moment. Das hatte ich vergessen zu erwähnen. Das ganze mache ich mit der netten Keyboard unterstützung von Bascom.
Du hast also eine Tabelle mit dem Scancode als adresse und dem daraus resultierenden ASCII Zeichen. Verstehe ich das so richtig?
sast
雅思特史特芬
开发及研究
Achso ja moment. Das hatte ich vergessen zu erwähnen. Das ganze mache ich mit der netten Keyboard unterstützung von Bascom.
Achso Bascom. Ja da bekommt man anscheinend alles mundgerecht vorverdaut. Kann man da eigentlich in die Quellen schauen, wie die das machen?
sast
雅思特史特芬
开发及研究
Da hast du recht!
Nunja, die benutzen eine Tabelle aus der ich aber nicht weiter schlau werde.
Diese "Umrechnung" in C zu realisieren würde mich aber brennend interessieren.Code:Data 0 , 0 , 0 , 0 , 0 , 200 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , &H5E , 0 Data 0 , 0 , 0 , 0 , 0 , 113 , 49 , 0 , 0 , 0 , 122 , 115 , 97 , 119 , 50 , 0 Data 0 , 99 , 120 , 100 , 101 , 52 , 51 , 0 , 0 , 32 , 118 , 102 , 116 , 114 , 53 , 0 Data 0 , 110 , 98 , 104 , 103 , 121 , 54 , 7 , 8 , 44 , 109 , 106 , 117 , 55 , 56 , 0 Data 0 , 44 , 107 , 105 , 111 , 48 , 57 , 0 , 0 , 46 , 45 , 108 , 48 , 112 , 43 , 0 Data 0 , 0 , 0 , 0 , 0 , 92 , 0 , 0 , 0 , 0 , 13 , 0 , 0 , 92 , 0 , 0 Data 0 , 60 , 0 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0 'shifted keys UPPER case Data 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 Data 0 , 0 , 0 , 0 , 0 , 81 , 33 , 0 , 0 , 0 , 90 , 83 , 65 , 87 , 34 , 0 Data 0 , 67 , 88 , 68 , 69 , 0 , 35 , 0 , 0 , 32 , 86 , 70 , 84 , 82 , 37 , 0 Data 0 , 78 , 66 , 72 , 71 , 89 , 38 , 0 , 0 , 76 , 77 , 74 , 85 , 47 , 40 , 0 Data 0 , 59 , 75 , 73 , 79 , 61 , 41 , 0 , 0 , 58 , 95 , 76 , 48 , 80 , 63 , 0 Data 0 , 0 , 0 , 0 , 0 , 96 , 0 , 0 , 0 , 0 , 13 , 94 , 0 , 42 , 0 , 0 Data 0 , 62 , 0 , 0 , 0 , 8 , 0 , 0 , 49 , 0 , 52 , 55 , 0 , 0 , 0 , 0 Data 48 , 44 , 50 , 53 , 54 , 56 , 0 , 0 , 0 , 43 , 51 , 45 , 42 , 57 , 0 , 0
In der Tabelle sind genau an den Stellen, die dem Scancode2 entsprechen die ASCII Werte hinterlegt. Hab ich mir schon so gedacht. Das könnte man 1:1 in C genauso machen. Zwei 128 Byte große Arrays eins für Lowercase und eins für Uppercase also wenn Shift oder Caps gedrückt wurde.
char low_case[] = {..., '0', '9', ...};
char up_case[] = {...};
wobei '0' an der Stelle 69(0x45) und '9' bei 70(0x46) in low_case steht.
Nach der Überprüfung, ob Shift (oder ähnliches) gedrückt wurde, wird anhand des Make Codes im entsprechenden Array der Inhalt an der Make Code Stelle ausgelesen.
sast
雅思特史特芬
开发及研究
Ich hab mal in C nen eigenen "Treiber" für ne Tastatur geschrieben. Anders als in Bascom werden hier auch einige "Sondertasten" erkannt, die Bascom nicht kannte. Nicht grad der perfekteste Code, aber er funktioniert.
Was auch noch fehlt ist ein Timeout; d.h. wenn bei der Übertragung irgendwann mal ein Bit verschluckt wird, gibt das ein Problem, dann wird nichts mehr erkannt. Müsste man noch nachrüsten.
Wers braucht: Einfach nochmal melden, dann setz ich den hier rein.
#ifndef MfG
#define MfG
Guten Morgen Jaecko,
ich brauchs zwar nicht, weil ich mich nur aus reiner Neugier mal mit dem Scancode beschäftigt habe. PickNik war sozusagen der Auslöser. Aber Killer hat ja bereits Interesse bekundet.
Außerdem find ich es immer ziemlich nervig, wenn ich im Internet endlich mal was passendes gefunden habe, wo dann über Code gesprochen wird und man kann ihn dann nirgends ansehen. So groß kann der Code ja nicht sein, stell ihn doch einfach ein.
Für was nimmt man denn am µC eine PS2 Tastatur? Oder gings da um die Barcodegeschichte?
sast
雅思特史特芬
开发及研究
Na denn: Hier isser.
Ggf. müssten noch die Typen wie ui8_t nach uint_8 etc. geändert werden; je nach dem, was man selbst hernimmt.
(die #includes für glob_defs und glob_type brauchts nicht wirklich)
In der _cfg.h müssen noch die ganzen Pins/Ports/Interrupt-Daten eingestellt werden; dann einfach Init und man kann z.B. in kbdkey_ascii und kbdkey_func nachschauen, welche die zuletzt gedrückte "Ascii-Taste" bzw. Funktionstaste war.
Und warum PS/2 am µC?... Naja, man muss ja nicht die ganze Tastatur hinhängen. Tastaturcontroller ausbauen und an andere Taster hängen geht auch. Hat halt den Vorteil: Es ist eine Interrupt-gesteuerte Eingabe mehrerer Tasten, und das ganze auch noch schön entprellt; automatische Wiederholung, wenn man länger drückt; Signal beim loslassen.
Und wenn ich dann noch rauskrieg, wie man der Tastatur Befehle schicken kann, hat man mit den 3 LEDs sogar noch Schaltausgänge.
#ifndef MfG
#define MfG
Das Ps/2 Protokoll ist bidirektional definiert
z.B.
http://www.marjorie.de/ps2/ps2_protocol.htm
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
Lesezeichen