DCF-gestuurde UTC shack klok

klokthumb

klokthumbDe rrrrrrrrrr is weer in de maand, al lijkt dat als je naar de regenhoeveelheden kijkt wel of dat al 2 maanden zo is. Voor de meesten zit de vakantie er weer op, en lonken sombere najaarsavonden in de shack, die verwarmd wordt door de soldeerbout en de eindtrap van de set. Dus tijd voor weer een knutsel, die door iedereen wel gebouwd kan worden.

 

 

Zoals iedere amateur wel weet noteren wij de tijd in UTC (Universal Time Coordinated) en niet in de lokale tijd. Die tijd is over de hele wereld gelijk en zo kunnen we makkelijk controleren bij het verkrijgen van een QSL waar de desbetreffende amateur in het log staat. Dat moet voor de echte DX-ers redelijk nauwkeurig; ik heb wel eens een DX-peditie gezien die op de website vermeldde dat de QSL binnen 3 minuten van de werkelijke tijd nauwkeurig moest zijn, omdat deze anders niet gevonden werd in de log (ben benieuwd welke nono die database routine geschreven heeft, maar goed…)

Nou had ik een DCF-klok in de shack. Twee zelfs. DCF77 is de tijdzender in Duitsland die aangestuurd wordt door het Physikalisch-Technischen Bundesanstalt (PTB) in Braunschweig. De ene klok was een analoge, en de andere was een digitaal wekkertje dat uit de nalatenschap van OM Loek PA0ALD was gekomen. Beiden hadden een nadeel: de analoge klok zorgde altijd voor een hoop rekenwerk (QSO gemaakt, even op de klok kijken, 12 over half 9 in de avond, dat is, eh, 20 uur 42, het is zomer, dus -2, maakt 18:42). Niet echt handig. Het wekkertje boodt de mogelijkheid om de uren te verzetten. Die liet ik dan eerst synchroniseren met DCF77, en daarna zette ik de uren 2 uur achter. Behalve dat je dat twee keer per jaar aan moet passen (zomer- en wintertijd), wilde de wekker niet meer synchroniseren zodra je de uren verzet had, en als gevolg daarvan liep hij in een half jaar altijd wel een paar minuten fout. Ook niet handig dus. Dat moet toch anders kunnen…

Dus googlede ik naar een digitale klok met DCF77 ontvanger, om zelf te bouwen. Ik vond er een op de site van micro-examples.com. Deze klok was gebaseerd op de oude bekende PIC16F84 en gaf de tijd weer in gewone midden-Europese tijd. Het weergeven geschiedt met 7-segments-displays, en die kan je net zo groot maken als je wil. Ik gebruikte 2,5cm effectieve cijferhoogte, partnummer 160129 van Conrad. De segmenten hebben twee LEDs in serie, waardoor de serieweerstanden van de segmenten laag moet zijn om nog enige stroom te laten lopen (68 Ohm is goed). Gelukkig was daarnaast ook de source code beschikbaar, geschreven in C. Nou heb ik vroeger nog wel eens het een en ander geprogrammeerd in C, dus dat maakte de zaak eenvoudiger… Ik downloadde de MicroC PRO compiler en veranderde in de source de PIC in de meer algemene PIC16F628a. De compiler gaf geen fouten, dus laten we eerst eens proberen de basis klok te maken.

Schema1

Ik gebruikte 2N7000 FETs in plaats van de BC547 transistors uit het originele schema. Maar dat is omdat ik er ooit 100 van gekocht had, dus heb ik meer FETs dan transistoren. Je kunt beiden gebruiken.

Nog iets dat ik veranderde: in het originele ontwerp knippert de decimale punt tussen de uren en minuten segmenten mee met het ontvangen DCF signaal, en de decimale punt van het meest rechtse segment gaf aan of er synchronisatie was met de tijdzender. Ik veranderde dat laatste naar een aparte LED, L60. Daar kom ik later nog op terug.

Voor de ontvangst van het DCF77 signaal gebruik ik een module die door Conrad compleet geleverd wordt met partnummer 641138. De geïnverteerde uitgang van deze module wordt verbonden met pin 3 van de PIC (staat niet op het schema).

Dus blies ik de HEX file in de PIC en soldeerde ik de basiscomponenten op een stuk gaatjesbord. Ik voorzag de 7805 van voedsel en het werkte meteen:

It Works!

In deze versie geeft de Decimale Punt (DP) van het meest rechtse segment nog steeds aan dat er synchronisatie is met DCF. En zoals je kunt zien op het plaatje, is dat hier het geval. Tijd om de software aan te passen. Om te beginnen vond ik de manier waarop de 6 en de 9 werden weergegeven, er niet uitzien. Zoals op het plaatje te zien is, lijkt het meer op een "b" dan op een "6" en dat is zoooooo 1960. Dus paste ik de software zo aan, dat er een liggend streepje toegevoegd werd aan de 6 en de 9. De tweede wijziging betrof het uitlezen van bit 17 en 18 van het DCF77 protocol. Het DCF77 protocol is eigenlijk een soort morse: de secondenpulsen hebben een lengte van óf 100ms (een Nul) óf 200ms (een Een). Op die manier wordt de tijd overgeseind. Die bits 17 en 18 vertellen of het zomer- of wintertijd is en afhankelijk daarvan trek ik 1 of 2 uur van de tijd af. Is het uur 0, dan moet die 23 worden als er 1 afgetrokken wordt, en niet -1. In C is dat eenvoudig aan te passen, en dus werkte dit eveneens de eerste keer dat ik het probeerde. Hier had het experiment kunnen eindigen, want meer dan dit is er niet nodig om een goedkope, makkelijk te bouwen DCF gestuurde UTC klok te maken. Maar ik wilde het natuurlijk weer mooier maken, om indruk te maken op bezoekers van de shack… Dus besloot ik om er een ring van LEDs aan toe te voegen, die de seconden aangeeft. Die zie je dan langzaam vollopen, tot de minuut vol is, en dan begint het spelletje weer van voren af aan.

De gemakkelijkste manier om dat te realiseren is met een schuifregister. De 74HC595 is een 8-bit gelatched schuifregister met master clear en cascaderende in- en uitgang, die 35mA kan syncen of sourcen aan de uitgang (afhankelijk van of de stroom erin of eruit loopt). Meer dan genoeg om een LED aan te sturen. Daarvoor is dan een extra klok puls, een latch puls die na de klok puls moet komen en een master reset puls om de zaak weer op 0 te zetten. Als je de documentatie leest, zie je dat als je de register klok en de latch klok aan elkaar bindt, de output altijd 1 puls achter loopt op de input. Maar dat is in de software op te lossen, en het scheelt een extra stuurverbinding. Dus alles wat nu nog nodig is, zijn twee extra uitgangen op de PIC om de schuifregisters aan te sturen.

Maar die zijn er niet meer… De B-poort is volledig in gebruik om de 7 segmenten en de decimale punt aan te sturen, en van de A-poort zijn 4 lijnen in gebruik voor het aansturen van de FETs en 1 is in gebruik als input voor de DCF puls. Alles bezet… Tijd voor de trucendoos. Laten we eens kijken naar het LED stuurcircuit:

Schema2

De truc is de toevoeging van een extra 74HC10 3-input NAND poort. De ingangen worden verbonden met dezelfde stuurlijnen die de FETs aansturen. Gedurende een korte tijd zet ik de B-poort op 0, en stuur ik 0111 of 1011 uit via de A-poort. Dat zou 3 segmenten tegelijk aansturen, een situatie die normaal gesproken nooit voorkomt. Maar nu zorgen die combinaties voor een Master Reset naar de schuifregisters, of een Clock puls. Feitelijk heb ik 2 extra uitgangen toegevoegd aan de PIC!

Maar werkt het ook? Ik soldeerde 4 van de 8 schuifregisters op de print, plakte er 8 LEDs aan om eens te testen, en voerde de 7805 nog maar eens wat elektronen:

 

 

Het idee werkt! Het enige waar ik een beetje mee zat, was de functie van LED 0. Of LED 60. Het hangt er maar vanaf hoe je er tegenaan kijkt. De tijd gaat namelijk niet van HH:MM:59 naar HH:MM:60 maar naar HH:MM:00. Dat betekent dat bij de start van de minuut, LED 0 (of 60) uit moet zijn. Maar dat betekent dat-ie altijd uit is. Aan de andere kant, als je tot 60 telt, zijn tijdens de volle minuut alle LEDs aan. Een seconde later is alleen LED 1 aan. Dus is op die manier LED 1 altijd aan. Hoe je het ook bekijkt, er is altijd 1 LED zonder functie (altijd AAN of altijd UIT). Dus besloot ik de taak van het weergeven van de synchronisatiestatus toe te wijzen aan LED 60. Als die AAN is, is er om HH:MM:59 altijd een perfecte cirkel. Is de boel niet in sync, dan is er een gaatje in de cirkel, aan de top.

In de software genereer ik een klokpuls elke keer dat de seconde wijzigt. Is de seconde 0, dan genereer ik een Master Reset voor de schuifregisters, maar tevens een klokpuls Dat laadt een 1 in de eerste positie van het schuifregister, maar omdat de register klok en de latch klok aan elkaar geknoopt zijn, loopt de latch 1 puls achter op het register en wordt de 1 nog niet getoond. Dat gebeurt bij de volgende seconde puls, om HH:MM:01, waarbij de eerste LED AAN gaat.

Voor de mechanische uitvoering gebruikte ik een stuk 1mm dik enkelzijdig printplaat van de vlooienmarkt, en boorde de 60 gaatjes in een cirkel. De LEDs worden op het aardvlak van de print gesoldeerd:

Achterkant

Ook van printmateriaal maakte ik een steun om 'm aan op te hangen:

Ophang-gat

Daarnaast werd aan de onderzijde een voedingsconnector gemonteerd, plus een 3,5mm jackplug om de DCF ontvangstmodule aan te sluiten. Ik wilde deze namelijk buiten de klok houden, zodat je die apart kunt richten als de klok toevallig zo opgehangen wordt dat net geen ontvangst mogelijk is.

Pluggen

Het rechthoekige LED display zit in het midden. De experimenteerprint wordt zodanig gemonteerd dat de LED displays op gelijke hoogte komen met de printplaat waar de LEDs in zitten. De LEDs worden weer zo ge monteerd dat deze nét door de printplaat heen steken, zodat deze aan de voorzijde vrijwel vlak is. Het eindresultaat is als volgt:

Shackklok

De foto is precies op het moment genomen dat de tijd van 17:18 naar 17:19 springt; alle LEDs zijn AAN, en de 7-segment displays springen net om, zoals je kunt zien. Ik gebruikte gele LEDs voor de 5 seconde posities, wat een leuk visueel effect geeft. Taak volbracht: een volledig DCF-gesynchroniseerde UTC shack klok met fraaie seconde-weergave! Voor het mooie moet er eigenlijk nog een stuk rookglas-perspex voor, maar daar ben ik nog niet aan toegekomen…

Op dit moment zijn we aan het kijken of we er een club-project van kunnen maken. Dat zou een 20x20cm print moeten worden die alle componenten bevat. Wil je zelf aan de slag, dan staat de HEX code voor de PIC16F628a HIER. De code werkt voor zowel de eenvoudige klok als de luxe-uitvoering met schuifregister en 60 LEDs.

Om te weten of er belangstelling is, gooien we er maar weer een poll tegenaan; Wil je de klok bouwen? En doe je dat dan zelf wel? Of wil je in clubverband bouwen? En dan een simpele klok (gewoon de 7-segments-displays met de tijd, zonder poespas) of de luxe-uitvoering met LED-ring? Laat het ons weten! Oh ja, geprogrammeerde PIC's bestellen kan natuurlijk pa3cnopi4raz.nl">OOK …