Infrarood RC-5standaard Atom als infrarood ontvangen
Inleiding: Mijn zoontje heeft een bestuurbare auto met infrarood afstandsbediening waarmee hij vaak rijdt. Zo ontstond bij mij het idee om een infrarood ontvangertje te bouwen, waarmee enkele functies op afstand bestuurd kunnen worden. Ik had nog ergens een Basic Stamp van Elektuur liggen met documentatie en daarin stond een voorbeeldschakeling, met programma, voor infrarood sturing. Het idee sprak me wel aan en zodoende ben ik eens op internet gaan zoeken naar documentatie over dit onderwerp. Zoals gewoonlijk vind je hier bergen aan informatie, maar één protocol wil ik hieronder graag iets verder bespreken, nl. de RC-5 standaard van Philips
RC-5 standaard: Dit is een door Philips ontwikkeld protocol voor het standaardiseren van signalen en codes voor infrarood communicatie. In dit protocol is bv vastgelegd welke apparaten en welke functies er voor dit apparaat bestuurd kunnen worden. Een comité binnen Philips zorgt ervoor dat de RC-5 standaard regelmatig wordt uitgebreid, zodat ook de nieuwste apparatuur hiermee bestuurd kan worden.
Signalen: Het oversturen van infrarood signalen is gebaseerd op het uitzenden van pulsen met een bepaalde tijdsduur. Om interferentie met andere infrarood bestuurbare apparatuur en TV-lijn frequenties te voorkomen, heeft Philips gekozen voor een frequentie van 36 kHz. De meeste leveranciers van infrarood communicatie apparatuur werken met frequenties tussen 30 en 40 kHz.
Het oversturen van codes is gebaseerd op het versturen van logische ‘0’ en logische ‘1’ bits. Om intermodulatie met andere infrarood bronnen (o.a. lampen) te voorkomen, worden deze bits in bifase formaat verzonden. Bij deze bifase modulatie wordt een logische ‘1’ uitgezonden als een halve bittijd geen en een halve bittijd wel signaal terwijl een logische ‘0’ precies omgekeerd wordt verzonden. Een halve bittijd zijn 32 pulsjes van 36 kHz.
Even een rekensommetje:
Even een rekensommetje:
1 puls van 36 kHz duurt: | 1/36000 | = 27,8 µSec |
32 pulsen (I/2 bittijd) duurt: | 32 x 27,8 | = 888,9 µSec |
64 pulsen (I bittijd) duurt: | 64 x 27,8 | = 1778.0 µSec |
Samengevat zien een logische '0' en een logische '1' er dus als volgt uit:
Een complete RC-5 code bestaat uit 14 bits welke achter elkaar vanaf bit 0 t/m bit 13 verzonden worden.
Bitnummer |
0 |
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 |
S |
S |
T |
Amsb |
A |
A |
A |
Alsb |
C msb |
C |
C |
C |
C |
Clsb |
Start | Start | Toggle | Apparaat code | Commando code |
Hieronder staat een verklaring van de bits met hun functie:
Bitnr | Functie | Omschrijving |
0 | Startbit | Altijd '1' |
1 | Startbit | Altijd '1' |
2 | Togglebit | Hieraan kun je zien of een toets vastgehouden wordt. Wanneer een toets losgelaten wordt en daarna weer ingedrukt, dan wisselt het togglebit van status. |
3-7 | Apparaatcode | Code voor het te bedienen apparaat (0-31) |
8-13 | Commando | Code voor welke functie uitgevoerd moet worden (0-63) |
De tijd die nodig is om een RC-5 code te versturen is dus 14 x 1,778 mSec = 24,889 mSec. Daarna volgt een rusttijd van 50 bits = 50 x 1,778 = 88,889 mSec waarna de code weer opnieuw verstuurd wordt. Een complete RC-5 code wordt dus om de 113,778mSec herhaald, zolang de toets ingedrukt blijft.
Hardware:
De schakeling die gebouwd is bestaat uit een TSOP1736 welke aan de VIA van de Atom geknoopt is. In de TSOP1736 is een schakeling gebouwd om alleen 36 kHz infrarood pulsen door te laten en wel als logische ‘1’ of ‘0’. De output wordt wel geďnverteerd.
Pulsen: | |
TSOPout: | |
Het voordeel van de TSOP1736 is dat de pulstreinen meteen omgezet worden naar hoog/laag niveaus Verder zijn er diverse versies van de TSOP17xx te verkrijgen welke ieder in een bepaalde frequentiegebied werken voor de diverse leveranciers van afstandsbedieningen.
Je kunt ook nog aan de TSOP1736 een ander IC hangen wat meteen de inkomende pulsen omzet naar de juiste apparaat- en commando code en deze via een aantal datalijnen uitstuurt. Ook het togglebitje wordt apart uitgestuurd. Dit is een meer professionelere methode maar het gaat hier om het principe, krijg ik het geheel met zo min mogelijk hardware werkende!!
Schema:
Hieronder heb ik het schema getekend dat in principe niets voorsteld omdat alles in de TSOPl736 ingebouwd zit.
Software:
Ik heb 2 programma’s geschreven voor uitlezen van de RC-5 codes, een testprogramma en een programma wat onder interrupt de code inleest waardoor deze in andere programma’s te gebruiken is.
Test programma: Het principe van het uitlezen is vrij eenvoudig. Indien er geen toets op de afstandsbediening ingedrukt wordt zal het outputniveau van de TSOP 5V bedragen. Wanneer er een toets ingedrukt wordt treed er een hoog-laag niveau verandering (1e startbit) op en dit is de triggerpuls waarop het programma moet reageren. Het programma blijft dus in een wachtlus totdat een niveau verandering optreedt. Daarna wordt er 30 mSec gewacht om er zeker van te zijn dat je niet halverwege een code aan het lezen bent. Na die 30 mSec wordt na de eerste hoog-laag omschakeling om de 1778 uSec de status van de TSOP gelezen en in een 2-bytes schuifregister geplaatst. Dit gebeurt 16 keer omdat dan het schuifregister vol is en de codes bepaald kunnen worden. Het programma print nu de 14 RC-5 code bits op het scherm.
Interrupt programma: Het principe van bovenstaand test programma, heb ik toegepast om onder interrupt een RC-5 code in te lezen. De eerste hoog-laag niveau verandering genereert een interrupt waardoor naar de interrupt routine gesprongen wordt. Hier zet ik de interrupt-enable flag uit en wacht daarna 30 mSec. Dan worden er 14 bits in een 2-bytes schuifregister ingelezen en opgeslagen in 3 bytes, het Toggle-, Apparaatcode- en Commando byte. Wanneer de complete code ingelezen is wordt de interrupt-flag weer ingeschakeld en is de Atom klaar om de volgende RC-5 code te ontvangen.
Toepassingen:
Ik heb het interrupt programma geďnstalleerd en daarna het spelletje KIP zodanig omgeschreven dat deze met de RC-5 codes werkt ipv de joystick. Ik kan nu dus dit spelletje op afstand bedienen.
Je kunt ook via de codes een bepaalde uitgang van de VIA aansturen om iets in- of uit te schakelen.
Toekomst:
De bedoeling is om de TSOP in mijn Atomkast in te bouwen en wat extra commando's in een ROM te plaatsen voor de uitlezing van de RC-5 codes. De commando's kunnen zijn:
RCSINT Adres, Var1, Var2, Var3 om te bepalen waar de interruptroutine geplaatst moet worden en welke variabelen gebruikt moeten worden voor het uitlezen van het Togglebit (Var1), Apparaatcode (Var2) en Commandocode (Var3),
RC5INTON om de interruptroutine te activeren,
RC5INTOFF om de interruptroutine te deactiveren,
RCSTEST om een bitweergave van een RC-5 code te laten zien.
Tot zo ver het verhaal over de RC-5 standaard. Er is echter veel meer informatie te vinden op het internet en in Elektuur zijn ook diverse artikelen met schakelingen over dit onderwerp gepubliceerd. Groeten Kees van Oss
|