Forum: Compiler & IDEs Daten von PS2 auslesen


von Teplotaxl X. (t3plot4x1)


Angehängte Dateien:

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
  }

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


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
  }

von Teplotaxl X. (t3plot4x1)


Lesenswert?

Hat sich erledigt. Der Code geht.

von Rene (Gast)


Lesenswert?

was hast du geändert damit die richtigen Bits ausgegeben werden

von Rene (Gast)


Lesenswert?

muss das Startbit nicht immer 0, das Stopbit nicht immer 1 sein?

Wie hast du dass mit dem parity bit gemacht? gerade oder ungerade?

Danke für die Hilfe

von Teplotaxl X. (t3plot4x1)


Lesenswert?

@Rene: Zuerst habe ich das Bit in ein Array gelesen und, dann im byte 
die entsprechenden bits gesetzt
@start,parity und stop: don't care, passt scho ;)

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.