www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik AVR + V-USB als HID-Device mit Drehimpulsgebern


Autor: ElGreco (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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:
encTemp= encoderIn(PINB&0b11111111, lastPINB, 0, 1);
    if(encTemp==1) 
    {
      //enc0--;
      but1=0b00000001;
      changed= 2;
      lastPINB= PINB&0b11111111;
    } 
    else if(encTemp==2) 
    { 
      //enc0++;
      but1=0b00000010;
      changed= 2;
      lastPINB= PINB&0b11111111;
    }  
    else
    {
      but1 = 0;
    }

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

Autor: Stefan P. (Gast)
Datum:

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

Autor: Guido Körber (Gast)
Datum:

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

Autor: ElGreco (Gast)
Datum:

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

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.