Stationsklok

De kunstijsbaan in Breda heeft van een schaatser een stationsklok gekregen, met de opmerking dat de klok wel mooi zou staan op het perron. Oorspronkelijk werd meerdere stationsklokken centraal gestuurd door een moederklok zodat alle klokken exact gelijk lopen.

Deze klok moest echter zonder moederklok gaan werken, dus moest er een sturing in komen die er voor zorgde dat de klok iedere minuut een puls krijgt. Na iedere puls moet de polariteit wisselen. Daarnaast mag er niet continu spanning op het uurwerk staan want dan kan de spoel te heet worden. De secondewijzer wordt door een aparte motor aangestuurd. De wijzer gaat in 58seconden rond dan stopt de secondewijzer totdat de minutenpuls komt.

Het schemaDeze sturing geeft iedere minuut een puls van 2sec. Ook is het mogelijk om de klok op tijd te zetten dmv. een drukknop op jp1. De drukknop op jp1 moet een verbreekcontact hebben omdat een kabel van ca. 40cm dichtbij de (startende) TL-lamp storing ontvangt waardoor de klok sneller gaat lopen, met een verbreekcontact wordt deze storing alleen ontvangen tijdens bijzetten van de klok. Op dat moment hebben storingen geen invloed omdat de klok al op 32-voudige snelheid loopt.

Het kristal is een gewoon horloge-kristal van 32,768kHz. Dit wordt gedeelt naar 2Hz of 64Hz indien jp1 onderbroken is. Vervolgens wordt door IC5, IC3a, IC3b, IC4a en IC4b gedeelt door 240. Nu ontstaat er een signaal wat 1 minuut hoog is en 1 minuut laag, dit gaat naar 2 MMV’s, eentje reageerd op de opgaande flank, en de andere op de neergaande flank. De RC-tijd is ongeveer 2 seconden. Dit gaat vervolgens naar een H-brug die de spoel aanstuurd.

Onderaan deze pagina vind u op de eerste foto de sturing opgebouwd op gaatjesbord in een spatwaterdichte behuizing, op de tweede foto 2 is de binnenkant van de klok zichtbaar met onderin de sturing (klok ligt op zijkant, op de derde foto 3 ziet u de klok in actie op de ijsbaan.

Links
schema in pdf-formaat
schema gezipt in eagle-formaat

URSB (Universal Remote Switch Box)

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)

 

 

 

UIR (Universal Infrared Receiver)

Een aantal jaren geleden wilde ik een IR-ontvanger voor mijn pc bouwen om deze pc te kunnen bedienen via een afstandsbediening. Na eerst de rc5-code ontvanger van Holger Klabunde te hebben nagebouwd, waarvan de firmware me erg tegenviel, ben ik na lang zoeken de UIR tegengekomen op de website van Srdan Milostic. De hardware was vrijwel hetzelfde, alleen kon de UIR overweg met alle soorten afstandsbedieningen. Na het vervangen van firmware in de PIC had ik een goede IR-ontvanger voor mijn pc. (Later kreeg ik het idee om de UIR stand-alone te maken zie hiervoor URSB).

Het schemaHet schema en het printontwerp zijn vrijwel gelijk aan het schema van Holger. De controller word gevoed via de dtr- en rts-lijn van de compoort. De tx van de pc wordt via een weerstand en een zenerdiode ingekoppeld op een portlijn van de controller.

De firmware
De firmware zal bij het opstarten de string ‘IR’ sturen op 9600Baud N-8-1. Hierna zal de firmware wachten totdat de pc de string ‘OK’ stuurt. Nu is de controller klaar voor ontvangst. Na ieder ontvangen commando zal de controller 6 bytes sturen. Aangezien de website van Srdan Milostic niet meer online is, is de firmware (alleen hexcode) onderaan deze pagina te vinden.

Onderaan deze pagina vind u een foto van het eigen ontwerp, incl. de aanpassingen die er aan gedaan zijn.

Links
de originele hardware van Holger Klabunde
schema- en printontwerp in pdf-formaat
schema- en printontwerp gezipt in eagle-formaat
firmware (hexcode)