Daten von PS2 auslesen

OP #978698
Lesenswert?

Dieser Code sollte eine PS2 Tastatur auslesen, was aber noch nicht wie 
gewünscht funktioniert.
Statt 01001010001 Für die Leertaste bekomme ich 11111010001.
Ich hoffe dass der Code ausreichend kommentiert ist.
Zur Funktionsweise

Auf ne Fallende Flanke warten, Bit lesen und setzen, auf die steigende 
Flanke warten.

Was mache ich falsch.

PS: Einen Interrupt pin will ich nicht verwenden.

EDITH: So falsch kann mein Algorithmus gar nicht sein, denn wenn ich die 
Bits in ein ByteArray stopf, dann gehts
1
  unsigned char bits[11];
2
  unsigned char i = 0;
3
  while(i < 11) { //11Bits (Start, 8xDaten, Parity, Stop)
4
    while(get_clock() == 1) //warten auf fallende Flanke
5
      ;
6
    bits[i] = get_data();
7
    while(get_clock() == 0) //waren auf steigende Flanke
8
      ;
9
    i++;
10
  }
Angehängte Dateien:
Moderator (Firma: Titel) Persönliche Seite #979141
Lesenswert?

> Statt 01001010001 Für die Leertaste bekomme ich 11111010001.
Sieht aus wie wenn das Timing knapp verletzt wird...

Aus http://www.marjorie.de/ps2/ps2_protocol.htm:
Abbildung 2: Übertragung vom Eingabegerät zum Host. Die Datenleitung 
ändert ihren Zustand wenn die Clockleitung High ist. Daten sind gültig, 
wenn Clock Low ist.

Probiers doch mal mit einer etwas anderen Logik:
Daten einlesen solange Clock low ist.

So etwa:
1
  unsigned char bits[11];
2
  unsigned char i = 0;
3
  while(i < 11) { //11Bits (Start, 8xDaten, Parity, Stop)
4
    while(get_clock() == 1) //warten auf fallende Flanke
5
      ;
6
    while(get_clock() == 0) //waren auf steigende Flanke
7
      bits[i] = get_data();
8
    i++;
9
  }

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren