Daten von PS2 auslesen

OP #978698
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
> 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
  }
Gast #989107
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

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 18 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.