De Universal Remote Switch Box is een universele afstandsbedieningsontvanger, voorzien van 16 opencollector uitgangen. Deze kunnen ingesteld worden als puls- of omschakel-uitgang. Daarnaast is er ook een master/slave functie ingebouwd. De Universal Remote Switch Box is geïnspireerd op ‘Lekker lui voor de buis’ uit de Elektuur Halfgeleidergids van 2006 (blz. 116). Deze schakeling heeft echter slechts 4 uitgangen en accepteert alleen RC5-codes. Om deze laatste beperking op te heffen, is de firmware van de hier beschreven schakeling gebaseerd op de ‘Universal Infrared Receiver’ (UIR), waarmee hij geschikt is voor alle
afstandsbedieningen.
Hoe het begon
Een aantal jaren geleden wilde ik een IR-ontvanger voor mijn pc bouwen. Na eerst de ontvanger van Holger Klabunde te hebben nagebouwd, waarvan de software me erg tegenviel, ben ik na lang zoeken de
UIR tegengekomen op de website van Srdan Milostic (nu niet meer online). De hardware was vrijwel hetzelfde, alleen kon de UIR overweg met alle soorten afstandsbedieningen. Na het vervangen van de PIC had ik een goede IR-ontvanger voor mijn pc. Later kreeg ik het idee om de UIR te
koppelen met een tweede microcontroller en hiermee een besturing te maken buiten de pc om. Maar twee controllers, dat was toch wel wat veel
van het goede. En omdat alleen de HEX-code beschikbaar was, heb ik de
originele code omgezet in assembler. Om deze assembler code heen heb ik
vervolgens een extra schil gebouwd. En hiermee was de Universal Remote
Switch Box geboren.
Het schema
De hardware is rechttoe rechtaan:
• een TSOP1736 ontvangt en demoduleert de IR-signalen
• via een dipswitch en drie druktoetsen kan de schakeling verschillende codes leren
• drie (tweekleuren) LED’s worden gebruikt als statusdisplay
• er zijn twee ULN2803 uitgangsdrivers voor het sturen van de uitgangen
• een LTC485 (of vergelijkbaar) is ingezet voor de RS485-poort
• en het brein van het geheel is de PIC16F877.
Over het schema valt niet zoveel meer te vertellen, behalve dat de uitgangsdrivers rechtstreeks relais kunnen schakelen. Het ‘leren’ van verschillende IR-signalen en de RS485-verbinding worden verderop toegelicht. Om de PCB compact te houden, zijn er een aantal SMD’s gebruikt. Dit zijn echter standaard onderdelen. De PCB is enkelzijdig. Hierdoor zijn er wel twee draadbruggen nodig.
De firmware
Wanneer de schakeling een signaal van een afstandsbediening ontvangt,
wordt dit met behulp van de software uit de UIR gedecodeerd naar een
48 bits code. Deze wordt via subroutine RECEIVED_CMD, die controleert of het om een echte instructieontvangst gaat, vergeleken met de codes die in de EEPROM zijn opgeslagen. Indien er een geldige code gevonden is, wordt de bijbehorende uitgang aangestuurd. Tegelijkertijd wordt ook Timer1 op nul gezet. Deze genereert na ongeveer 262 ms een interrupt, waardoor de pulsuitgang(en) en een blokkeervlag uitgezet worden.
Er zit nog een eigenaardigheid in de firmware, die veroorzaakt wordt door
de hardware: de laatste vier uitgangen zijn niet op volgorde aangesloten op de microcontroller. Daarnaast zijn de andere uitgangen andersom bedraad. Dit is in de software gecorrigeerd met een vertaaltabel (PORT_CONV). De vier configuratiebytes voor het uitgangstype (TOGGLE 1/2 en MASTER 1/2) moeten dus ook in deze volgorde staan. Dit wordt gecorrigeerd in de pc-software. Dankzij deze aanpassingen zitten de uitgangen toch op volgorde. De EEPROM is 256 bytes groot. Hiervan worden 192 bytes gebruikt voor de codes (per uitgang kunnen er twee
codes geprogrammeerd worden) plus vier bytes voor de uitgangsconfiguratie. Het uitgangsnummer wordt ook via de RS485-poort verstuurd. Om precies te zijn: deze poort stuurt zelfs alle 32 mogelijke codes apart door. Daarnaast kan via de seriële verbinding ook de
configuratie verstuurd worden van en naar een pc, zodat het programmeren wat gemakkelijker wordt (zie verder onder ‘Pc-software’).
De seriële verbinding werkt met de instellingen 9600 Baud, geen pariteit, 8 databits, 1 stopbit (9600-N-8-1). Het protocol is als volgt:
– 0xFF (startbyte)
– 0x40 + uitgangsnummer
– 0xFE (stopbyte)
De RS485-driver is altijd actief, behalve in de edit-mode. Dit is dus normaal alleen een uitgang. Voor toekomstige mogelijkheden zijn de RX- en TX-pennen al verbonden met RC6 en RC7 van de microcontroller.
De programeermode
Normaal lichten de buitenste LED’s groen. Bij ontvangst van een geldige code flitst de middelste LED kort (5 ms) rood op. Bij een ongeldige code gaan de buitenste LED´s even uit, maar dit is nauwelijks zichtbaar (1 ms); deze tijden zijn bewust zo kort gekozen in verband met de ontvangstroutine. Het programmeren (of ‘leren’) wordt gestart door op de linker knop te drukken, de linker LED licht rood op. Bij ontvangst flitst de middelste LED even groen op. Indien er twee keer dezelfde code is ontvangen, lichten de twee linkse LED’s groen op en wordt er niet meer ontvangen. Met de rechter toets kan deze code opgeslagen worden in
het RAM, met de linker toets kan er een nieuwe poging gedaan worden. Bij foutieve ontvangst (niet twee maal dezelfde code) flitsen de tweede LED kort groen en de derde LED kort rood op. Per uitgang kunnen er twee UIR-codes opgeslagen worden. Iedere code wordt weergegeven als een 12-cijferig hexadecimaal nummer (6 bytes). Bij het opslaan van de code met de rechter toets zal de dipswitch gebruikt worden voor het uitgangsnummer. De dipswitch kan ook vervangen worden door een draai-model (zie foto), zodat er gemakkelijk overgeschakeld kan
worden naar de volgende uitgang. De vijfde schakelaar van de dipswitch
(op de foto een jumper) selecteert het tweede blok van 16 codes. Het verlaten van de programmeermode gebeurt met de middelste drukknop. Pas dan worden alle codes in de EEPROM weggeschreven.
De edit-mode
Met een druk op de rechter knop komen we in de edit-mode. Dit wordt kenbaar gemaakt door het rood branden van de rechter LED. In deze mode is het mogelijk om een code te verwijderen. Dit gebeurt door het gelijktijdig indrukken van de linker en rechter knop. Als bevestiging licht de middelste LED kort rood op. Het uitgangnummer wordt weer bepaald door de dipswitch. Het verlaten van de edit-mode gebeurt ook weer met de middelste toets. Ook in deze mode worden wijzigingen pas bij het verlaten de mode opgeslagen in de EEPROM.
PC-software
In de edit-mode wordt er ook naar de RS485-poort geluisterd (normaal is dit zoals gezegd alleen een uitgang). In deze mode is het mogelijk om de confguratie uit te lezen en te wijzigen. Deze configuratie kan opgeslagen
worden als .ini-bestand. Een dergelijk ‘back-up’ bestand kan ook worden
ingeladen. Bij het opstarten van het pc-programma wordt er gekeken of de poorten COM1 t/m COM16 bestaan. Het resultaat wordt in een combobox geplaatst, waarna de eerste beschikbare poort wordt geopend. Met ‘Download’ wordt de configuratie opgevraagd, met ‘Upload’ kan een confguratie in de PIC worden geladen. Met de software kan ook het uitgangstype ingesteld worden. Er zijn vier mogelijkheden:
• Toggle: één keer drukken -> aan; nog een keer drukken -> uit.
• Pulse: uitgang actief voor circa 262 ms
• Master: hetzelfde als Toggle, bij uitschakelen gaan alle slaves ook uit.
• Slave: bij inschakelen gaan de masters ook aan, uitschakelen niet mogelijk.
Meerdere masters zijn mogelijk, maar of dit handig is, is een tweede.
Er is ook nog een functie voor de middelste knop in de ruststand. Een toetsdruk op deze knop veroorzaakt de code ‘0xEEEEEEEEEEEE’. Als deze code door middel van het pc-programma geprogrammeerd wordt (normaal programmeren is hier niet mogelijk), kan deze toets gebruikt worden als lokale bediening van een uitgang. In de tabel is het gebruikte protocol weergegeven. Voor het aansluiten van de RS485-poort is de ‘Goedkope RS232/RS485-converter’ uit Elektuur 12/2004, blz. 69 prima geschikt.
Links
dit artikel in pdf-formaat
schema- en printontwerp gezipt in eagle-formaat
ursb-firmware v1.00 en v1.01 assembler+hexcode
ursb-pc beheertool + vb6-sourcecode
(Deze schakeling is als lezersschakeling ook verschenen in Elektuur 10/2008, blz. 56)