USB-HID mit PIC18F4550: Eigene Tastaturen und Mäuse bauen

USB-HID mit PIC18F4550 ist ein bewährter Einstieg, um eigene Eingabegeräte wie Tastaturen, Mäuse oder Spezial-Controller zu bauen, die am PC ohne Treiberinstallation funktionieren. HID (Human Interface Device) ist dafür ideal, weil Windows, macOS und Linux die Klasse nativ unterstützen: Das Gerät meldet sich an, der Rechner erkennt „Keyboard“ oder „Mouse“, und Sie können sofort Daten austauschen. Gleichzeitig ist USB deutlich anspruchsvoller als UART oder I²C, denn neben der Firmware zählen auch Takt, Stromversorgung, Pull-ups, Descriptoren und ein sauberes Enumerationsverhalten. Genau hier punktet der PIC18F4550: Er besitzt ein USB-2.0-fähiges Full-Speed-Gerätemodul und eine dazu passende Infrastruktur, die sich mit Microchips USB-Stacks gut nutzen lässt. In diesem Tutorial lernen Sie, wie Sie die Grundlagen so aufbauen, dass Ihre eigene HID-Tastatur oder HID-Maus stabil enumeriert, zuverlässige Reports sendet und sich sauber debuggen lässt – ohne „Trial-and-Error“ an den falschen Stellen. Der Fokus liegt auf einem professionellen, nachvollziehbaren Aufbau, der sowohl für Einsteiger als auch für Fortgeschrittene praktisch ist.

HID, USB und PIC18F4550: Begriffe und Ebenen sauber trennen

Bevor Sie mit Schaltplan und Code starten, hilft eine klare Einordnung:

  • USB ist das Transport- und Protokollsystem (Enumeration, Endpoints, Transfers, Adressen).
  • HID ist eine Geräteklasse auf USB-Ebene, die festlegt, wie Eingabegeräte beschrieben werden und wie „Reports“ aufgebaut sind.
  • PIC18F4550 ist Ihr USB-Device (kein Host). Er stellt dem PC ein Gerät zur Verfügung, das sich als Tastatur/Maus ausgibt.

USB-HID ist besonders angenehm, weil Sie keine eigenen Treiber benötigen. Der Preis dafür: Sie müssen sich an die HID-Regeln halten, insbesondere an die Descriptor-Struktur und das Report-Format. Die offizielle Referenz ist die HID-Spezifikation (Version 1.11), die die Descriptoren, Reports und Klassenanforderungen beschreibt: USB HID 1.11 Spezifikation (PDF).

Warum der PIC18F4550 für HID-Projekte so beliebt ist

Der PIC18F4550 ist seit Jahren ein Klassiker für USB-Device-Projekte, weil er Full-Speed USB unterstützt und in vielen Lern- und Referenzprojekten vorkommt. In der Gerätefamilie PIC18F2455/2550/4455/4550 sind die USB-Funktionen beschrieben, inklusive Full-Speed (12 Mbit/s) und der USB-spezifischen RAM-Struktur: PIC18F2455/2550/4455/4550 Datenblatt (PDF).

  • Full-Speed USB Device: ausreichend für HID-Tastatur/Maus und viele generische HID-Controller.
  • Bewährte USB-Stacks: Viele Beispiele existieren (HID Mouse, HID Keyboard, HID Bootloader).
  • Gute Verfügbarkeit: Viele Boards und Community-Projekte nutzen den Baustein.

Wichtig: Der PIC18F4550 ist ein USB-Device. Für „USB-Host“ (z. B. USB-Stick direkt am PIC) bräuchten Sie andere Controller oder Zusatzhardware.

Hardware-Basics: USB-Anschluss, Pull-ups, Versorgung und Layout

USB ist nicht nur „D+ und D- anschließen“. Für stabile Enumeration und zuverlässige Kommunikation müssen die Grundlagen stimmen:

  • D+ und D- als differentielles Paar: möglichst kurz, parallel geführt, keine unnötigen Schleifen.
  • Pull-up an D+ (Full-Speed): signalisiert dem Host die Geschwindigkeit. Viele PIC-USB-Implementierungen steuern das über die interne USB-Hardware; prüfen Sie Ihr Design anhand von Datenblatt und Referenzschaltplänen.
  • VUSB/Regler-Konzept: Je nach Konfiguration nutzt der PIC interne USB-Reglerpfade; beachten Sie die empfohlenen Kondensatoren.
  • ESD-Schutz: Besonders bei Geräten, die oft eingesteckt werden, sind ESD-Dioden am USB-Port sinnvoll.
  • Strombudget: USB liefert typischerweise 5 V. Ihr Gerät muss angeben, wie viel Strom es braucht (Descriptoren) und darf Grenzen nicht überschreiten.

Wenn Ihr HID-Projekt zusätzlich LEDs, Displays oder Motoren betreibt, trennen Sie Versorgungsbereiche sinnvoll und vermeiden Sie, dass Lastsprünge die USB-Stabilität stören. Viele „USB-Probleme“ sind in Wahrheit Versorgungseinbrüche oder Layout-Artefakte.

Takt und USB-Stabilität: Ohne korrekten Clock-Setup keine Enumeration

USB ist timingkritisch. Der PIC18F4550 muss die USB-Taktanforderungen einhalten, sonst scheitert die Enumeration oder es kommt zu sporadischen Fehlern. Deshalb ist es wichtig, den Oszillator- und PLL-Pfad korrekt zu konfigurieren (Quarz/Frequenz, PLL-Optionen, USB-Clock-Derivate). Praktisch heißt das: Verlassen Sie sich nicht auf „irgendeinen“ Clock-Mode, sondern orientieren Sie sich an bewährten Beispielen und an den Vorgaben im Datenblatt. Sobald USB läuft, können Sie in der Firmware gezielt überprüfen, ob Reset-Events, Suspend/Resume und Re-Enumeration sauber funktionieren.

USB-Enumeration in verständlich: Was beim Anstecken wirklich passiert

Wenn Sie den PIC als HID-Gerät an den PC stecken, läuft ein definierter Ablauf ab:

  • Connect/Speed-Erkennung: Der Host erkennt anhand des Pull-ups, ob Full-Speed oder Low-Speed vorliegt.
  • Reset und Adresse: Der Host setzt das Device zurück und vergibt eine USB-Adresse.
  • Descriptor-Abfrage: Device-, Configuration-, Interface-, Endpoint- und HID-Descriptoren werden abgefragt.
  • Konfiguration: Der Host wählt eine Konfiguration; ab dann sind Endpoints aktiv.
  • HID-Reports: Über Interrupt-Endpunkte werden periodisch Reports ausgetauscht.

Wenn Ihr Gerät hier hängen bleibt, liegt es meist an falschen Descriptoren, falscher Endpoint-Konfiguration oder an Timing/Clock/Hardware. Ein USB-Protokoll-Analyzer oder zumindest die Host-Logs (z. B. Windows-Gerätemanager, Linux dmesg) helfen enorm.

Microchip-Stacks und Beispiele: Der schnellste Weg zu einem funktionierenden HID

Für den PIC18F4550 sind fertige HID-Beispiele ein großer Vorteil. Microchip verweist für USB-Demo-Projekte auf die Microchip Libraries for Applications (MLA) und nennt dort konkrete HID-Maus-Beispiele für PIC18F4550-basierte Demo-Boards: USB Code Example für PIC18F4550 (Microchip Support). Diese Demos sind didaktisch wertvoll, weil sie Clock-Setup, Descriptoren, Endpoint-Handling und den Report-Transfer bereits konsistent lösen.

  • HID Mouse Demo: eignet sich, um Report-Formate und Interrupt-Endpoints zu verstehen.
  • HID Keyboard Varianten: zeigen, wie Modifier, Keycodes und Boot-Protocol funktionieren.
  • HID Bootloader (optional): kann Firmware-Updates über HID ermöglichen, ohne Treiber.

Wenn Sie später Firmware-Updates komfortabel machen möchten, ist ein HID-Bootloader-Konzept interessant. Es existieren MLA-basierte Ansätze, die auf aktuelle Toolchains portiert wurden, z. B.: HID Bootloader für PIC18F (GitHub, MLA-basiert). Nutzen Sie solche Projekte als Lern- und Referenzbasis und prüfen Sie immer, ob die Toolchain-Version zu Ihrem Setup passt.

HID-Descriptoren: Das Herzstück jeder USB-Tastatur und USB-Maus

Bei HID entscheidet nicht primär „der Code“, sondern der Descriptor. Der Host interpretiert Ihr Gerät anhand von:

  • Device Descriptor: Vendor ID, Product ID, USB-Version, grundlegende Eigenschaften.
  • Configuration Descriptor: Stromaufnahme, Anzahl Interfaces.
  • Interface Descriptor: Klasse/Subklasse/Protokoll (z. B. HID, Boot Interface).
  • HID Descriptor: Verweis auf den Report Descriptor.
  • Report Descriptor: beschreibt die Struktur der Datenpakete (Reports), z. B. Tastenbits, Mausachsen, Buttons.

Der Report Descriptor ist die „Sprache“, die der PC versteht. Wenn hier Felder falsch definiert sind, sieht der PC entweder gar kein Eingabegerät oder er interpretiert die Daten falsch (z. B. springende Maus, falsche Tastencodes). Die HID 1.11 Spezifikation ist dafür die zentrale Referenz: HID 1.11 (PDF).

Keyboard vs. Mouse: Boot-Protokoll und normale Reports

Viele Tastaturen und Mäuse unterstützen das sogenannte Boot Protocol, damit sie schon im BIOS/UEFI funktionieren (z. B. beim Booten). Dafür muss das Interface im Descriptor korrekt als „Boot Keyboard“ bzw. „Boot Mouse“ gekennzeichnet werden. Für reine Anwendungsgeräte (z. B. Makropad, Spezialcontroller) reicht oft das normale HID-Protokoll. Für maximale Kompatibilität ist Boot jedoch häufig ein sinnvoller Standard.

Eigene USB-Tastatur bauen: Report-Logik verständlich umgesetzt

Eine HID-Tastatur sendet in der Regel zyklisch oder ereignisgetrieben einen Report, der die aktuell gedrückten Tasten beschreibt. Typische Inhalte:

  • Modifier-Bits: Shift, Ctrl, Alt, GUI (Windows/Command).
  • Keycodes: meist bis zu 6 gleichzeitige Tasten (6KRO) im Boot-Format.
  • Optional LEDs (Output Report): NumLock, CapsLock, ScrollLock.

Praktisch bedeutet das: Sie scannen Tasten (z. B. Matrix), entprellen sie sauber und übersetzen das Ergebnis in HID-Keycodes. Ein sauberer Entprellalgorithmus verhindert „Doppeldruck“ und erhöht die wahrgenommene Qualität stark. Besonders wichtig ist, dass Sie auch „Key Release“ korrekt senden: Eine Taste gilt erst als losgelassen, wenn sie im Report nicht mehr auftaucht.

Für eigene Tastaturen ist außerdem eine klare Zuordnung sinnvoll: Eine Tabelle „Taste → HID Keycode“ (ggf. plus Modifier) hält die Firmware wartbar, statt viele Sonderfälle in der Logik zu verstecken.

Eigene USB-Maus bauen: Achsen, Buttons und Bewegungsdaten

Eine HID-Maus sendet typischerweise:

  • Buttons: links, rechts, Mitte (optional weitere).
  • X/Y-Delta: relative Bewegung pro Report.
  • Optional Wheel: Scrollrad (Delta).

Die Bewegungswerte sind meist kleine signed Integers (z. B. -127 bis +127), die pro Report übertragen werden. Wenn Sie statt einer echten Maus z. B. einen Joystick, Encoder oder Sensor nutzen, müssen Sie diese Werte sinnvoll skalieren und begrenzen, damit die Bewegung kontrollierbar bleibt. Eine einfache Sättigungslogik (Clamping) verhindert Überläufe und „Sprünge“.

Von Eingängen zu HID: Tastenmatrix, Encoder, Sensoren sauber anbinden

HID-Projekte sind oft „mehr Hardware als USB“. Typische Eingaben:

  • Tastenmatrix: viele Tasten mit wenigen Pins, benötigt sauberes Scanning und Entprellen.
  • Drehencoder: ideal für Scroll oder Lautstärke, benötigt Interrupts oder Polling mit robustem State-Tracking.
  • IMU/Sensorik: für „Air Mouse“-Konzepte, braucht Filterung und stabile Skalierung.

Wichtig ist, die Eingabeverarbeitung und die USB-Report-Erzeugung zu trennen. Dann können Sie Eingaben testen, ohne USB zu ändern, und umgekehrt. Dieses Schichtdenken macht spätere Erweiterungen (z. B. zusätzliche Tastenlagen, Makros, Profile) deutlich einfacher.

Firmware-Architektur: So bleibt Ihr HID-Projekt wartbar

Ein robustes USB-HID-Projekt auf dem PIC18F4550 profitiert von klaren Modulen:

  • USB Stack Layer: Initialisierung, Enumeration, Endpoint-Handling.
  • HID Layer: Report-Strukturen, Report-Senden, Output-Reports (LEDs).
  • Input Layer: Tasten/Encoder/Sensoren lesen, entprellen, in interne Events umsetzen.
  • Application Logic: Mapping, Modi, Profile, Zustände.

So vermeiden Sie, dass USB-spezifische Details überall im Projekt auftauchen. Gerade bei PIC18F-Projekten, in denen RAM und Flash begrenzt sind, hilft es zudem, Datenstrukturen schlank zu halten und nur dann Reports zu senden, wenn sich der Zustand ändert (oder wenn die HID-Implementierung ein periodisches Senden verlangt).

Debugging: So finden Sie USB-HID-Fehler schnell

USB-Debugging ist am Anfang ungewohnt, lässt sich aber systematisch angehen:

  • Enumeration prüfen: Wird das Gerät erkannt? Erscheint es als HID Keyboard/Mouse?
  • Descriptoren validieren: Wenn möglich, mit Host-Tools die Descriptoren auslesen und prüfen.
  • Endpoints und Interval: Stimmen Interrupt-Endpoint und Polling-Intervall?
  • Report-Länge: Report-Größe im Descriptor muss exakt zu den gesendeten Daten passen.
  • Stromversorgung: USB-Reconnects oder „Device malfunctioned“ sind oft Versorgung/Clock/ESD/Layout.

Wenn Sie auf der PC-Seite testen, starten Sie mit simplen, reproduzierbaren Reports (z. B. nur ein Button oder ein fester Keycode) und erweitern dann Schritt für Schritt. So lokalisieren Sie Fehler deutlich schneller als mit „kompletter Tastatur sofort“.

Kompatibilität und Sicherheit: Seriös bauen, verantwortungsvoll einsetzen

HID-Geräte können Eingaben erzeugen, die der PC wie echte Tastendrücke oder Mausbewegungen interpretiert. Für legitime Projekte (eigene Tastatur, Assistive Devices, Spezialcontroller) ist das genau der Zweck. Achten Sie dabei auf:

  • Transparenz: Gerät soll sich klar identifizieren (Product String), keine irreführenden Angaben.
  • Verlässliche Bedienlogik: keine ungewollten Eingaben beim Start (z. B. „Sturm“ an Reports direkt nach Enumeration).
  • Sicherer Default-Zustand: nach Reset keine zufälligen Keycodes senden, erst nach stabiler Initialisierung.

Das ist nicht nur „gute Praxis“, sondern erhöht auch die Akzeptanz im Alltag und reduziert Fehler, die später schwer nachvollziehbar sind.

Praxis-Checkliste: USB-HID mit PIC18F4550 erfolgreich umsetzen

  • Hardware korrekt: D+/D- sauber geroutet, ESD-Schutz, stabile Versorgung, Pull-up/USB-Regler gemäß Referenz.
  • Takt korrekt: Quarz/PLL so konfiguriert, dass USB-Timing sicher eingehalten wird.
  • Descriptoren konsistent: Device/Config/Interface/HID/Report passen zusammen, Report-Längen stimmen exakt.
  • SPI/Matrix/Sensoren getrennt: Input-Layer unabhängig vom USB-Layer entwickelt und getestet.
  • Reports kontrolliert: keine ungewollten Eingaben beim Start, Zustandsänderungen sauber als Press/Release abgebildet.
  • Debug systematisch: erst Enumeration, dann Descriptoren, dann einfache Reports, dann Komplexität erhöhen.

Weiterführende Outbound-Links: Offizielle Referenzen und bewährte Beispiele

IoT-PCB-Design, Mikrocontroller-Programmierung & Firmware-Entwicklung

PCB Design • Arduino • Embedded Systems • Firmware

Ich biete professionelle Entwicklung von IoT-Hardware, einschließlich PCB-Design, Arduino- und Mikrocontroller-Programmierung sowie Firmware-Entwicklung. Die Lösungen werden zuverlässig, effizient und anwendungsorientiert umgesetzt – von der Konzeptphase bis zum funktionsfähigen Prototyp.

Diese Dienstleistung richtet sich an Unternehmen, Start-ups, Entwickler und Produktteams, die maßgeschneiderte Embedded- und IoT-Lösungen benötigen. Finden Sie mich auf Fiverr.

Leistungsumfang:

  • IoT-PCB-Design & Schaltplanerstellung

  • Leiterplattenlayout (mehrlagig, produktionstauglich)

  • Arduino- & Mikrocontroller-Programmierung (z. B. ESP32, STM32, ATmega)

  • Firmware-Entwicklung für Embedded Systems

  • Sensor- & Aktor-Integration

  • Kommunikation: Wi-Fi, Bluetooth, MQTT, I²C, SPI, UART

  • Optimierung für Leistung, Stabilität & Energieeffizienz

Lieferumfang:

  • Schaltpläne & PCB-Layouts

  • Gerber- & Produktionsdaten

  • Quellcode & Firmware

  • Dokumentation & Support zur Integration

Arbeitsweise:Strukturiert • Zuverlässig • Hardware-nah • Produktorientiert

CTA:
Planen Sie ein IoT- oder Embedded-System-Projekt?
Kontaktieren Sie mich gerne für eine technische Abstimmung oder ein unverbindliches Angebot. Finden Sie mich auf Fiverr.

 

Related Articles