DCF77


Introduction

L'idée de base concernant la synchronisation de l'horloge système d'un PC sous Linux par une horloge atomique est partie de la lecture de l'article de Thomas Brandl et Michael Bosch qui utilise un module récepteur DCF77 à très bas coût, c'est à dire environ 10 €. Ce module est disponible chez Conrad sous la référence 641138. L'autre avantage est la possibilité d'utiliser l'entrée du port jeux (et aussi d'un port série) pour recevoir les signaux horaires. Cela permet d'économiser un port série qui est souvent plus utile et de plus il fournit la tension d'alimentation de 5V. Le faible coût et l'autonomie de ce système en font le candidat idéal pour les serveurs qui sont dans la «nature» loin de leur administrateur favori et de tout réseau Internet.

Michael Bosch a donc écrit un logiciel pour décoder les informations du module DCF77 et qui a été repris ensuite par Frank Daamgard. Quand j'ai voulu essayer ce logiciel, je me suis aperçu que le fonctionnement, bien que satisfaisant, n'était pas parfait. En fait, il ne réalisait pas les fonctions prévues en ce qui concerne la synchronisation. Ce qui se passait, c'est qu'il se synchronisait lorsque l'écart de temps dépassait 100 ms puis laissait dériver lentement le temps système sans synchronisation et se synchronisait à nouveau au-delà de 100 ms d'écart. Ce fonctionnement en «dent de scie» provenait de paramètres manquants dans la fonction adjtimex. J'ai donc corrigé ce défaut et à présent le système donne entière satisfaction avec une erreur ne dépassant pas quelques millisecondes dans le pire des cas, c'est à dire lors de variations de charge CPU très importantes comme par exemple le fonctionnement en arrière plan du programme SETI@home.

Montage

Le module DCF77 de chez Conrad se présente sous la forme d'un circuit imprimé de quelques cm2 auquel est raccordé un barreau de ferrite avec une bobine faisant office d'antenne. Pour une bonne réception des signaux, il est important que le barreau soir placé horizontalement et perpendiculairement à la direction de l'émetteur situé en Allemagne près de la ville de Francfort.

Interface DCF77

Pour le raccordement sur le port jeux, j'ai inséré un petit montage qui permet de visualiser les tops horaires de l'émetteur (voir figure ci-contre). Cela permet de voir si le récepteur est bien verrouillé sur les signaux en observant le clignotement de la LED toutes les secondes. On notera que la durée du clignotement est de 100 ms ou de 200 ms selon la valeur 0 ou 1 dans la transmission du message horaire qui dure une minute. L'absence de clignotement à la 59ième seconde permet la synchronisation du message.



Logiciel

Pour la simplicité d'installation, j'ai empaqueté le tout au format RPM qui est utilisé sur des distributions comme Mandrake ou RedHat. Les utilisateurs de Slackware ne sont pas oubliés avec un paquet au format TAR mais devront inclure manuellement la ligne de commande dans leur fichier rc.local. La taille du paquet est très petite et peut être aisément transmise sur le réseau Packet radio.

Description Paquet Taille
RPM binaire compatible i386 dcf77-2.0-1.i386.rpm 9,5 Ko
Sources RPM dcf77-2.0-1.src.rpm 8,4 Ko
Sources TAR dcf77-2.0-src.tar.gz 5,4 Ko

L'installation du binaire au format RPM se fait très facilement depuis le compte administrateur root. La mise en route et l'arrêt se font automatiquement au «reboot» de la machine et au «shutdown». On peut également faire de même avec la ligne de commande :

/etc/rc.d/init.d/dcf77 {start|stop|restart}

Performances

Le fichier de log /var/log/dcf77.time permet de faire les analyses de fonctionnement du système. Un simple tableur permet de présenter les chiffres sous forme de graphique dont les résultats apparaissent dans les figures ci-dessous. L'enregistrement correspond à un redémarrage du serveur ce qui explique l'écart brusque suivi de la resynchronisation. L'aspect en «dent de scie» du graphique des écarts de temps est du au fait que la période d'échantillonnage du port jeux est de 10 ms. Le graphique des offsets représente la valeur de la dérive compensant celle de l'horloge système selon une formule que l'on trouve dans le man de adjtimex(2). Les performances représentées correspondent à une constante de temps PLL de 6 qui permet un bon filtrage de l'effet d'échantillonnage à 10 ms.

Ecarts DCF77 Offset DCF77

Certains navigateurs affichent mal ces graphiques comme par exemple Netscape mais Internet Explorer et Mozilla le font correctement.

Conclusion

Pour 10 €, voici un moyen pour avoir un PC Linux autonome toujours à l'heure !