mikrocontroller.net

Forum: Compiler & IDEs Daten von PS2 auslesen


Autor: Teplotaxl X. (t3plot4x1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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
  unsigned char bits[11];
  unsigned char i = 0;
  while(i < 11) { //11Bits (Start, 8xDaten, Parity, Stop)
    while(get_clock() == 1) //warten auf fallende Flanke
      ;
    bits[i] = get_data();
    while(get_clock() == 0) //waren auf steigende Flanke
      ;
    i++;
  }


Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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:
  unsigned char bits[11];
  unsigned char i = 0;
  while(i < 11) { //11Bits (Start, 8xDaten, Parity, Stop)
    while(get_clock() == 1) //warten auf fallende Flanke
      ;
    while(get_clock() == 0) //waren auf steigende Flanke
      bits[i] = get_data();
    i++;
  }

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat sich erledigt. Der Code geht.

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
was hast du geändert damit die richtigen Bits ausgegeben werden

Autor: Rene (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Teplotaxl X. (t3plot4x1)
Datum:

Bewertung
0 lesenswert
nicht 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 ;)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.