PS/2-Maus mit ATMega/Arduino auslesen -> 0xF4 schlägt fehlt

OP #3602887
Lesenswert?
• ▲
▼
Hallo,

ich versuche momentan, eine Logitech PS/2-Maus (RX250, also USB und 
PS/2) mit meinem Arduino auszulesen.

Die Kommunikation mit der Maus scheint nach einigem Probieren zu gehen, 
leider weigert sich das kleine Nagetier beharrlich, Bewegungs-Reports zu 
vermelden. Reset, Konfiguration etc. funktioniert alles wunderbar, nur 
beim entscheidenen Kommando 0xF4 (Enable Reports) liefert die Maus kein 
0xFA (ACK), sondern 0xFE (NACK). Hier ist der dazugehörige init-Code - 
er ist größtenteils von https://www.youtube.com/watch?v=awYNxfDK7fg 
inspiriert und auf den ATMega328 angepasst (andere Interrupts):
1
void MouseInit(void) {
2
        stream_mode = 0;
3
        status = INIT;
4

5
        //low level initialisation
6
        PS2_Init();
7

8
        //enable Global interrupt
9
        sei();
10
        Serial.println("Resetting...");
11
        PS2_SendToDevice(0xFF);
12
        Serial.println("Waiting for ACK...");
13
        while( status != ACK);
14
        Serial.println("Waiting for BAT_PASSED...");
15
        //wait until we receive self-test result and mouse id
16
        while( status != BAT_PASSED);
17
        Serial.println("Waiting for ID_OK...");
18
        while( status != ID_OK);
19

20
        Serial.println("Setting resolution...");
21
        status = INIT;
22
        PS2_SendToDevice(0xE8);
23
        Serial.println("Waiting for ACK...");
24
        while(status != ACK) ;
25
        status = INIT;
26
        PS2_SendToDevice(0x03);
27
        Serial.println("Waiting for ACK...");
28
        while(status != ACK);
29

30
        Serial.println("Setting sample rate...");
31
        status = INIT;
32
        PS2_SendToDevice(0xF3);
33
        Serial.println("Waiting for ACK...");
34
        while(status != ACK) ;
35
        status = INIT;
36
        PS2_SendToDevice(10);
37
        Serial.println("Waiting for ACK...");
38
        while(status != ACK);
39

40
        Serial.println("Enabling reporting...");
41
        status = INIT;
42
        PS2_SendToDevice(0xF4);
43
        Serial.println("Waiting for ACK...");
44
        //wait for acknowledgement(0xFA) from device
45
        while(status != ACK);
46

47
        //set mouse in stream mode
48
        stream_mode = 1;
49
        buffcnt = 0;
50
        Serial.println("DONE");
51
}
Das letzte "ACK" wird leider nie empfangen, einfach weil die Maus 0xF4 
nicht schluckt. Hat jemand schonmal Erfahrungen mit dem Problem 
gesammelt?

Antwort schreiben

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.

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.