Infrarot-USB-Maus im Eigenbau

Aus BraLUG-Wiki

Wechseln zu: Navigation, Suche


Inhaltsverzeichnis

Motivation

Bei der Entwicklung des BLIT2008-Board ist eine Beispiel-Applikation erstellt worden, mit der es möglich ist, dieses Board als Infrarot-USB-Maus, welche mit einer handelsüblichen Infrarot-Fernbedienung gesteuert werden kann, zu verwenden. Da ich gerade etwas Zeit hatte, habe ich nun dieses Beispiel in einer, hardwareseitig abgerüsteten Variante, als eigene Baugruppe aufgebaut. Kernstück dieses Moduls ist diesmal ein ATtiny45, der für diese Funktion vollkommen ausreicht. Entstanden ist eine kleines kompaktes Modul, welches hier beschrieben werden soll.

Hardware

Schaltung

IR-USB-Maus Schaltplan IR-USB-Maus Baugruppe

Grundlage der Schaltung ist das BLIT2008-Board gewesen. Unnötige Komponenten (z.B. LED, I²C- und ISP-Anschluss) wurden weggelassen. Der ATmega8 wurde durch einen ATtiny45 ersetzt. Die Schaltung wurde auf einer kleinen Lochrasterplatine aufgebaut. (Der ISP-Anschluss ist im Schaltbild noch enthalten, aber dann nicht einbaut worden. Siehe dazu auch weiter unten...)

Die Stromversorgung der Baugruppe erfolgt, wie bei USB-Mäusen üblich, über die USB-Schnittstelle.

Programmieradapter

Programmieradapter Programmieradapter auf ATtiny gesteckt

Um nicht unnötig Platz auf der Platine zu verschwenden, ist auch auf den ISP-Anschluss, den man ja eigentlich zum Flashen des Programmes auf den Mikrocontroller benötigt, verzichtet worden. Vielmehr habe ich diese Idee für eine Art Adapter aufgegriffen, die ich mal durch Zufall beim Rumstöbern im Internet gefunden hatte. Auf obigen Bildern sieht man meine Umsetzung. Die Jumperstifte sind so angeordnet, dass sie auf den ATtiny aufgesteckt werden können und mit etwas Glück auch halten (;-)). Die entsprechenden Pins zum Programmieren des Mikrocontrollers (RESET, SCK, MISO, MOSI, Vcc und GND) sind zum Wannenstecker auf der anderen Seite geführt und dort so verdrahtet, dass hier die übliche Flash-Hardware angeschlossen werden kann.

Die ganze Geschichte ist etwas fummelig. Aber da es sich bei der IR-USB-Maus quasi um ein Fertiggerät handelt, was nicht ständig neu programmiert werden muss, ist es eine gangbare Lösung, um den Platz für den ISP-Stecker auf der Platine einzusparen. Natürlich hätte man auch einen Bootloader auf dem ATtiny installieren können, aber auch der muss erstmal im Flash installiert werden...

Fuse-Bits

Im Auslieferungszustand des ATtiny sind dessen Fuse-Bits auf 0xDF (High) und 0x62 (Low) gesetzt. U.a. ist damit die Taktquelle des Mikrocontroller auf den internen Oszillator eingestellt, was für obige Schaltung nicht brauchbar ist, weil ein externer 12MHz-Quarz die Taktversorgung übernehmen soll. Also müssen die Fuses, z.B. via avrdude, umgestellt werden. Mit folgendem Befehl kann man sinnvolle Werte (lfuse=0XEF; hfuse=0xDD) einstellen (als Programmieradapter wird dabei ein USBasp verwendet):

avrdude -c usbasp -p attiny45 -U hfuse:w:0xDD:m -U lfuse:w:0xEF:m

Wer genau wissen möchte, was mit diesen Fuse-Bits auf dem ATtiny45 eingestellt wird, ist z.B. der AVR Fuse Calculator zu empfehlen.

Software

Firmware: Tiny_rc5_usb_mouse.tar.gz

Grundstock der Firmware sind:

Prinzipiell wird der, von einer RC5-Infrarot-Fernbedienung, gesendete Code decodiert und via USB zum PC gesendet. Dabei meldet sich die Mikrocontroller-Baugruppe als USB-Maus (definiert durch die USB-Klasse und die verwendete Ventor-/Produkt-ID) am PC an, so dass keine speziellen Treiber auf PC-Seite installiert werden müssen.

Durch die verschiedenen Tasten der Fernbedienung werden die 3 üblichen Maustasten und die 4 Richtungen der Mausbewegung emuliert. Welche Tasten es genau sind, kann dem Quelltext der Firmware entnommen werden.

Wenn die Baugruppe hard- und softwareseitig korrekt arbeitet sollte, ist auf einem Linux-PC ungefähr folgendes zu sehen sein:

> dmesg
...
usb 1-4.3: new low speed USB device using ehci_hcd and address 41
usb 1-4.3: configuration #1 chosen from 1 choice
input: obdev.at DataStore as /class/input/input9
input: USB HID v1.01 Mouse [obdev.at DataStore] on usb-0000:00:02.1-4.3
...

> lsusb -v
...
Bus 001 Device 041: ID 6666:1147 Prototype product Vendor ID 
Device Descriptor:
 bLength                18
 bDescriptorType         1
 bcdUSB               1.10
 bDeviceClass            0 (Defined at Interface level)
 bDeviceSubClass         0 
 bDeviceProtocol         0 
 bMaxPacketSize0         8
 idVendor           0x6666 Prototype product Vendor ID
 idProduct          0x1147 
 bcdDevice            1.00
 iManufacturer           1 obdev.at
 iProduct                2 DataStore
 iSerial                 0 
 bNumConfigurations      1
 Configuration Descriptor:
   bLength                 9
   bDescriptorType         2
   wTotalLength           34
   bNumInterfaces          1
   bConfigurationValue     1
   iConfiguration          0 
   bmAttributes         0x80
     (Bus Powered)
   MaxPower               20mA
   Interface Descriptor:
     bLength                 9
     bDescriptorType         4
     bInterfaceNumber        0
     bAlternateSetting       0
     bNumEndpoints           1
     bInterfaceClass         3 Human Interface Devices
     bInterfaceSubClass      0 No Subclass
     bInterfaceProtocol      0 None
     iInterface              0 
       HID Device Descriptor:
         bLength                 9
         bDescriptorType        33
         bcdHID               1.01
         bCountryCode            0 Not supported
         bNumDescriptors         1
         bDescriptorType        34 Report
         wDescriptorLength      52
        Report Descriptors: 
          ** UNAVAILABLE **
     Endpoint Descriptor:
       bLength                 7
       bDescriptorType         5
       bEndpointAddress     0x81  EP 1 IN
       bmAttributes            3
         Transfer Type            Interrupt
         Synch Type               None
         Usage Type               Data
       wMaxPacketSize     0x0008  1x 8 bytes
       bInterval             100
Device Status:     0x0000
 (Bus Powered)
...

Ist dies der Fall, kann nun der PC via Infrarot-Fernbedienung gesteuert werden. Z.B. ist soetwas bei Präsentationen ganz praktisch...

Kontakt

Ich, Uwe, bin jederzeit an weiteren Ideen zum Thema Mikrocontroller interessiert!

Weitere Mikrocontroller-Projekte von mir:

'Persönliche Werkzeuge