«

Apr 28 2015

Horloge radio synchronisée par DCF77 avec sortie NMEA

DCF_Clock_01Peut être est-ce une question de gêne helvétique, mais, dans mon shack, j’ai besoin d’avoir l’heure précise devant les yeux. Pour remplir le log, contrôler le départ de mes trames WSPR et JT65, etc.
Pour ce faire, j’ai acheté deux horloges LCD. Une pour l’heure locale et une pour l’heure UTC.
Elles sont autonomes et il est  nécessaire de les remettre à l’heure régulièrement, sans quoi elles prennent quelques dizaines de secondes par semaine.
J’avais pensé les connecter à mon oscillateur OCXO de référence 10MHz pour assurer une précision minimum.
En démontant les dites horloges, je me suis trouvé face à un simple rond noir sur le circuit imprimé,  ni plus, ni moins. Et je la plante où ma fréquence de référence ?
Il faut trouver autre chose…
Je sais qu’il existe des horloges radio synchronisées, mais malgré quelques recherches je n’ai pas trouvé mon bonheur, comme par exemple l’affichage de deux fuseaux horaires (CET et UTC) et un encombrement réduit.

“Si tu ne trouves pas ton bonheur, alors fais le toi même”

DCF77 est un émetteur ondes longues situé en Allemagne dont la fréquence porteuse est de 77.5kHz, Avec une puissance de 30kW, on peut le recevoir dans de très bonnes conditions sur une grande partie de l’Europe. Il transmet l’heure légale “atomique” sous la forme binaire à raison de 1 bit par seconde. Les impulsions émises à chaque début de seconde sont de longueurs différentes, 100ms pour un 0 et 200ms pour un 1. L’ensemble de ces bits fournissent l’heure et la date au format BCD. Des bits de parité permettent de contrôler la validité des informations reçues.
Toute la doc concernant DCF77 sur Wikipédia.
dcf77coding

Il y a quelques temps, j’ai repéré sur la baie un petit module récepteur DCF77 munis de son antenne en ferrite.
Pour quelques dollars, j’en ai acquis un exemplaire. Celui ci intègre toute la partie réception et délivre un signal démodulé sous forme d’impulsions pouvant êtres traitées par un micro contrôleur.
dcf77_recepteurAyant récupéré un affichage LCD 4*16 sur une “vieille” radio internet, il ne me manquait plus que le cerveau.
Il existe dans le monde Arduino une librairie qui permet facilement d’implémenter un décodage de l’heure à partir des impulsions fournies par le récepteur.
En une soirée on peut monter une horloge radio sans trop d’effort.

Une seconde solution consiste à utiliser un uC AVR ATMega48 munis de son oscillateur interne, largement suffisant  avec ses 4kbytes pour cette horloge.
Et puis l’idée de mettre les mains de le cambouis me plaisait beaucoup.

Première étape, un schéma pour s’y retrouver (ici le définitif):

dcf_clock_schemaLe schéma au format PDF :  DCF_Clock_NMEA

Trouver la seconde 0

On commence par chercher le début de la minute, pour être synchro avec les bits qui nous permettront de décoder l’heure.
On utilise un des trois timer du uC pour détecter l’absence d’impulsion de la seconde 59.
Chaque flanc montant va déclencher l’appel d’une interruption. Dans celle ci on compare le temps écoulé entre deux appels. Si ce temps est de deux secondes, nous avons alors trouvé la seconde zéro.
Pour éviter de se synchroniser sur une fausse absence d’impulsion, par exemple en cas de mauvaise réception, un deuxième tour est effectué pour confirmer la position du début de minute.

Le décodage de l’heure

Le décodage de la longueur des impulsions utilise également l’interruption déclenchée par le flanc montant du signal.
A son appel on active un deuxième timer qui appellera à son tour une autre interruption, 150ms plus tard.
A ce moment précis, l’état de l’entrée du uC sur laquelle est connecté la sortie du récepteur nous indique simplement la valeur du bit reçu.

La suite est assez simple. On récolte les bits, on les assemble, on les décode et on contrôle que le la parité soit correcte. Le cas échéant, on affiche l’heure, la date, etc.
On repart dans la vérification de la position de la seconde 59, on décode l’heure, on vérifie la seconde 59, on décode l’heure, et ainsi de suite.

Une vidéo du premier prototype :

Real Time Clock DS3231

Dans cet état là, l’horloge doit refaire sa synchro à chaque remise en marche ce qui peut être long si le signal est perturbé, par exemple lors d’un orage.
J’ai trouvé un module RTC à 1$ destiné à la platine Arduino et qui communique par I2C.
Le DS3231, qui est équipé d’un TCXO, d’un accu Li-On au format 2032 et d’un thermomètre.

sku_222910_1Une fois mis à l’heure, le module fonctionne même si l’horloge n’est plus alimentée. Après une semaine sans alimentation la dérive reste relativement faible, soit environ 400ms de décalage dans un pièce à 21°C.

Sortie NMEA pour WSPR et JT65

Pour mes activités en portable WSPR et JT65 j’utilise un GPS maison pour la synchro. Mais il m’est arrivé quelques fois que la réception soit insuffisante, notamment à l’intérieur de bâtiments.
Ces modes numériques n’utilisent que le code horaire et en WSPR j’introduis manuellement le locator. L’idée m’est alors venue de générer une trame NMEA pour simuler un GPS et ainsi synchroniser mon Ultimate2 ou mon PC au moyen de l’horloge DCF.
Le système ne génère que la trame minimale RMC qui est suffisante pour mes applications. La communication est assurée par l’UART du uC et un FTDI232 externe pour une sortie USB.
Une sortie supplémentaire du microcontrôleur est utilisée pour le PPS nécessaire à l’Ultimate2.

 

DCF_Clock_02

La platine avec le uC et la RTC

La plaque frontale a été fabriquée au moyen d’un morceau de verre acrylique que j’ai dépoli grossièrement autour du LCD.

Le bilan de l’opération est plutôt positif, pour environ 30CHF, j’ai une horloge qui fonctionne à merveille et qui permet d’avoir une source de synchro autre que le GPS ou l’Internet pour les modes numériques.

73’s !

Laurent

 

 

Permanent link to this article: http://www.hb9fgk.org/horloge-radio-synchronisee-par-dcf77/

0 visitors online now
0 guests, 0 members
Max visitors today: 0 at 12:01 am CEST
This month: 12 at 09-18-2019 02:37 am CEST
This year: 18 at 07-23-2019 07:11 pm CEST
All time: 53 at 01-18-2018 01:15 am CET