Hallo Leute!
Ich habe folgende Probleme:
Problem 1: Ich lese Daten von einer PS/2 Tastatur ein zu einem Atmega32,
anschließend werden die Daten auf einem LCD ausgegeben. Das ganze
funktioniert auch, aber ich habe hin und wieder irgendwelche Zeichen die
ich nicht eingegeben habe (w, _, U usw.) mit in der Anzeige und kann die
auch nicht löschen. Kann mir jemand sagen, woran das liegt?
Problem 2: Ich möchte nun noch eine Tastatur mit einem Befehl Sperren
und Entsperren können, was durch 2 Taster am STK500 geschehen soll
(Enable: 0xf4, Disable: 0xf5). An die Tastatur kann ich über die
Funktion kbd_send() senden. So wie ich das versucht habe, klappt es
leider nicht, da ich nicht genau weiß, wie ich diese Enable/Disable -
Befehle übergeben muss. Kann mir da jemand weiterhelfen?
Der Code befindet sich im Anhang.
LG
PS/2 ist ein gruselig schlecht definiertes Protokoll und viele auf dem
Markt befindliche Tastaturen haben dann noch freie Interpretationen
davon. Mal eine andere Tastatur probieren…
Ich meinte damit eine andere PS/2 Tastatur probieren. Da hat jeder
Hersteller etwas anderes Verhalten.
Das Handshaking mit dem der Host die Tastatur ausbremsen kann ist bei
vielen Tastaturen grottig implementiert. Da im PC ja ein separater
Microcontroller ist der sich um die Tastatur kümmert wird da selten
ausgebremst. Wenn dann nur nach dem Prinzip "rumprobieren bis es läuft"
entwickelt wird, dann kann das in die Hose gehen wenn sich ein Host
anders verhält als der Entwickler der Tastatur getestet hat.
Habe den Fehler zu problem 1 gefunden, war ein einfaches "i=0" was ich
an einer Stelle vergessen habe......
Aber Problem 2 mit dem Taster bleibt noch, wäre dankbar für jede Idee :)
Programmierer schrieb:> Habe den Fehler zu problem 1 gefunden, war ein einfaches "i=0" was ich> an einer Stelle vergessen habe......
Sicher?
Weiter oben steht auch noch
Bei AVR gibt es eine Applikation für so eine Tastatur.
Der Scan-Code ist aber sicher und ich glaube nicht an "schlechte"
Tastaturen.
Die würden ja auch am PC Probleme machen.
Ja sicher @bülent in die ganzen case anweisungen musste ein i=0 rein,
vorher hat das Programm mit dem i weitergemacht, was bei der allerersten
Eingabe zustande gekommen ist
Kann mir jemand sagen, was ich der Funktion kbd_send() übergeben muss,
damit die Tastatur gesperrt bzw entsperrt wird (sperren 0xf5, entsperren
0xf4)?
Programmierer schrieb:> Kann mir jemand sagen, was ich der Funktion kbd_send() übergeben muss
Anbei Auszug aus dem AT-Manual. Du musst aber nicht unbedingt das KB
abschalten, du könntest auch den Empfänger einfach im "Inhibit Status"
stehen lassen.
Georg
Danke für die Antwort, aber wie übergebe ich denn nun den sperr- bzw.
entsperrbefehl? irgendwie muss ich dem keyboard ja mitteilen, dass es
nicht mehr senden darf, wenn ich eine eingabe gemacht habe
Habe es nun so probiert:
void init_SWITCH(void)
{
uint8_t count;
for (count=0; count<SWITCH_NUMBER; count++)
{
SWITCH_DDR &= ~(1<<count); //Deklarieren der Taster als
EIngang
}
}
temp=SWITCH_PIN; //Speicherung des Tasterstatus
if (temp == 254) //Überprüfung, ob Taster zum Freischalten betätigt
wurde (SW0)
{
KBD_CLOCK_PORT &= ~(1<<KBD_CLOCK_BIT); //Bit wird zurückgesetzt, LOW
KBD_DATA_PORT |= (1<<KBD_DATA_BIT); //Bit wird gesetzt, HIGH
}
if (temp == 253) //Überprüfung, ob Taster zum Sperren betätigt wurde
(SW1)
{
KBD_CLOCK_PORT |= (1<<KBD_CLOCK_BIT); //Bit wird gesetzt, HIGH
KBD_DATA_PORT &= ~(1<<KBD_DATA_BIT); //Bit wird zurückgesetzt, LOW
}
Jedoch funktioniert das ganze nicht so wie es soll, ich kann immer noch
Tastatureingaben machen...
Programmierer schrieb:> Jedoch funktioniert das ganze nicht so wie es soll, ich kann immer noch> Tastatureingaben machen...
Das kannst du während Inhibit ja auch, sie werden aber nicht an den PC
weitergegeben.
Ein Oszilloskop an der PS/2-Schnittstelle wäre sicher hilfreich.
Georg