Inhaltsverzeichnis:

ATtiny85 IR USB-Empfänger - Gunook
ATtiny85 IR USB-Empfänger - Gunook

Video: ATtiny85 IR USB-Empfänger - Gunook

Video: ATtiny85 IR USB-Empfänger - Gunook
Video: ATtiny85 Relay Control with IR Remote || 2-Channel IR Remote Control System Using ATtiny85 2024, Juli
Anonim
ATtiny85 IR-USB-Empfänger
ATtiny85 IR-USB-Empfänger

WARNUNG, DIESE ANLEITUNG IST VERALTET WORDEN

Die v-usb-Bibliothek wurde entwickelt, um mit dem heute kaum noch vorhandenen USB 1.1-Protokoll zu arbeiten. Mit der Einführung von USB3 werden Sie mehr als nur Kopfschmerzen haben, wenn Sie versuchen, V-USB-Geräte zum Laufen zu bringen. Nach dem Wechsel meines Multimedia-Centers habe ich viele Stabilitätsprobleme und obwohl der Receiver funktioniert, funktioniert er nach einer Weile nicht mehr. Ich habe erfolglos versucht, es zu beheben. Ich habe auch eine atmega328p-Version erstellt, aber diese hatte die gleichen Probleme. Die Verwendung eines Watchdog-Timers zum regelmäßigen Zurücksetzen des Boards half auch nicht, also gebe ich v-usb auf.

Machen Sie sich einen Gefallen und fahren Sie nicht mit diesem instructable fort, es sei denn, es ist zu Bildungszwecken. Ich empfehle stattdessen, ein Chipmodul ATmega 32U4 zu kaufen, das die USB-Schnittstelle bereits integriert hat und dieser Anleitung zu folgen:

www.sparkfun.com/tutorials/337

Dann werfen Sie einen IR-Sensor TSOP31238 ein und Sie können loslegen.

Hallo Macher! Dies ist ein anweisbares, um einen funktionierenden USB-IR-Empfänger mit einem Attiny85-Mikrocontroller zu bauen. Ich habe dieses Projekt gestartet, um den Mangel an Unterstützung (zumindest vollständige Unterstützung) für einige IR-Fernbedienungen im GNU / Linux-Betriebssystem zu überwinden. Wenn Sie diese Anweisungen befolgen, können Sie für ein paar Dollar einen programmierbaren USB-IR-Empfänger bauen, der mit jeder IR-Fernbedienung funktioniert.

Zuallererst würde dieses instructable nicht ohne die harte Arbeit der Leute existieren, die die Bibliotheken erstellt haben, die ich hier verwende:

  • David A. Mellis für seinen Attiny-Kern
  • Rowdy Dog Software für ihre Bibliothek TinyTuner
  • Rowdy Dog Software für ihren winzigen Bootloader
  • Rancidbacon (https://rancidbacon.com/) für seinen Arduino-Port der v-usb-Bibliothek (https://code.google.com/archive/p/vusb-for-arduino/downloads)
  • seejaydee für seine IR-Bibliothek für winzige Kerne in den Kommentaren des instructable https://www.instructables.com/id/Attiny-IR-librar… Codes auf https://www.instructables.com/id/Attiny-IR -Bibliothek …

Manchmal ist es nicht einfach, den richtigen Besitzer einer Bibliothek zu finden. Falls ich einen Fehler gemacht habe, hinterlassen Sie bitte einen Kommentar und ich würde das Problem so schnell wie möglich lösen.

Dieses Handbuch existiert, weil ich kein vollständiges Tutorial / Handbuch gefunden habe, das sofort funktioniert (es könnte existieren, aber ich konnte es nicht finden), also habe ich alle im Internet verfügbaren Informationen gesammelt und nach einer guten Anzahl von Versuchen und Ich habe mir eine vollständige Anleitung zum Bau eines funktionierenden USB-IR-Empfängers ausgedacht, der eigentlich ziemlich gut funktioniert.

Die wichtigsten Informationsquellen, denen ich gefolgt bin:

  • https://nathan.chantrell.net/20121014/tinypcremot…
  • https://forum.arduino.cc/index.php?PHPSESSID=ap4jg…
  • https://blog.petrockblock.com/2012/05/19/usb-keybo…
  • https://learn.adafruit.com/using-an-infrared-libr…
  • https://codeandlife.com/2012/03/03/diy-usb-passwor…
  • https://codeandlife.com/2012/02/22/v-usb-with-atti…
  • https://www.instructables.com/id/Attiny-IR-librar…

Schritt 1: Einige Überlegungen

  • Ich besitze keinen AVR-ISP-Programmierer und ich habe keine Lust, einen zu kaufen, also habe ich einen Arduino verwendet, um den attiny85 zu programmieren
  • Ich interessiere mich nicht für ein anderes Betriebssystem als GNU/Linux, daher weiß ich nicht, ob das sonst funktionieren wird.
  • Es gibt andere IR-Bibliotheken, aber ich konnte sie nicht einmal mit einem Arduino zum Laufen bringen. Bedenken Sie jedoch, dass ich mit einem begrenzten Wissen über IR-Bibliotheken begonnen habe. Vielleicht könnte ich sie jetzt zum Laufen bringen, nachdem ich die Erfahrung gesammelt habe, mit einer ganzen Reihe von Problemen umzugehen. Wie auch immer, ich war verloren und verzweifelt, bevor ich die Bibliothek fand, die Seejaydee zur Verfügung gestellt hatte, und ich habe sie seitdem benutzt (vielen Dank, Mann!).
  • Es gibt andere Hardwarekonfigurationen, aber ich habe nur die verwendet, die 5 V verwendet, um das attiny85 und zwei 3,6 V 0,5 W Zenerdioden zum Klemmen der Spannung der Datenleitungen zu verwenden andere Konfigurationen.
  • Sie können einen 16-MHz-Kristall verwenden oder die Tinytuner-Bibliothek verwenden, um die interne Uhr Ihres attiny85 zu kalibrieren. Ich empfehle dringend die Verwendung des Kristalls, er ist viel stabiler und wird Ihnen wahrscheinlich viele Kopfschmerzen ersparen.
  • Ich verwende hier zwei verschiedene Bootloader für den attiny85:

a) Rowdy Dog Software-Version, es hat eine serielle Schnittstelle integriert, die sehr cool und sehr klein ist, so dass Sie mehr Platz für Ihr Programm und andere Bibliotheken haben. Das Problem ist, dass das USB-Gerät aus einigen Gründen, obwohl es ziemlich gut funktioniert, nach einiger Zeit getrennt wurde (Sie können die Probleme mit dem Befehl dmesg finden). Ich weiß nicht, ob dies ein Problem des Kerns oder eine gemischte Kombination aus Kern und den ausgewählten Bibliotheken ist, also habe ich mich nach einer Weile entschieden, diesen Kern zu verwenden, nur um die Fernbedienungstasten zu decodieren und die Uhr zu kalibrieren (wenn kein 16Mhz verwendet wird). Kristall). Danach brenne ich einfach den Mellis-Bootloader und lade den endgültigen Sketch hoch, der die serielle Schnittstelle nicht verwendet.

b) Mellis-Version, stabiler Bootloader, ich habe dies in vielen Projekten verwendet. Ich hätte diesen Bootloader immer verwendet, wenn er eine serielle Schnittstelle enthalten hätte. Ich verwende diesen Kern in der endgültigen Skizze, nachdem ich alle Tasten auf meinen Fernbedienungen dekodiert habe.

Schritt 2: Beginnen wir mit der Hardware

Beginnen wir mit der Hardware
Beginnen wir mit der Hardware
Beginnen wir mit der Hardware
Beginnen wir mit der Hardware
Beginnen wir mit der Hardware
Beginnen wir mit der Hardware

Werkzeuge, die Sie benötigen:

  • ein arduino-kompatibles Board
  • ein Seriell-zu-USB-Adapter zum Entschlüsseln Ihrer Fernbedienungstasten (verwenden Sie einfach einen FT232RL)
  • ein PC mit installiertem GNU/Linux und richtig konfigurierter arduino IDE, ich verwende arduino IDE 1.8.0
  • eine IR-Fernbedienung zum Testen Ihres Geräts (sogar eine beschissene, wie sie in Arduino-Starterkits zu finden ist, funktioniert)
  • ein Multimeter zum Debuggen Ihres Boards (ich hoffe, Sie werden es nicht brauchen, viel Glück!)

Die Materialliste:

  • 1 attiny85
  • 2 68R-Widerstände
  • 1 1,5K Widerstand
  • 1 4,7K Widerstand
  • 1 16-MHz-Kristall
  • 1 22pF Kondensator
  • 1 0.1uF Kondensator
  • 1 10uF Kondensator
  • 2 3,6V 0,5W Zenerdioden
  • 1 USB-Typ-A-Stecker
  • 1 Strip Pin mit 6 Pins zum Programmieren und Debuggen der Platine.
  • 1 IR-Sensor TSOP31238
  • viel Kaffee um dich wach zu halten

Bevor Sie die endgültige Platine löten, möchten Sie wahrscheinlich zu Testzwecken einen Steckbrett-Prototyp erstellen.

Um das attiny85 mit dem PC zu verbinden, verwendet das endgültige Design einen USB-Typ-A-Stecker, der in die Platine eingelötet ist, aber für den Prototyp müssen Sie ein USB-Kabel herstellen, das Sie an ein Steckbrett anschließen können:

Löten Sie in ein kleines Stück Perfboard 4 Pins, schneiden Sie dann ein altes USB-Kabel und löten Sie die Pins an 4 der Drähte im USB-Kabel:

  • rot ist VCC (5V)
  • schwarz ist GND
  • weiß ist D-
  • grün ist D+

Halten Sie alles mit Heißkleber zusammen.

Jetzt müssen wir den ISP-Programmierer (Arduino), den USB-zu-Seriell-Adapter (FT232RL) und den IR-Sensor an das attiny85 anschließen.

Sie können alle verbunden lassen, damit Sie verschiedene Bootloader brennen, Skizzen laden und die serielle Schnittstelle überprüfen können, ohne die Kabel zu wechseln.

Schließen Sie dazu alles nach dieser Anleitung an:

ISP-Programmierer (Arduino): Damit können wir Bootloader brennen und Skizzen laden

  • attiny85 PB0 (pin5) bis pin11 (MOSI) in arduino
  • attiny85 PB1 (pin6) bis pin12 (MISO) in arduino
  • attiny85 PB2 (pin7) bis pin13 (SCK) in arduino
  • attiny85 RESET (pin1) mit pullup (4.6k zu VCC) auf pin10 in arduino
  • attiny85 VCC bis 5V in arduino
  • attiny85 GND zu GND in arduino

USB-zu-Seriell-Adapter (FT232RL): Dies ermöglicht uns, den seriellen Port zu überprüfen

  • attiny85 PB0 (pin5 RX) auf TX im FT232RL
  • attiny85 PB2 (pin7 TX) an RX im FT232RL
  • attiny85 GND (pin4) auf GND am FT232RL
  • da der attiny85 bereits vom arduino mit Strom versorgt wird, müssen Sie die 5V nicht am FT232RL anschließen, ansonsten verbinden Sie: attiny85 VCC (pin8) mit 5V am FT232RL

USB-zu-Seriell-Adapter (FT232RL) nur für die Taktkalibrierung (nur für den Bootloader "ATtiny85 @ 8MHz (interner Oszillator;BOD deaktiviert)")

  • PB4 (pin3 RX) zu TX im FT232RL attiny85
  • PB3 (pin2 TX) zu RX im FT232RL attiny85
  • GND (Pin4) zu GND am FT232RL
  • da der attiny85 bereits vom arduino mit Strom versorgt wird, müssen Sie die 5V nicht am FT232RL anschließen, ansonsten verbinden Sie: attiny85 VCC (pin8) mit 5V am FT232RL

Wenn Sie einen 16-MHz-Kristall verwenden, verbinden Sie ihn mit den Attiny85-Pins PB3 (Pin2) und PB4 (Pin3) und verbinden Sie jeden Pin auch mit GND über jeweils eine 22pF-Kappe.

Filtern Sie Attiny85 VCC mit einem 0,1uF- und 10uF-Kondensator, der sie parallel zu GND. verbindet

Verbinden Sie den Ausgangspin des IR-Sensors mit dem attiny85 PB1 (Pin6) und schalten Sie ihn ein.

Erstellen und verbinden Sie die USB-Schnittstelle:

  • GND (schwarzes Kabel): Verbinden Sie es mit dem gemeinsamen GND (alle Masse sind miteinander verbunden)
  • D- (weißes Kabel) über einen 68R-Widerstand mit attiny85 PB0 (Pin5) verbunden, über einen 3,6 V 0,5 W-Zener auch mit Masse verbunden und mit einem 1,5 K-Widerstand auf VCC gezogen
  • D+ (grünes Kabel) mit PB2 über einen 68R-Widerstand verbunden, verbinden Sie es mit Masse über einen 3,6V 0,5W Zener
  • 5V, Sie können es nicht angeschlossen lassen, da zu diesem Zeitpunkt alles vom Arduino mit Strom versorgt wird, ansonsten verbinden Sie es mit dem attiny85 VCC

Die Zenerdioden sind so angeschlossen, dass die Anoden mit GND verbunden sind und die Kathoden mit den Datenleitungen D+ und D- verbunden sind.

Schritt 3: Endgültiges Design

Endgültiges Design
Endgültiges Design
Endgültiges Design
Endgültiges Design
Endgültiges Design
Endgültiges Design

Für das endgültige Design können Sie Perfboard mit Durchgangslochkomponenten verwenden oder Ihre eigene Platine ätzen und SMD-Komponenten verwenden. Um zu lernen, wie man ein Brett ätzt, googeln Sie es einfach, es gibt tolle Tutorials online.

Ich habe mein eigenes Brett geätzt und bin mit dem Endergebnis sehr zufrieden (kleines, stabiles und robustes Brett). Ja, ich weiß, dass der Schnitt scheiße ist, aber ich konnte so spät in der Nacht kein Elektrowerkzeug verwenden und ich Schneiden Sie einfach das Brett mit meiner Blechschere.

Übrigens sind die Spuren auf den Bildern kein blankes Kupfer, sie wurden mit einer bösen Chemikalie behandelt, die das Kupfer leicht verzinnt (es steht im Verdacht, Krebs zu verursachen, also mit großer Vorsicht verwenden, Latexkugeln und eine Staubmaske):

Verwenden Sie die obigen Schaltpläne, um Ihr Layout zu entwerfen, oder verwenden Sie einfach meinen PCB-Footprint, um Ihre Platine zu ätzen.

Schritt 4: Umgang mit der Software

Die Schaltung in diesem Projekt ist sehr einfach, die Software erfordert stattdessen einen größeren Aufwand.

Wir benötigen mindestens 2 Bibliotheken (eine weitere, wenn Sie keinen Kristall verwenden) plus 2 Bootloader, damit dies funktioniert. Als ich dieses Projekt startete, habe ich einige Bibliotheken getestet, manchmal funktionierten sie nicht und oft waren sie einfach nicht konfiguriert, um mit einem Attiny85 out of the box zu funktionieren (das wusste ich noch nicht). Dann habe ich Probleme mit den Bibliotheken / Bootloadern gefunden, die Interrupts überlappen. Schließlich hatte ich beim Anschließen des Endstromkreises an meinen PC eine ganze Reihe von Fehlern zu bewältigen. Ich hatte diese Anleitung jedoch nicht, also denke ich, dass es Ihnen gut gehen würde. Befolgen Sie einfach die Schritte in diesem anweisbaren, wenn Sie das tun, ohne Fehler zu machen, sollte es Ihnen gut gehen:)

Wir müssen jetzt einige Bibliotheken installieren und konfigurieren:

  • v-usb für arduino-Bibliothek: Diese Bibliothek ermöglicht es, den Mikrocontroller vom PC als HID-USB-Tastatur zu erkennen, und wir verwenden sie, um Tastenanschläge an den PC zu senden. Diese Bibliothek benötigt einige Änderungen, um mit dem attiny85 kompatibel zu sein
  • Tinytuner-Bibliothek nur, wenn Sie keinen 16-MHz-Kristall verwenden. Sie müssen dann die interne Uhr des Mikrocontrollers kalibrieren. Diese Bibliothek funktioniert out-of-the-box.
  • Attiny-IR-Bibliothek zur Interaktion mit dem IR-Sensor. Diese Bibliothek funktioniert out-of-the-box.

Wir brauchen auch 2 Bootloader:

  • Dog Software-Version, mit verfügbarer serieller Schnittstelle. Dieser Bootloader benötigt eine kleine Anpassung, um mit dem attiny85 zu arbeiten, da er den Timer1 für die Millis()-Funktion verwendet und nicht mit der IR-Bibliothek funktioniert. Wir müssen den Timer auf timer0 ändern.
  • Mellis-Version, stabiler Bootloader, den wir in der Endphase verwenden werden. Das funktioniert out-of-the-box.

Schritt 5: Installation und Konfiguration der V-USB-Bibliothek

Laden Sie die Bibliothek von https://code.google.com/archive/p/vusb-for-arduin… herunter. Entpacken Sie die Datei und kopieren Sie den Ordner library/UsbKeyboard in Ihren Sketchbook-Bibliotheken-Ordner.

Jetzt müssen Sie ein paar Dateien bearbeiten, um mit dem ATtiny85 kompatibel zu sein (es ist für die Arbeit mit Arduino konfiguriert):

A) bearbeite usbconfig.h:

unter "Hardware Config" ändern:

#define USB_CFG_IOPORTNAME Dto##define USB_CFG_IOPORTNAME B

und

#define USB_CFG_DMINUS_BIT 4to#define USB_CFG_DMINUS_BIT 0

unter "Optional Hardware Config" ändern:

#define USB_CFG_PULLUP_IOPORTNAME Dto##define USB_CFG_PULLUP_IOPORTNAME B

Um eine vollständige "boot-kompatible HID"-Spezifikation zu erstellen (sonst funktionieren keine Multimedia-Schlüssel), ändern Sie auch:

#define USB_CFG_INTERFACE_SUBCLASS 0 // Bootto#define USB_CFG_INTERFACE_SUBCLASS 0x01 // Boot

und

#define USB_CFG_INTERFACE_PROTOCOL 0 // Tastaturzu#define USB_CFG_INTERFACE_PROTOCOL 0x01 // Tastatur

Optional können Sie auch den Hersteller- und Gerätenamen in den folgenden Defines ändern:

#define USB_CFG_VENDOR_NAME

#define USB_CFG_DEVICE_NAME

B) UsbKeyboard.h bearbeiten:

Veränderung:

PORTD = 0; // TODO: Nur für USB-Pins?DDRD |= ~USBMASK;

zu

PORTB = 0; // TODO: Nur für USB-Pins?DDRB |= ~USBMASK;

Um Schlüsselcodes über 101 hinaus zuzulassen, ändern Sie auch:

0x25, 0x65, // LOGICAL_MAXIMUM (101)bis:0x25, 0xE7, // LOGICAL_MAXIMUM (231)

und

0x29, 0x65, // USAGE_MAXIMUM (Tastaturanwendung)bis:0x29, 0xE7, // USAGE_MAXIMUM (Tastaturanwendung)

Möglicherweise müssen Sie auch diese 3 Dateien bearbeiten:

usbdrv.husbdrv.cUsbKeyboard.h

und jedes Mal, wenn Sie PROGMEM sehen, fügen Sie "const" vor dem Variablentypnamen hinzu (z. B.: PROGMEN char usbHidReportDescriptor[35] ==> PROGMEM const char usbHidReportDescriptor[35])

Wenn dies nicht klar ist, besuchen Sie

Sie können all diese Änderungen vermeiden, wenn Sie einfach die angehängte Bibliothek herunterladen (ich habe alle diese Änderungen selbst vorgenommen) und sie einfach in Ihren Sketchbook-Bibliothekenordner extrahieren:

UsbKeyboard konfiguriert für attiny85

Bearbeiten: Vor kurzem habe ich festgestellt, dass sich Alejandro Leiva (https://github.com/gloob) um diese Bibliothek gekümmert hat und auch gut zu funktionieren scheint. Sie können seine Version auch mit den notwendigen Änderungen ausprobieren, die ich vorgenommen habe, damit sie mit der Attiny funktioniert. Wenn Sie dies also überprüfen möchten, extrahieren Sie sie einfach in Ihren Sketchbook-Bibliothekenordner.

UsbKeyboard konfiguriert für attiny85 (Alejandro Leiva-Version)

Schritt 6: Installation der Attiny-IR- und Tinytuner-Bibliotheken

A) Attiny-IR-Bibliothek:

Laden Sie es von https://drive.google.com/open?id=0B_w9z88wnDtFNHlq herunter… und entpacken Sie es dann in Ihren Sketchbook-Bibliotheken-Ordner.

B) Tinytuner-Bibliothek:

Dies wird nur benötigt, wenn Sie keinen 16Mhz-Kristall verwenden, aber glauben Sie mir, obwohl es auch ohne Kristall funktioniert, ist es damit viel stabiler und sie kosten ein paar Cent, also halten Sie es einfach, verwenden Sie einen Kristall und überspringen Sie diese Bibliothek.

Noch nicht überzeugt? ok, laden Sie die Bibliothek von https://storage.googleapis.com/google-code-archive herunter… und entpacken Sie sie dann in Ihren Sketchbook-Bibliothekenordner.

Wir sind mit den Bibliotheken fertig, jetzt fahren wir mit der Installation der Bootloader fort.

Schritt 7: Installation und Konfiguration der Bootloader

Wir werden zwei Bootloader installieren, der Mellis ist meiner Erfahrung nach stabiler und wir werden ihn in der endgültigen Skizze verwenden. Die andere von Rowdy Dog Software entwickelte ist ein großartiger Kern, sehr klein und mit einer integrierten seriellen Schnittstelle verfügbar, aber meine Fernbedienung ist nach einiger Zeit damit abgestürzt, also werden wir diesen Bootloader nur verwenden, um die interne Uhr von attiny85 zu kalibrieren und unsere Fernbedienung zu dekodieren Tasten.

Ich weiß, dass es verfügbare Bibliotheken gibt, um dem attiny85 serielle Fähigkeiten zu verleihen, aber dann müssen Sie die Bibliotheken optimieren, die das serielle Objekt verwenden … Mir gefällt dieses Verfahren besser.

Beginnen wir mit der Installation:

A) Mellis-Bootloader:

Öffnen Sie einfach die Arduino IDE-Einstellungen und fügen Sie die "Additional Boards Manager URLs" hinzu:

raw.githubusercontent.com/damellis/attiny/ide-1.6.x-boards-manager/package_damellis_attiny_index.json

Öffnen Sie dann den Arduino IDE Board Manager und suchen Sie nach attiny, installieren Sie die Boards von Mellis. Jetzt sollten Sie die Arduino ID der ATtiny25/45/85 und ATtiny24/44/84 Boards sehen.

B) Rowdy Dog Software winziger Bootloader:

Laden Sie den Bootloader von https://storage.googleapis.com/google-code-archive herunter…

Entpacken Sie die Datei und kopieren Sie den kleinen Ordner in Ihr Skizzenbuch / Ihre Hardware (erstellen Sie diesen Ordner, wenn er noch nicht existiert). dann in den Ordner sketchbook/hardware/tiny/avr/ wechseln und:

1) kopiere die Datei Prospective Boards.txt in die Datei board.txt

2) Bearbeiten Sie die Datei platform.txt und nehmen Sie einige Änderungen vor:

Entkommentieren Sie die Variable compiler.path und lassen Sie sie auf den Ordner hardware/tools/avr/bin/ in Ihrem arduino-Installationsordner zeigen:

compiler.path={PATH_TO_YOUR_ARDUINO_FOLDER}/hardware/tools/avr/bin/

change alsocompiler. S.flags=-c -g -assembler-with-cpptocompiler. S.flags=-c -g -x Assembler-with-cpp

Ändern Sie dann die folgenden Variablen und stellen Sie sicher, dass alles an seinem Platz ist (diese Dateien müssen vorhanden sein, sonst weisen Sie die Variablen auf die richtigen Pfade):

tools.avrdude.cmd.path={runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf

tools.avrdude.cmd.path.linux={runtime.ide.path}/hardware/tools/avr/bin/avrdude

tools.avrdude.config.path.linux={runtime.ide.path}/hardware/tools/avr/etc/avrdude.conf

3) Bearbeiten Sie die Datei cores/tiny/core_build_options.h und ändern Sie:

#define TIMER_TO_USE_FOR_MILLIS 1 bis #define TIMER_TO_USE_FOR_MILLIS 0

Dies ist sehr wichtig, da sonst der IR-Empfänger für jede Taste Nullen ausgibt. Diese Anweisung konfiguriert den Timer0 für die Funktion millis() und lässt den Timer1 für die IR-Bibliothek verfügbar. Die letzte Skizze deaktiviert den Timer0 sowieso, sodass Sie weder die Funktionen millis () noch delay () zur Verfügung haben. Möglicherweise steht Ihnen stattdessen die Funktion delayMicroseconds() zur Verfügung.

Dieser Bootloader ist minimal, hat aber Unterstützung für serielle Objekte:

Attiny85 PB2 (Pin7) ist TX und PB0 (Pin5) ist RX

Sie können eine Konfiguration mit dem ISP-Programmierer (arduino) und dem gleichzeitig angeschlossenen Seriell-zu-USB-Adapter haben, damit Sie die Kabel nicht zu oft wechseln müssen:

Jetzt haben wir sowohl die Bibliotheken als auch die Bootloader installiert und richtig konfiguriert, die härteste Arbeit ist abgeschlossen und wir können mit dem Testen beginnen.

Schritt 8: Bootloader brennen und Skizzen hochladen

Ich empfehle dringend, die ausführliche Ausgabe unter den Arduino-IDE-Einstellungen zu aktivieren, damit Sie eventuelle Probleme herausfinden können.

Um einen Bootloader in den Attiny85 zu brennen, müssen Sie das ISP-Beispiel auf den Arduino hochladen und dann den Programmierer Arduino als ISP auswählen.

Platzieren Sie nun einen 10uF-Kondensator zwischen den Reset- und Massepins auf dem Arduino (er wird nicht für den Brennvorgang benötigt, aber er dient zum Hochladen von Skizzen auf den attiny85).

Jetzt ist das Arduino bereit, Bootloader zu brennen und Skizzen zu laden. Sie müssen nur das richtige Board auswählen, das mit Ihrer Attiny kompatibel ist, und es brennen.

Um eine Skizze in den Attiny85 zu laden, laden Sie sie in die Arduino-IDE und klicken Sie auf "Mit Programmierer hochladen".

WICHTIG: Beim Hochladen der Skizze gibt es 3 Schritte, Kompilieren, Schreiben und Verifizieren. Wenn das Kompilieren und Schreiben erfolgreich funktioniert hat, der Überprüfungsprozess jedoch fehlschlägt, ist es möglich, dass die Skizze trotzdem funktioniert.

Schritt 9: Kalibrieren Sie die interne Uhr des Attiny85 (überspringen Sie dies, wenn Sie einen Quarz verwenden)

Falls Sie sich entscheiden, den 16-MHz-Quarz nicht zu verwenden, müssen Sie Ihren attiny85-Takt kalibrieren. Daher benötigen wir einen Bootloader mit einer verfügbaren seriellen Schnittstelle und verwenden die Tinytuner-Bibliothek, um die richtige Kalibrierung zu erhalten.

Folgen Sie den nächsten Schritten

  • Wählen Sie unter Tools den Arduino als ISP-Programmierer aus
  • wähle die Platine "ATtiny85 @ 8MHz (interner Oszillator;BOD deaktiviert)"
  • Ich gehe davon aus, dass Sie die ISP-Verbindung wie beschrieben bereit haben, bevor Sie die Verbindung herstellen, ansonsten führen Sie die Verbindungen aus
  • Bootloader brennen
  • dieser Bootloader hat verschiedene Pins für die serielle Schnittstelle konfiguriert, verwenden Sie diese Konfiguration nur für den aktuellen Bootloader

- PB4 (pin3 RX) auf TX im FT232RL attiny85 - PB3 (pin2 TX) auf RX im FT232RL attiny85 - GND (pin4) auf GND auf dem FT232RL da der attiny85 bereits vom arduino mit Strom versorgt wird, müssen Sie nicht anschließen die 5V am FT232RL, sonst verbinden: attiny85 VCC (pin8) an 5V am FT232RL

  • Laden Sie das Tinytuner-Beispiel auf die attiny85 hoch
  • Öffnen Sie das Bildschirmprogramm, um die serielle Kommunikation zu überwachen: screen /dev/ttyUSB0 9600
  • Setzen Sie den attiny85 zurück, indem Sie den RESET-Pin (Pin1) mit GND verbinden (nur einen Moment). Eine Willkommensnachricht sollte auf dem Bildschirmfenster angezeigt werden
  • Senden Sie weiterhin einzelne 'x'-Zeichen (kein Wagenrücklauf; kein Zeilenvorschub), bis die Kalibrierung abgeschlossen ist
  • notieren Sie irgendwo den Wert der Kalibrierung (OSCCAL = 0x). Dies ist der Wert, den Sie in den endgültigen Skizzen angeben müssen

Schritt 10: Decodieren Sie Ihre Fernbedienungstasten

Jetzt ist es an der Zeit, unsere Fernbedienungstasten zu entschlüsseln und sie bestimmten Tastenanschlägen im PC zuzuweisen, dazu folgen Sie den nächsten Schritten:

  • wähle die Platine "ATtiny85 @ 16MHz (interner PLL;4.3V BOD)" wenn du keinen Quarz verwendest, "ATtiny85 @ 16MHz (externer Quarz; 4.3V BOD" andernfalls, dann brenne es)
  • lade die Skizze:
  • Wenn Sie keinen Quarz verwenden, kommentieren Sie die Zeile, die die Variable OSCCAL enthält, und weisen Sie sie dem Wert zu, den Sie bei der Kalibrierung der Uhr gefunden haben
  • Ich gehe davon aus, dass der Sensor wie zuvor beschrieben angeschlossen ist, ansonsten anschließen
  • Ich gehe auch davon aus, dass der FT232RL Seriell-zu-USB-Adapter angeschlossen ist, ansonsten schließen Sie ihn an
  • Setzen Sie den attiny85 zurück, indem Sie den RESET-Pin (Pin1) mit GND verbinden (nur einen Moment)
  • Drücken Sie wiederholt die Tasten Ihrer Fernbedienung und checken Sie das Bildschirmfenster aus. Sie müssen die letzte Zahl für jeden Datensatz mit Anmerkungen versehen, jede Taste kann 2 verschiedene Zahlen erzeugen

Beispiel:

ERHALTEN D44 3396ERHALTEN 544 1348

Kommentieren Sie 3396 und 1348 in Verbindung mit der Schaltfläche, die Sie gerade gedrückt haben, dann müssen Sie entscheiden, was Sie mit dieser Schaltfläche tun möchten. Zum Beispiel könnte ich möchten, dass diese Schaltfläche den Multimedia-Keycode "Lautstärke erhöhen" sendet, dann muss ich die ID für diesen Keycode finden. Laden Sie dazu das PDF herunter:

Achten Sie auf den Abschnitt „Tastatur-/Tastaturseite“Seite 53 und verwenden Sie die Zahlen in der Spalte Nutzungs-ID (Dez), um Ihre Fernbedienungstasten mit Tastaturcodes zu verknüpfen. In unserem Beispiel sehen wir, dass der Tastencode für "Lautstärke lauter" lautet: 128.

Bearbeiten Sie die Datei UsbKeyboard.h in der UsbKeyboard-Bibliothek aus dem v-usb-Paket, das wir zuvor installiert haben, und fügen Sie es zu den vorhandenen Defines hinzu, falls es noch nicht vorhanden ist:

#define KEY_VOL_UP 128

Wenn wir mit all unseren Fernbedienungstasten fertig sind und alle Definitionen in der Datei UsbKeyboard.h fertig sind, können wir zum letzten Schritt übergehen.

Schritt 11: Laden Sie die endgültige Skizze und hoffen Sie auf das Beste

Laden Sie die endgültige Skizze und hoffen Sie auf das Beste!
Laden Sie die endgültige Skizze und hoffen Sie auf das Beste!
Laden Sie die endgültige Skizze und hoffen Sie auf das Beste!
Laden Sie die endgültige Skizze und hoffen Sie auf das Beste!

Wir haben jetzt alle Fernbedienungstasten dekodiert, die Datei UsbKeyboard.h ist mit unseren Tastencodes gefüllt, sodass wir jetzt die endgültige Skizze in die Arduino-IDE laden können:

github.com/venumz/ATtiny85-USB-IR-Empfänger…

Diese Datei ist die genaue Datei, die ich für meinen Receiver verwende, und sie funktioniert für 2 verschiedene Fernbedienungen. Sie müssen sie also eindeutig aktualisieren, um mit Ihrer/n Fernbedienung/en zu arbeiten.

Wenn Sie keinen Quarz verwenden, kommentieren Sie die Zeile, die die Variable OSCCAL enthält, und weisen Sie sie dem Wert zu, den Sie bei der Kalibrierung der Uhr gefunden haben

Beachten Sie, dass es in der Schleifenfunktion viele Anweisungen wie diese gibt:

if(results.value==3405 || results.value==1357) { // Pfeil nach oben

if(lastStroke!=results.value) UsbKeyboard.sendKeyStroke(KEY_ARROW_UP);

}

Sie müssen Ihre eigenen Anweisungen erstellen, eine pro Taste in Ihrer Fernbedienung. In der Bedingung "if" müssen Sie in results.value die Werte eingeben, die Sie beim Decodieren Ihrer Fernbedienung gefunden haben, und als Argument der UsbKeyboard.sendKeyStroke-Methode müssen Sie einen der bereits definierten Tastencodes in die Datei UsbKeyboard.h einfügen.

Die Bedingung " if(lastStroke!=results.value) " wird benötigt, da einige Remotes den gleichen Code zweimal pro Treffer senden und dies den zweiten Treffer verhindert. Ich bin mir nicht ganz sicher und es kann von dem IR-Protokoll abhängen, das in Ihre Fernbedienung programmiert wurde (ich bin nicht wirklich ein Experte für IR-Protokolle), aber nach meiner Erfahrung mit meinen eigenen Fernbedienungen kann jede Taste 2 verschiedene Codes erzeugen und Während Sie die Taste gedrückt halten, wird derselbe Code gesendet, aber wenn Sie die Taste erneut drücken, wird der andere gesendet. Es scheint also, dass die Codes auf alternative Weise gesendet werden, ich denke, es ist ein Standardmodus, um zu wissen, wie oft Sie die Taste wirklich drücken.

Ok, wir sind fast fertig, laden Sie einfach die endgültige Skizze hoch, schließen Sie sie an den PC an und sehen Sie, wie es läuft.

Für diesen Schritt ist es besser, wenn Sie sowohl den Arduino als auch den USB-Seriell-Adapter trennen und erst dann den USB an Ihren PC-Port anschließen (falls etwas schief geht, ist Ihre Schaltung einfacher zu debuggen).

Wenn alles gut funktioniert hat, sollten Sie beim Öffnen eines Terminals und Senden des dmesg-Befehls etwas Ähnliches wie das erste Bild in diesem Schritt sehen. Wenn es Probleme gab, sollten Fehler wie die im zweiten Bild gefunden werden und Sie müssen mit dem Debuggen Ihrer Schaltung und/oder der Software beginnen. Eine der anfänglichen Fehler, die ich hatte, war ein USB-Hub, der nicht mit meinem IR-Empfänger funktionierte (andere funktionierten jedoch) … daher ist es für diesen letzten Schritt besser, den IR-Empfänger direkt an Ihren PC-Port anzuschließen. Eventuelle Fehler könnten schwer zu finden sein, aber am Ende würden Sie wie ich viel lernen und der Preis ist es wert, das versichere ich Ihnen.

Das ist alles Leute, lassen Sie es mich wissen, wenn Sie Fehler in diesem anweisbaren bemerken und Ihren brandneuen IR-USB-Empfänger genießen!

Empfohlen: