How-to: USB-afstandsbediening Receiver

Nu luisteren we naar MP3’s, evenals weergave XVIDS of X264S, een computer is het genotcentrum in ten minste één ruimte van vele huizen. Tenzij u echter een speciale HTPC hebt, zit u echter waarschijnlijk vast met het toetsenbord om te pauzeren, modificeren van het volume, evenals snel vooruit door hinderlijke mythbusters Recraps. PC Afstandsbedieningsontvangers Variatering van oude seriële poortontwerpen (die er een heeft?) Naar USB-apparaten die niet worden ondersteund door prominente software. In deze how-to styleen we een USB-infraroodontvanger die een typisch protocol imiteert dat wordt ondersteund door software voor Windows, Linux, evenals Mac. We hebben een volledige gids voor het protocol plus schema’s en een onderdelenlijst.

Ontwerpoverzicht

Afstandsbedieningen zenden gegevens over een gemoduleerde infraroodbundel. Een infraroodontvanger IC scheidt de gemoduleerde balk in een schone stroom van 0s en 1s. De datastroom wordt gedecodeerd door een microcontroller, evenals verzonden naar een computer via een USB-verbinding. Software verwerkt de codes en triggert acties op de computer.

Achtergrond

Computer infraroodontvangers

De oudste pc-infrarood-ontvangerstijl maakt gebruik van een ontvanger IC om een ​​seriële poortspeld te schakelen, meestal DCD. Deze stijl is waarschijnlijk voortgekomen op Usenet, evenals het is nog steeds de meest prominente op het web: Engadget, instructies, enz. Deze zijn geen echte seriële apparaten omdat ze geen gegevens naar de pc verzenden. In plaats daarvan peult een computerprogrammapulten op de seriële poort en demoduleert het signaal. Dit is een zeer gemakkelijk ontwerp, maar het hangt echter af van directe interrupt krijgen toegang tot evenals timing precisie die niet langer in Windows wordt aangeboden. Linux of Mac-gebruikers kunnen deze ontvanger proberen, als u nog steeds een seriële poort hebt. We konden dit type ontvanger niet krijgen om met de seriële poort te werken op een hedendaagse Windows XP-pc, evenals verwacht niet dat de nauwkeurige timing om door een USB-> seriële converter te overbrengen.

Sommige veel geavanceerdere infraroodontvangers zijn echte seriële poortapparaten die bepalen of decoderen van infraroodsignalen voordat ze gegevens naar de computer verzenden. De UIR / IRMAN en UIR2 integreren een traditionele afbeelding 16F84, maar leveren echter geen firmware en / of broncode. Deze apparaten zouden indien nodig op een eigentijdse computer moeten werken, via een USB-> -seriële converter. De usbtiny en USBIRBOY zijn inheemse USB-apparaten, maar hebben echter geen brede ondersteuning.

Ontvanger Software

Ongeacht het type ontvanger, heeft de computer een programma nodig om te luisteren naar inkomende opdrachten op afstand en converteren ze naar acties op de computer. Linux en Mac-gebruikers hebben LRRC, die veel verschillende ontvangertypen ondersteunt. Windows-gebruikers zijn een beetje minder fortuinlijk. WINLIRC is een verlaten Windows-haven van LRRC voor eenvoudige onderbreekbare seriële havenontvangers; WinLirc is in 2003 voor het laatst ontwikkeld. De balder was oorspronkelijk een freeware PC Automation-hulpprogramma, maar is uiteindelijk duurzamer met een proefperiode van 30 dagen. Gelukkig wordt de laatste freeware-versie van Girder (3.2.9b) nog steeds aangeboden voor download.

Werken met IR-externe protocollen

Het decoderen van IR-signalen

Afstandsbedieningen coderen commando’s in de afstand of timing van een 38kHz provider Pulse, [San Bergmans] heeft een uitleg van de betrokken opdrachtgevers. Een infraroodontvanger IC scheidt de datastroom van de koerier. Onze taak is om de gegevensstroom te decoderen met een microcontroller. Er zijn tientallen afstandsbedieningsprotocollen, hoe Phillips RC5 echter wijdverspreid is, evenals typisch gebruikt door hobbyisten.

RC5 is stroom van 14 gelijke lengte-stukjes van precies 1.778ms per beetje tijd. Een puls gedurende de eerste helft van de bit-tijd vertegenwoordigt 0, een puls in de tweede helft staat voor 1. Dit plan wordt Manchester-codering genoemd.

We hebben een logische analysator gebruikt om de uitvoer van een Happaak Wintv-afstandsbediening, een bekende RC5-afstandsbediening te bekijken. Het diagram toont twee persen van de 1-knop, evenals twee persen van de 2-knop; Merk op dat de uitvoer is ingericht en de codering van Manchester is achteruit van de bovenstaande beschrijving.

De allereerste twee bits tijden zijn startbits, gevolgd door een toggle bit. De toggle bit inverses telkens wanneer een knop wordt ingedrukt, zodat de ontvanger het verschil kan zien tussen een hold en een herhaalde pers. De volgende 5 bits zijn het adres (0B11110 = 0x1E), gevolgd door de opdracht (0B000001 = 0x01, 0B000010 = 0x02). Een achterwaartse compatibele uitbreiding van RC5 maakt gebruik van het tweede startbit als opdrachtbit 7.

Vertegenwoordigen van externe codes op de computer

Kijkend naar eerdere ontwerpen, zagen we drie algemene methoden voor het communiceren van externe opdrachten op een computer:

Protocol Inzondere ontvangers decoderen één protocol, evenals verdere gedecodeerde opdrachten naar de pc

A a lot more general type of receiver steps the timing as well as spacing of each pulse as well as sends the full waveform to the PC for analysis.

Sommige ontvangers produceren een afzonderlijke hash voor een signaal, maar bevatten echter niet echt voldoende gegevens om de golfvorm volledig opnieuw te maken.

Terwijl onze voorkeur gaat naar de algemene hash-methode, gebruikt onze enige afstandsbediening RC5 alsevenals het veel fascinerend was om een ​​RC5-decoder te ontwikkelen. We leggen wijzigingen uit voor een veel meer algemene versie in het gedeelte Firmware.

Computer Interface-protocol

We wilden onze eigen receiver-software of stuurprogramma niet schrijven, dus we hebben gezocht naar een bestaand, goed erkend communicatieprotocol om te imiteren. De UIR / IRMAN / IRA / CTINFRA / HOLLYWOOD + -type-ontvanger wordt ondersteund door ligger en LRIC, evenals gebruikt een eenvoudig serieel protocol met handshake:

De gadget wordt geïnitialiseerd door de DTS en de DTR-pinnen van de seriële poort. We hebben deze niet zo goed als niet schelen.

De computer verzendt “IR”, met een optionele vertraging. De gadget antwoordt “OK”. We sturen gewoon “OK” op elke “R”

Afstandsbedieningscodes worden verzonden als een onderscheidende zes byte hash. We zullen een RC5-signaal decoderen en de werkelijke waarden verzenden, maar een generieke hash kan in plaats daarvan worden gebruikt.

Dit protocol is voor een serieel poortapparaat, maar onze USB-ontvanger verschijnt als een virtuele seriële poort en het programma zal het verschil niet begrijpen.

Hardware

Klik hier voor een schematisch formaat van de volledige grootte (PNG). Onze ontvanger is gebaseerd op een USB-ingeschakelde afbeelding 18F2455 microcontroller, de kleinere, minder dure versie van de 18F2550. Het 18F-huishouden is programmeerbaar met de Hobbyistische programmeurs die de voorkeur hebben als een diode wordt gebruikt om VPP te verkleinen tot een risicovrij niveau. De afbeelding krijgt één ontkoppelingscondensator (C1), evenals een diode (D1) en weerstand (R1) op de ICSP-programmeerkop. We hebben de seriële poort op een pin-header blootgesteld voor foutopsporing of een gemengde USB / seriële poortversie met behulp van een MAX RS232-transceiver IC.

Het USB-perifeer vereist een buitenklok van 20 MHz (Q1, CA 5,6), evenals een .220uf-condensator. We hebben de condensator vervalst met behulp van 2 x .1uf ontkoppelingcondensatoren (C2,3). Een 3 mm LED (LED1) evenals een 330ohm aanwezige beperkende weerstand (R2) Toon de USB-aansluitstatus.

We gebruikten een TSOP-1738 infraroodontvanger IC die oproept voor een 4.7UF-ontkoppelingscondensator (C4). Als u dit specifieke IC niet kunt ontdekken, merkte elk type ontvanger dat hier wordt vermeld. De output TSOP-1738 is het omgekeerde van het ontvangen signaal, het trekt naar de grond wanneer een puls wordt gedetecteerd, dus een pull-upweerstand (R3) houdt de pin hoog wanneer er geen signaal aanwezig is. Controleer of u een andere ontvanger gebruikt, mag u een pull-downweerstand gebruiken en de manchester decodering routine in de firmware ongedaan maken.

Het circuit trekt stroom vanuit de USB-bus, dus we vereisen geen extra stroomvoorziening.

Onderdelen lijst

Klik hier voor een plaatsingschema op volledig formaat (PNG). De PCB-stijl is 100% door-gat evenals enkelzijdig. De schematische en PCB werden gemaakt met Cadsoft Eagle, freeware-versies worden voor veel platforms aangeboden. Alle bestanden zijn opgenomen in het baanarchief (ZIP).

Een deel

Beschrijving

IC1

PIC 18F2455

28 PIN .300 Socket

C1,2,3

0.1UF-condensator

C4

4.7UF-condensator

C 5,6

27PF-condensator (15PF kan beter zijn)

D1

1N4181 Diode

Q1

20 MHz Crystal

R1,3

10k ohm weerstand

R2

330 ohm weerstand

Tsop

Tsop1738 (verouderd, probeer tsop1138)

USB

USB ‘B’ Plug, vrouw

Ser

.1 “PIN-header

ICSP

.1 “PIN-header

Firmware

De firmware is in C geschreven met behulp van de gratis presentatie C18-compiler van Microchip. Firmware en bron zijn opgenomen in het werkarchief (ZIP).

We gebruikten versie 2.3 van de USB-stapel van Microchip om een ​​USB-seriële poort te produceren met behulp van de standaard chauffeurs die al op veel systemen worden aangeboden. De USB-stapel heeft eenvoudige functies om de USB-gadget op te nemen, evenals overdrachtsgegevens tussen gadget en host. Het duurde slechts een paar pincodes om de CDC-presentatie te krijgen die aan onze op maat gemaakte hardware werkt.

Onze implementatie van het UIR / IRMAN / IRA / CTINFRA / HOLLYWOOD + -protocol reageert eenvoudigweg op de letter ‘R’ met ‘OK’. Dit zou moeten voldoen aan de handshake-vereisten van elk type implementatie van dit protocol.

We kozen ervoor om specifiek RC5 (en RC5X) te decoderen, omdat het een veel gebruikt protocol is, evenals het enige type afstandsbediening waarmee we moeten werken. Veel van de decodering gebeurt in de interrupt-handler:

De zeer eerste signaalmodificatie triggert een interrupt die een 889US (een halve bitperiode) timer start.

Op elke timer-onderbreking wordt de helft van een gecodeerd bit van Manchester bemonsterd.

Elke andere onderbreking van de metingen worden vergeleken, evenals de bitwaarde wordt berekend om 0, 1 of een fout te zijn. Fouten resetten de decoderingsroutering.

Aan het einde van elke transmissie worden het adres en de opdrachtbytes gedecodeerd, evenals verzonden naar de host met 4 buffer bytes (0). We gooien het toggle bit weg, omdat het de pc-software zou verwarren om te denken dat elke andere pers een aparte code was. We voegen het tweede startbit toe aan het opdrachtbit voor de naleving van RC5X; Dit voegt slechts 0x40 toe aan niet-RC5X-codes.

Er kan veel meer algemene versie worden gemaakt door de Manchester-coderingsstap (3) te verwijderen, evenals het verzenden van 48 monsterbits (alle 6 bytes) naar de computer.

De USB-infraroodontvanger installeren

De meeste besturingssystemen hebben al chauffeurs die een ondersteunenVirtuele seriële poortgadget zoals de ontvanger. Windows XP heeft de vereiste stuurprogramma’s, maar behoeften helpen bij een .inf-gegevens om ze op de juiste manier te associëren met ons apparaat.

Windows toont het dialoogvenster Nieuwe hardware de allereerste keer dat u de ontvanger aansluit. Selecteer om een ​​op maat gemaakte automobilist te gebruiken en op de .inf-gegevens opgenomen in het taakarchief (ZIP). Dit koppelt de gadget aan op een automobilist die al in Windows is opgenomen, en voegt de ontvanger als een COM-poort toe. U kunt het COM-poortnummer in het bedieningspaneel controleren.

Mac evenals Linux-gebruikers kunnen de ontvanger met LIRC gebruiken, maar Windows-gebruikers zullen worden geconfronteerd met de optie van de oude, freeware-ligger of de nieuwe versie van 30 dagen. We gebruikten de freeware-versie van ligger, maar ik hoop dat jullie mannen een geweldige, open source kunnen voorstellen, alternatief dat we over het hoofd zien.

Ongeacht de Computer-Side Control-software die u gebruikt, configureert u deze voor een UIR / IRMAN / IRA / CTINFRA / HOLLYWOOD + -ontvanger, evenals in het COM-poort of het seriële adres dat eraan is toegewezen. Onze ontvanger is eveneens compatibel met elk type protocol-opties zoals ‘Fast Uir Init’, evenals ‘Skip Uir Init Check’, die het “IR” -> “OK” -handshake “kwijtraakt of weggaat. Test nu de ontvanger en voeg een afstandsbediening toe volgens de documentatie voor uw software.

Handmatige terminalinterface en foutopsporing

Als u een probleem hebt met de ontvanger, of u bent gewoon nieuwsgierig, probeer dan het uit een seriële terminal te maken. We houden echt van de seriële terminal op Hercules. Stel de juiste COM-poort in, maar de snelheid en de configuratie-instellingen worden genegeerd door het USB-seriële poortdriver.

Een financiering ‘r’ zal tijdig de ontvanger om ‘OK’ te antwoorden. RC5-codes worden geretourneerd als onbewerkte bytes, dus zorg ervoor dat u uw terminal instelt om HEX-waarden te tonen in plaats van deze als ASCII-tekst te vertalen. De allereerste byte is de RC5-adres byte (0x1e), gevolgd door de opdracht byte (0x41), evenals vervolgens vier buffer 0s om zich te houden aan het UIR / IRMAN-protocol. De afbeelding toont de handshake, evenals de uitvoer van een korte druk op de 1,2, evenals 3 knoppen.

Een gratis hulpprogramma genaamd Portmon Logs COM-poortactiviteit voor beoordeling. Dit is handig voor het bespioneren van bestaande receiverprotocollen, evenals het debuggen van de interactie van onze op maat gemaakte hardware en gesloten / gepatenteerde software. De afbeelding toont ligger die de initialisatiestring ‘IR’ (0x49,0x52) verzendt, evenals het antwoord van de ontvanger ‘OK’ (0x4f, 0x4b).

Het verder brengen

Onze RC5X-compatibele ontvanger volgt een veel gebruikt interfaceprotocol. Er is een hoop mogelijkheden voor extra functies in een open source infraroodontvanger:

Ondersteuning van alle afstandsbedieningen via een generieke hash-generator, zoals de originele UIR / IRMAN-hardware.

Voeg extra externe protocol-decoders toe, zoals RC6.

Ondersteuning van meerdere, configureerbare interfaceprotocollen.

Implementeer de seriële poort I / O.

Bewaar configuratie-opties in EEPROM, inclusief protocol, interfacemodus, timingopties, seriële poort, enz.