Hardware > Hardware (Classic 16-/32-Bit)
Tastatur mit CapsLock Controlle
ToPeG:
Ich Dummerchen habe zwei Byte geschrieben Das Register ist aber nur ein Byte breit. Kein wunder das sich nichts getan hat.
--- Code: ---'
' Testprogramm fuer Capslock LED
' ueberwacht den Capslock-Status
' und setzt danach Bit0 an Port3 des IKBD
' Wenn dort ueber einen Transisor eine LED angeschlossen ist
' Kann sie den CapsLockstatus anzeigen
'
' Komando, Adresse, Bytecount, Bytes
' AN
' 20, 0006, 01, FF
' AUS
' 20, 0006, 01, FE
'
kbd$=" "
init
'
PRINT AT(1,1);"Ende mit Maustaste"
'
REPEAT
led_update
PAUSE 1
UNTIL MOUSEK
'
PROCEDURE init
LOCAL adr%
adr%=VARPTR(kbd$)
CARD{adr%}=&H2000
CARD{adr%+2}=&H0601
RETURN
'
PROCEDURE led_update
LOCAL status!
status!=BIOS(11,-1) AND 16
led(status!)
print_status(status!)
RETURN
'
PROCEDURE print_status(on!)
PRINT AT(5,5);"Capslock: ";
IF on!
PRINT "ON "
ELSE
PRINT "OFF"
ENDIF
RETURN
'
PROCEDURE led(on!)
LOCAL adr%
adr%=VARPTR(kbd$)
IF on!
CARD{adr%+4}=&HFF
ELSE
CARD{adr%+4}=&HFE
ENDIF
~XBIOS(25,5,L:adr%)
RETURN
--- Ende Code ---
Also auf ein neues.
ToPeG:
--- Zitat von: gstoll am So 19.08.2012, 21:50:53 ---Pauschal fällt mir erstmal auf, dass Port 3 und damit Adresse 0x0006 nur 8 Bit breit ist.
--- Ende Zitat ---
Habe ich auch gesehen.
--- Zitat von: gstoll am So 19.08.2012, 21:50:53 ---Zudem musst Du im Data Direction Register von Port 3 (0x0004) den entsprechenden Port auch als Ausgang (High = 1) setzen. Die werden bei einem Reset erstmal alle als Eingang geschaltet.
--- Ende Zitat ---
Da bin ich nicht so sicher.
Ich will so wenig wie möglich an den Ports herum pfuschen. Darum versuche ich es erst mal ohne setzen. Wenn das geht ist gut ansonsten muss ich weiter schauen.
EDIT:
Ich habe mich mal weiter durch den Code des IKBD gefressen.
Nach dem Init ist port3 dauerhaft ein Ausgang. Beim Initialisieren wird Port3/4 als Ausgang geschaltet, Dann wird nur noch die Richtung von Port4 Manipuliert.
Beim Init wird werden beide Ports mit FFFF gefüllt. Auch nach jedem Lesen der Tastaturmatrix werden beide mit FFFF gefüllt. Das heißt der Ausgang ist Ohne Manipulation dauerhaft High. Darum Leuchtet die LED bei Rainer dauerhaft. Weiterhin bedeutet es, dass der Port immer wider geschaltet werden muss, so schnell wie möglich. Das heißt das Programm muss sich an den VBlank hängen damit die LED nicht Flackert. Möglicherweise muss ich direkt die Hardware ansprechen, damit das schnell genug ist. Mal schauen.
EDIT2:
Auf der anderen Seite bedeutet es, dass ich mich nur darum Kümmern muss den Port abzuschalten. An geht er von allein. Möglicherweise sollte man das Signal durch einen Inverter jagen, dann ist es Dauerhaft aus, bis man es einschaltet. Das ist günstiger, da CapsLock häufiger aus als an ist.
ToPeG:
Ich habe gerade erfahren das es funktioniert.
Das Heißt nun auf zur Phase2. Ein Programm das sich in einen InterruptVektor einhängt und darüber das CapsLock überwacht.
Phase3 ist dann ein AutoOrder Programm.
ToPeG:
Bevor ich weiter mache.
Besteht ein Interesse an mehr als einer LED? Soweit ich es sehe müssten zumindest bis zu 8 machbar sein. Ich habe es noch nicht ausprobiert und wollte erst mal vorsichtig anfragen ob da überhaupt ein Interesse besteht.
Neben Capslock ließe sich so auch Laufwerksaktivitäten, Systemstatus usw. ausgeben. Alles was man im System per Software abfragen kann ließe sich anzeigen.
Zudem Ließe sich damit die Systembelastung verringern, da die LED nicht immer wieder neu gesetzt werden müssten.
Ich werde später mal die Schaltung zusammen setzen. Dann Genaueres.
Gast120501:
Ich fürchte, als GFA- Basic-Programm ist das zu langsam, um einen Effekt zu sehen.
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln