Tastaturcode

Im Unterforum Microcontroller - Beschreibung: Hardware - Software - Ideen - Projekte

Elektronik Forum Nicht eingeloggt       Einloggen       Registrieren




[Registrieren]      --     [FAQ]      --     [ Einen Link auf Ihrer Homepage zum Forum]      --     [ Themen kostenlos per RSS in ihre Homepage einbauen]      --     [Einloggen]

Suchen


Serverzeit: 06 11 2024  02:51:41      TV   VCR Aufnahme   TFT   CRT-Monitor   Netzteile   LED-FAQ   Osziloskop-Schirmbilder            


Elektronik- und Elektroforum Forum Index   >>   Microcontroller        Microcontroller : Hardware - Software - Ideen - Projekte


Autor
Tastaturcode

    







BID = 368378

jmibk

Gesprächig



Beiträge: 143
 

  


Ich habe mir die Software "Freestyler" heruntergeladen (ist ein DMX Steuerprogramm, Freeware) und bin da draufgekommen, dass man so einige Funktionen über die Tastatur steuern kann.
Jetzt bin ich auf die Idee gekommen eventuell den Tastaturanschluss des PC's für eine DMX Bedieneinheit zu missbrauchen.

Erste Möglichkeit: Die Tasten mit den programmspezifischen
Funktionen abkleben, was aber nicht meiner Vorstellung entspricht.

Man kann jetzt eine alte Tastatur (den Chip) hernehmen und da die neuen Bedienelemente dranbauen.
Wie heißt der Chip der da meistens verbaut ist? Kann man vielleicht auch den Code, den eine Tastatur an den PC sendet mit einem AVR nachmachen, sprich den Chip, der da drin ist in einer Tastatur mit einem AVR nachprogrammieren?

Gesucht also:
- Den Chiptypen, der in Tastaturen drin ist und recht einfach (Farnell, RS, Conrad,...) zu bekommen ist.
- Codierung oder Signalform, Protokoll eines PS2 Tastaturanschlusses-


_________________

BID = 368387

Her Masters Voice

Inventar


Avatar auf
fremdem Server !
Hochladen oder
per Mail an Admin

Beiträge: 5308
Wohnort: irgendwo südlich von Berlin

 

  

Geht Beides. Einfach ne alte Tastatur schlachten. In älteren AT-Tastaturen (XT geht nicht so einfach, war anders codiert) wurden die Chips sogar oft gesockelt. Es handelte sich oft um 8048 Derivate in verschiedensten Ausführungen. Aber auch nachprogrammieren ist nicht das grosse Problem, da recht gut dokumentiert ist was an der Tastaturschnittstelle abgeht. Für AVRs gibts z.B. FastAVR, ein BASIC, das PS/2-Tastaturbefehle von Haus aus mitbringt.


_________________
Tschüüüüüüüs

Her Masters Voice
aka
Frank

***********************************
Der optimale Arbeitspunkt stellt sich bei minimaler Rauchentwicklung ein...
***********************************

BID = 368654

Jornbyte

Moderator



Beiträge: 7170

Oder was fertiges (ist alt)

.include "4433def.inc"

.def temp = r16 ; universalregister definieren
.def keybdata = r14 ; kegister fuer keyboard daten
.def keybparity = r15 ; keyboard parity counter
.def keybcount = r18
.def status = r19 ; hier merken wir uns keycodes

.equ break = 0 ; bit 0 vom keyb. status register -> breakcode folgt
.equ shift = 1 ; shift gedrueckt?!
.equ caps = 2 ; caps an/aus
.equ alt = 3
.equ ctrl = 4

rjmp reset ; Reset Handler
rjmp keyb_int ; IRQ0 Handler
reti ; IRQ1 Handler
reti ; Timer1 Capture Handler
reti ; Timer1 compare Handler
reti ; Timer1 Overflow Handler
reti ; Timer0 Overflow Handler
reti ; SPI Transfer Complete Handler
reti ; UART RX Complete Handler : RXCIE
reti ; UDR Empty Handler
reti ; UART TX Complete Handler
reti ; ADC Conversion Complete Interrupt Handler
reti ; EEPROM Ready Handler
reti ; Analog Comparator Handler

reset:
ldi temp, RAMEND
out SP, temp ; set stack pointer

; Port datenrichtungen setzen
; PD 2 <- Keyboard Clock (interrupt0)
; PD 3 <- Keyvoard Data

ldi temp, 0b11110011 ; und fuer Port D
out ddrd, temp ;

ldi temp, 0b00001100 ; pullups fuer pd2 und 3 anschalten
out portd, temp

;INT0 aktivieren
ldi temp, 0b01000000 ; int0 aktivieren
out gimsk, temp
ldi temp, 0b00000010 ; int0 bei fallender flanke
out mcucr, temp

clr keybcount ; keyboard bits initialisieren
clr status ; nocheins

sei ; interrupts global an
main:
rjmp main

; =============== Keyboard routinen =============

keyb_int:
cpi keybcount, 0x00 ; startbit
breq startbit

cpi keybcount, 0x09 ; paritybit
breq paritybit

cpi keybcount, 0x0A ; stoppbit
breq stopbit

clc
sbic pind, 3
sec
ror keybdata

startbit:
; interessiert nicht
paritybit:
; TODO
stopbit:

inc keybcount

cpi keybcount, 0x0B ; alle bitsuebertragen, gucken was dabei rausgekommen ist...
brne nextbit ; ans prozedurende springen, falls noch NICHT alle bits

;keyboard stoppen, soll puffern
sbi ddrd, 2 ; pd2 als ausgang...
cbi portb, 2 ; pd2 low...

push temp ; temp sichern
mov temp, keybdata ; eingefangene daten nach temp kopieren
rcall keyb ; keyboarddaten weiterverarbeiten
pop temp ; temp sicherung zurueckholen

clr keybcount ; counter wieder zurueckstellen fuer die naechste runde

cbi ddrd, 2 ; pd2 wieder eingang
sbi portd, 2 ; pullup wieder an, ready to send

nextbit:
reti


keyb:
cpi temp, 0xAA ; BAT test
breq keyb99

cpi temp, 0xF0 ; breakcodes suchen
brne keyb0
sbr status, 1< rjmp keyb99

keyb0:
sbrs status, alt
rjmp keyb1
brne keyb_alt
keyb1:
cpi temp, 0x12 ; lshift
brne keyb2
rjmp keyb_shift
keyb2:
cpi temp, 0x59 ; rshift
brne keyb3
rjmp keyb_shift
keyb3:
cpi temp, 0x58 ; caps
brne keyb4
rjmp keyb_shift
keyb4:
cpi temp, 0x11 ; alt
brne keyb5
rjmp keyb_alt
keyb5:
cpi temp, 0x14 ; ctrl
brne keyb6
rjmp keyb_ctrl

; -------------------------------------------------------------------------------
sbrc status, break ; alles ab hier ist uninteressant, wenn breakcode
rjmp keyb99
; -------------------------------------------------------------------------------
keyb6:
cpi temp, 0x5A ; Return
brne keyb7
rjmp return

keyb7:
cpi temp, 0x07 ;F12
brne keyb8
rcall f12
rjmp keyb99 ; bei funktionstasten kein lookup
keyb8:

keyb90:
rcall keyb_lookup ; zum tastencode gehoerendes zeichen raussuchen

cpi temp, 0x00 ; leere zeichen rausfiltern
breq keyb99

sbrs status, break ; zeichen nach breakcodes rausfiltern
rcall ausdrucken ; fertigen buchstaben ausgeben (ascii wert in temp)
cbr status, 1<keyb99:
ret

keyb_shift:
cbr status, 1< sbrs status, break ; testen, ob shift taste losgelassen wird, wenn nicht
sbr status, 1< cbr status, 1< ret

keyb_alt:
cbr status, 1< sbrs status, break ; testen, ob alt taste losgelassen, wenn nicht
sbr status, 1< cbr status, 1< ret

keyb_ctrl:
cbr status, 1< sbrs status, break ; testen, ob strg taste losgelassen wurde
sbr status, 1< cbr status, 1< ret

keyb_lookup:
; zeichentabelle auswaehlen, und start in x-pointer laden
ldi zh, high(keysk*2) ; lade zeichentabelle fuer kleine zeichen
ldi zl, low(keysk*2)

sbrc status, shift ; wenn shift gedrueckt
ldi zh, high(keysg*2) ; lade zeichentabelle fuer grosse zeichen (high byte)
sbrc status, shift
ldi zl, low(keysg*2) ; ... und das gleiche fuers low byte

add zl, temp ; Scancode und Zeichen abgleichen
brcc nocarry ; testen ob ueberlauf beim addieren
inc zh ; (16 bit zeiger!!)
nocarry:
lpm ; lade R0 mit Wert auf der der Z-Pointer zeigt
mov temp,r0 ; ASCII-Zeichen aus r0 laden
ret

keysg:
; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
.db 0x00,0x00,0x00,0x00,0x00,_FF ,_AT ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;00
.db 0x00,0x00,0x00,0x00,0x00,0x51,0x21,0x00,0x00,0x00,0x59,0x53,0x41,0x57,0x22,0x00 ;10
.db 0x00,0x43,0x58,0x44,0x45,0x24,0x33,0x00,0x00,0x20,0x56,0x46,0x54,0x52,0x25,0x00 ;20
.db 0x00,0x4E,0x42,0x48,0x47,0x5A,0x26,0x00,0x00,0x00,0x4D,0x4A,0x55,0x2F,0x28,0x00 ;30
.db 0x3B,0x00,0x4B,0x49,0x4F,0x3D,0x29,0x00,0x00,0x3A,0x5F,0x4C,0xFE,0x50,0x3F,0x00 ;40
.db 0x00,0x00,0x1E,0x00,0x5F,0x00,0x00,0x00,0x00,0x00,_LF,0x2B,0x00,0x27,0x00,0x00 ;50
.db 0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x34,0x37,0x00,0x00,0x00 ;60
.db 0x30,0x2C,0x32,0x35,0x36,0x38,0x00,0x00,0x00,0x2b,0x33,0x2D,0x2A,0x39,0x00,0x00 ;70
.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;80

keysk:
; 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
.db 0x00,0x00,0x00,0x00,0x00,_FF ,_AT ,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x5E,0x00 ;00
.db 0x00,0x00,0x00,0x00,0x00,0x71,0x31,0x00,0x00,0x00,0x79,0x73,0x61,0x77,0x32,0x00 ;10
.db 0x00,0x63,0x78,0x64,0x65,0x34,0x33,0x00,0x00,0x20,0x76,0x66,0x74,0x72,0x35,0x00 ;20
.db 0x00,0x6E,0x62,0x68,0x67,0x7A,0x36,0x00,0x00,0x00,0x6D,0x6A,0x75,0x37,0x38,0x00 ;30
.db 0x2C,0x00,0x6B,0x69,0x6F,0x30,0x39,0x00,0x00,0x2E,0x2D,0x6C,0xFE,0x70,0x2D,0x00 ;40
.db 0x00,0x00,0x1E,0x00,0x5F,0x60,0x00,0x00,0x00,0x00,_CR,0x2A,0x00,0x23,0x00,0x00 ;50
.db 0x3C,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x31,0x00,0x34,0x37,0x00,0x00,0x00 ;60
.db 0x30,0x2C,0x32,0x35,0x36,0x38,_ESC,0x00,0x00,0x2b,0x33,0x2D,0x2A,0x39,0x00,0x00 ;70
.db 0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00 ;80





_________________
mfg Jornbyte

Es handelt sich bei dem Tipp nicht um eine Rechtsverbindliche Auskunft und
wer Tippfehler findet, kann sie behalten.


Zurück zur Seite 1 im Unterforum          Vorheriges Thema Nächstes Thema 


Zum Ersatzteileshop


Bezeichnungen von Produkten, Abbildungen und Logos , die in diesem Forum oder im Shop verwendet werden, sind Eigentum des entsprechenden Herstellers oder Besitzers. Diese dienen lediglich zur Identifikation!
Impressum       Datenschutz       Copyright © Baldur Brock Fernsehtechnik und Versand Ersatzteile in Heilbronn Deutschland       

gerechnet auf die letzten 30 Tage haben wir 24 Beiträge im Durchschnitt pro Tag       heute wurden bisher 2 Beiträge verfasst
© x sparkkelsputz        Besucher : 182289425   Heute : 248    Gestern : 4667    Online : 408        6.11.2024    2:51
0 Besucher in den letzten 60 Sekunden         ---- logout ----viewtopic ---- logout ----
xcvb ycvb
0.066967010498