AVR + V-USB als HID-Device mit Drehimpulsgebern

Gast #1795705
Lesenswert?

Hi,
Habe einen ATMega32(@12MHz) mit V-USB als HID-Gerät (Joystick) laufen. 
Bei der Verwendung von den Drehimpulsgebern habe ich jedoch noch 
Probleme.
Sie funktionieren einwandfrei wenn ich sie als Analogachsen definiere, 
die einen 8bit-Wert senden. Ich möchte es jetzt allerdings so haben, 
dass links- und rechtslauf jeweils als Button-Signal gemeldet wird. Das 
Problem dabei ist, dass der Zustand des gedrückten Buttons so kurz ist, 
dass es vom PC nicht erfasst wird.
Das ganze basiert auf dem Code vom RedKontroll-Projekt.

Hier der entscheidende Code:
1
encTemp= encoderIn(PINB&0b11111111, lastPINB, 0, 1);
2
    if(encTemp==1) 
3
    {
4
      //enc0--;
5
      but1=0b00000001;
6
      changed= 2;
7
      lastPINB= PINB&0b11111111;
8
    } 
9
    else if(encTemp==2) 
10
    { 
11
      //enc0++;
12
      but1=0b00000010;
13
      changed= 2;
14
      lastPINB= PINB&0b11111111;
15
    }  
16
    else
17
    {
18
      but1 = 0;
19
    }

but1 enthält die entsprechenden Buttons, entsprechend der 
links/rechts-Rotation wird entweder Button 0 oder 1 gesetzt bzw bei 
keiner Rotation alle auf 0. Die Theorie sollte passen, aber selbst mit 
Vergrößerung des Abfrageintervalls habe ich keine Änderung im Verhalten. 
Hat jemand eine Idee was ich machen könnte?
Grüße, ElGreco
Gast #1795719
Lesenswert?

Hi,

du könntest das Rücksetzen des "Taste gedrückt" Status durch die 
USB-Funktion, nach Übermittlung an den PC, machen lassen. Dann darf die 
Enc Funktion bei einem "Taste nicht gedrückt" Status natürlich auch 
keine 0 mehr setzen, sonder einfach gar nix tun.

Gruß
Stefan
Gast #1795945
Lesenswert?

Um solche virtuellen Tastendrücke sicher zu übertragen muss man darauf 
achten, dass der Report mit der gesetzten Taste definitiv raus geht und 
danach noch einen mit nicht gesetzter Taste schicken.
Gast #1801023
Lesenswert?

danke für Antworten, erst auf 0 setzen wenn der Report sicher gesendet 
ist hat mir weitergeholfen.

Ich versuche nun einen weiteren Drehimpulsgeber als Analogachse mit 
erweitertem Bereich auszugeben, d.h. anstelle von 8bit (was bisher 
einwandfrei funktioniert), möchste ich Werte von 0-359 übertragen, wofür 
ich 9bit benötige.
Allerdings hat das bisher noch nicht so ganz geklappt. Die 
Windows-Joystick-Kalibrierung zeigt nachwievor nie was höheres als 255 
an (der Wert springt aber merkwürdig herum). Ich vermute das Problem am 
USB Device Descriptor.
REPORT_SIZE ist 9, LOGICAL_MINIMUM 0 und LOGICAL_MAXIMUM 359. Sind diese 
Daten vielleicht nicht ausreichend?
Danke im Vorraus, lg

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