Home › Forum › Microcontrôleurs & microprocesseurs › Décodage trame DCF77

Forum

Veuillez vous identifier avant de répondre ou pour vous abonner à cette discussion

Sujet: Décodage trame DCF77

Auteur Message

Richelsdorfite

9 messages

De passage
De passage

Read post 07-09-2009 20:57

Bonsoir,

Je suis nouveau tant sur ce forum qu'en électronique.
Mon domaine de prédilection est celui des uc et plus particulièrement des PICs.
Bref, j'aime programmer et surtout, apprendre à programmer (en assembleur).

Je me forme avec l'aide des cours de Bigonoff que je remercie au passage pour la qualité pédagogique de ces cours.

Voici le contexte du problème qui m'amène :
Je cherche à décoder un signal DCF77 afin d'afficher les informations horaires et calendaires sur un afficheur LCD.
Pour ce faire, j'utilise un 16F84A cadencé à 4 Mhz et un récepteur générant un signal avec des transitions de 0 à 5V

Pour le moment, bien qu'ayant une routine (trouvée par mes soins) pour décoder les trames afférentes à l'heure et à la date, je me heurte à la logique de recherche du début de trame.

La norme DCF77 impose (en comptant de 0 à 59):
- Un 0 est un changement d'état sur 100ms
- Un 1 est un changement d'état sur 200ms
- Toutes les secondes un bit est émis
- La seconde commence sur le changement d'état (0 à 1 ou 1 à 0, fonction de la technologie du récepteur).
- Sauf à la 59ème seconde pendant laquelle aucun changement d'état ne survient.
- En ce qui concerne la valeur du bit de la 0ème seconde, les sources différent. Certains sites donne la valeur du bit à 1, le site officiel le donne à 0. J'aurai une certaine tendance à considérer l'information venant du site officiel comme étant vraie.
- Une valeur de bit égale à 1 à la 20ème seconde

Ma routine de recherche est la suivante:

J'autorise les interruptions sur RB0
Lorsqu'une interruption est générée par un front montant sur RB0, j'enclenche un compteur de 30ms a l'issu duquel, je teste le niveau de RB0.
Si RB0 est ht, je considère que le changement d'état est valide
Puis j'enclenche un compteur de 1000 ms et je teste à l'issue la valeur de RB0, si RB0 est ht, je boucle sur 1000ms et je reteste RB0 et ainsi de suite jusqu'à ce que RB0 soit à 0, dans ce cas, je considère avoir trouver la 59ème seconde. Je positionne un flag qui me permet à la prochaine interruption de ne pas repartir dans cette routine.
La prochaine interruption est considérée être celle de la 0ème seconde. Suivant la norme, la valeur du bit transmit doit être 0.
Je teste donc si le bit est un zéro ou un 1 si c'est 0 mon pic est synchro, si c'est 1 j'efface le flag précédent et je recommence à chercher.
La même logique peut être utilisée à l'inverse sur la 20ème seconde.

Je visualise l'état du flag et la valeur des bits simplement avec des leds sur le PORTA.

Bref, en toute logique, pas de soucis !

Or, Pic programmé, platine de test sous tension, les résultats sont surprenant. Le Pic ne se synchronise pas correctement, la 59ème seconde sans impulsion n'est pas correctement trouvée.
En effet, la façon dont les leds de visualisation de valeur du bit reçu s'allument me montrent une non transition de 2 secondes sur la led représentant la valeur 0.

Que ce passe t-il ?
Ma logique est-elle bonne ?
Ma compréhension de la norme du signal est-elle la bonne ?


Cordialement,

Michel

blacktigris

181 messages

Visiteur régulier
Visiteur régulier

Read post 07-09-2009 22:07

Bonjour Michel,

Pour décoder une trame DCF il est intéressant de faire une comparaison à l'oscillo entre la trame reçue et le décodage du proc. La réception est régulièrement perturbée surtout si tu te situes loin de l'émetteur (en Allemagne). Pour ma part, je suis dans le sud (34) et mon récepteur ne fonctionne que fixé sur mon toit et mieux la nuit que la journée. Quand je décode une trame je dois la confirmer avec la trame suivante pour éviter d'afficher une heure incohérente. Dans le numéro d'Elektor de Juillet/Août 2009, il y a page 102 une horloge à impulsion synchronisée par DCF77, si la source est dispo tu peux peut-être t'en inspirer.
Bon courage

Ludo

Richelsdorfite

9 messages

De passage
De passage

Read post 08-09-2009 07:03

Bonjour,

C'est une des premières choses que j'ai fait.
De plus, ma routine de recherche et discrimination des bits fonctionne correctement. En effet j'ai une led qui s'allume en présence d'un 0 et une autre en présence d'un 1.
J'ai donc noté à la main une trame complète et je l'ai interprété.
Bilan, j'ai bien eu l'heure, et la date.
Par contre en ce qui concerne la routine de recherche de la 59ème seconde, c'est un flop !

Pour info, je suis dans les Vosges, mon signal est reçu fort et clair !

Je vais faire un ordinogramme que je mettrai en ligne ce soir.

Cordialement,

Michel

Modifié par Richelsdorfite le 08-09-2009 07:24

Modifié par Richelsdorfite le 08-09-2009 07:24

Richelsdorfite

9 messages

De passage
De passage

Read post 08-09-2009 17:41

Comme promis, l'ordinogramme.

Cordialement,

Michel

AttachmentDCF 77.pdf

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 09-09-2009 21:54

Bonjour Michel,

Je suis dans le 68 et DCF77 est très bien reçu par les appareils du commerce. (J'ai 2 réveils).

Je n'ai pas encore étudié ton ordinogramme mais je n'y manquerai pas.
Je suis actuellement sur un projet et le suivant sera une horloge à tubes Nixie pilotée par DCF.

Une question : où as-tu acheté le module DCF ?

Cordialement,
Gérard.

Modifié par Gérard2 le 09-09-2009 21:58

Richelsdorfite

9 messages

De passage
De passage

Read post 10-09-2009 06:58

Bonjour Gérard,

J"ai récupéré le récepteur dans un horloge pilotée HS.
A l'oscillo, j'ai bien la trame.
Mon soucis vient, je pense, du fait que mon signal s'écroule lorsque le PIC lit l'état du PORTB0sur le quel le signal est envoyé.
Je pense que j'ai un pb d'adaptation d'impédance.
J'ai essayé de résoudre le pb en faisant un petit montage suiveur à base de transistor mais le pb reste entier.
D'ou ma question, est-ce qu'une commande en assembleur du type,
btfss PORTB,0 influe sur l'état physique du PORT et si oui comment y remédier sachant que j'ai essayé un : movf PORTB,w suivi d'un test sur W.

Cordielement,

Michel

PS: mon signal mesuré sur la sortie du DCF77 en l'air est bien un signal 0 +5V.

YMasquel

2503 messages

Expert
Expert

Read post 10-09-2009 08:14

Bonjour Michel,

Le PULL-UP est-il activé sur ton entrée ?

Amicalement, Yves.

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 10-09-2009 09:05

Bonjour,

Il me semble que la sortie soit un collecteur ouvert, il faudrait donc mettre une résistance de pull-up.

Je ne comprends pas pourquoi le signal s'écroule avec un suiveur.


Edit : grillé par Yves.

Modifié par Gérard2 le 10-09-2009 09:05

Richelsdorfite

9 messages

De passage
De passage

Read post 11-09-2009 08:54

Bonjour,

Je n'ai pas autorisé les pull-up sur RB0.
OPTION_REG est à B'11000000'.
J'essaye de contourner le problème en ne jouant qu'avec des interruptions sur flanc montant et descendant sur RB0 et des interruptions Tmr0 avec différents prescalers fonction des mesures de temps à faire.

Cordialement,

Michel

YMasquel

2503 messages

Expert
Expert

Read post 11-09-2009 09:37

Bonjour Michel,

Alors il faudrait soit les autoriser, soit placer une résistance externe de pull-up comme le propose Gérard.

Amicalement, Yves.

Richelsdorfite

9 messages

De passage
De passage

Read post 11-09-2009 14:52

Bon, chose faite !
Le problème est toujours le même.
Par contre, j'ai craqué et ai acheté un module DCF77 chez Conrad.
Bilan des courses, résistance de pull-up externe mise entre +5V et la sortie non-inversée, le tout relié à RB0, le montage fonctionne à merveille, le début de trame est bien trouvé, mes leds de visualisations permettent de vois que tout est OK !

Youpi, même si le fait de ne pas savoir pourquoi le module de récupération d'une horloge pilotée DCF77 ne fonctionne pas m'énerve !!!!
J'y reviendrai.

Mais pour le moment, je vais pouvoir me concentré sur le code, m'occuper de décoder la trame et d'envoyer les infos sur un petit afficheur LCD.

Merci pour vos conseils !
Recentrons nous sur le code et le uC.

Cordialement,

Michel

Modifié par Richelsdorfite le 12-09-2009 06:59

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 11-09-2009 21:36

Salut Michel,

Le 11 septembre t'aura été favorable.

Content que ça marche.
J'avais l'intention de commander un module chez Conrad, je vais donc m'empressé de le faire.

Bon WE à tous,

Gérard.

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 13-09-2009 15:31

Bonjour tout le monde,

J'ai commandé hier soir 2 modules DCF chez Conrad.
J'ai quand même une question : une fois le décodage fait, comment tourne l'horloge ?
Sur quartz ?
Quelle est la fréquence de resynchronisation ?
Tous les jours, heures ... ?

Merci d'avance pour vos éclaississements,
Gérard.

Richelsdorfite

9 messages

De passage
De passage

Read post 13-09-2009 20:06

Bonsoir,

Je vais faire une réponse alambiquée.
Quelle sera l'utilisation de votre horloge.
A-t-elle une fonction permanente obligatoire.
Gère t-elle des appareils nécessitant un permanence de l'heure et de la date ?
Pour ma part, comme je souhaite faire des calculs basés sur la date et l'heure, je vais shunter la partie horloge permanente.

Cordialement,

Michel

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 13-09-2009 20:48

Bonsoir,

Mon objectif est ludique, apprendre à décoder DCF et faire un truc original (tubes Nixie). Je ne souhaite que l'affichage de l'heure.

Richelsdorfite

9 messages

De passage
De passage

Read post 14-09-2009 07:13

Dans ce cas, il serait possible de mettre le signal DCF77 en master et de prendre un Dallas DS1307 I2C en horloge de secours.

Deux exercices en 1 !!!

Cordialement,

Michel

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 14-09-2009 18:03

Bonjour Michel,

Je pense utiliser un Qz de 3,2768MHz pour le µC et pour TMR1 qui génèrera une interruption.
J'ai déjà utilisé ce principe, ça marche mais on est tributaire de la stabilité du Qz. (pas trop top sur une longue période)

D'où ma question : à quel intervalle de temps faut-il se resychroniser ?

Merci pour ton aide,

Gérard.

Richelsdorfite

9 messages

De passage
De passage

Read post 15-09-2009 06:59

Bonjour,

Pour ma part, la synchronisation serait permanente et s'effectuerait par comparaison entre les informations horaires DCF77 et les données horaires générées par la temporisation du µC .
En cas de perte de la réception du signal DCF 77, l'horloge interne du µC permettra de conserver l'information horaire.
Quel µC utilisez-vous ?

Cordialement,

Michel

blacktigris

181 messages

Visiteur régulier
Visiteur régulier

Read post 15-09-2009 07:46

Bonjour,
En ce qui me concerne, j'utilise un PCF8583 que je réaligne avec le signal du DCF77 toutes les 24h, ça suffit amplement pour conserver une grande précision. Le µC est ainsi déchargé du comptage horaire, il ne s'occupe que du décodage DCF et de la gestion de l'affichage de l'heure lue sur le PCF8583.

Ludo

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 15-09-2009 20:37

Bonjour,

Merci pour votre point de vue.
Je pense utiliser un vieux 16F877 qui traine dans le tiroir.
En plus des tubes, je voudrais piloter un afficheur pour savoir l'heure dans quelques villes au monde. Ex : Tokyo, New York, Los Angeles ....
C'est tout à fait inutile mais j'ai envie de le faire.
Avec tout l'anachronisme que représente des tubes Nixie et un afficheur 4 * 16 lignes.

Gérard.

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 20-09-2009 11:33

Bonjour à tous,

Ce matin je câbles un module acheté chez Conrad et l'oscillo donne un signal plat.
Le module a-t-il rendu l'âme ?
J'ai bien mis une pull-up, le courant consommé est de moins d'1mA, tout parait correct.
Merci pour vos éclaircissements.

Gérard.

Dorian75011

1 message

De passage
De passage

Read post 25-03-2010 09:37

J'ai un petit problème moi aussi je sais que le sujet date un peu mais j'ai un peu d'espoir ^^.
mois aussi j'ai un Module et mon problème se situe au niveau du code pour décoder les trame DCF77
alors je me demander si quelqu'un avait des petit info a me donné au moins pour me lancer.
merci d'avance, cordialement.

YMasquel

2503 messages

Expert
Expert

Read post 25-03-2010 13:01

Bonjour Alexandre,

tu devrais au moins essayer de taper DCF77 dans un moteur de recherche. Les trames de cet émetteur sont probablement un des éléments qui traînent le plus sur la toile.

Amicalement, Yves.

L'arsène

6 messages

De passage
De passage

Read post 27-04-2011 14:26

Bonjour vous tous,

Après plus d'un an sans nouveau message, je voudrais savoir si vous aviez réglé vos problèmes des réceptions et de décodage des signaux DCF 77 et aviez-vous conçu vos réalisations prévues.

Je pourrais peut-être vous aider car j'ai réalisé sur carte d'essais un exemple concret affichant l'ensemble des informations hors mis les infos jusqu'aux bits des minutes.

Cordialement.
L'arsène.

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 27-04-2011 21:48

Bonjour Arsène,

Peux-tu en dire un peu plus de ta réalisation ?

Merci d'avance.

L'arsène

6 messages

De passage
De passage

Read post 28-04-2011 09:57

Bonjour Gérard,

Dans le but de moderniser une ancienne horloge avec afficheurs géants et qui sonne comme celle de Westminster (origine HEAD kit pour les connaisseurs), j'ai travaillé sur le sujet.
C'est un module de chez Conrad qui sert de récepteur DCF, un PIC 16F88 pour µP cadensé à 4Mhz. Tout le programme se déroule sans utiliser le mode interruption. Il ne me reste plus qu'à faire fonctionner une deuxième horloge à base de PCF8583 comme le fait Ludo, le signal DCF 77 n'étant pas toujours à 100% malgré ma bonne situation géographique (Est de la France).
Voir les photos de l'afficheur.

Bonne journée.

L'Arsène.

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 28-04-2011 21:36

Merci pour les photos.

Et le programme, il est dispo ?

L'arsène

6 messages

De passage
De passage

Read post 29-04-2011 09:29

Bonjour Gérard,

Bien sur.
Le programme est écrit via l'assembleur du très bon programme LogiPic et j'en profite pour remercier et encouragé le concepteur.

Si Ludo ou autres personnes pourraient me donner des tuyaux concernant le dialogue en IC2 entre le PCF8583 et le PIC je serais intéressé.

Merci d'avance.

Cordialement.

AttachmentEssais DCF9.asm

blacktigris

181 messages

Visiteur régulier
Visiteur régulier

Read post 29-04-2011 11:05

Bonjour l'Arsène,

La communication en I2C est un standard, tu trouveras énormément d'info sur le ouèbe. Si ton PIC possède un port I2C intégré, ça va simplifier un peu de développement, si ce n'est pas le cas, les routines restent simples à écrire en suivant les infos sur le protocole I2C.
La commande du PCF8583 est relativement simple également, une fois que le protocole I2C est implémenté dans le programme, il suffit de lire et modifier les bons registres. Le PDF du constructeur Philips est bien fait et indispensable.
Restant à ta disposition

Bonne journée

Ludo

L'arsène

6 messages

De passage
De passage

Read post 29-04-2011 12:11

Bonjour Ludo,

Merci pour ta réponse, je bosse sur les datas sheets, le pic (16F88) comporte un port I2C.

Bonne journée.

L'arsène.

L'arsène

6 messages

De passage
De passage

Read post 03-05-2011 16:33

Bonjour Ludo et Gérard,

Après des recherches sur le net je pense comprendre le fonctionnement la liaison I2C mais je me heurte à la façon de faire fonctionner mon PIC 16F88 en mode I2C mon anglais est limité. J'ai modifier le registre SSPCON mais rien y fait. As-tu une idée Ludo ?
Merci d'avance.

Gérard, as-tu réalisé l'horloge avec l'affichage en tubes Nixies ?

Bonne soirée.

L'Arsène.

blacktigris

181 messages

Visiteur régulier
Visiteur régulier

Read post 03-05-2011 16:47

Désolé l'Arsène, je suis marié avec le concurent Atmel mais je suis sûr qu'il y a bon nombre de gens sympathiques sur ce forum qui auront vite fait de te répondre. Si ce n'est pas le cas envoies-moi la page concernée, j'essaierai de t'aider.
Peut-être que ça vaut la peine d'ouvrir un nouveau topic "pilotage I2C sur PIC" ?
Bon courage

Ludo

YMasquel

2503 messages

Expert
Expert

Read post 03-05-2011 17:14

Bonjour à tous,

Quelle que soit l'origine du micro-contrôleur le protocole I²C fonctionne toujours de la même façon. Pas besoin d'ouvrir un sujet spécifique aux PIC.

J'ai fourni la majorité des éléments nécessaires à son utilisation sur ce sujet. C'est en français, cela concernait un contrôleur Atmel, un composant I²C horloge PCF8583 et son initialisation, c'est écrit dans un langage spécifique mais les explications permettent de comprendre comment réagit un composant I²C et surtout que pour signaler qu'on souhaite lire il faut écrire dans un registre de ce composant. C'est le piège le plus courant.

Les meilleures explications (en anglais malheureusement pour certains) sur le protocole I²C je crois qu'elles sont sur les fiches de caractéristiques des composants I²C de MAXIM (au paragraphe "I2C Serial Port Operation") -voir celle du DS3231 par exemple.

Amicalement, Yves.

blacktigris

181 messages

Visiteur régulier
Visiteur régulier

Read post 03-05-2011 18:05

Bonjour Yves,

Je pense que la question de l'Arsène tient plutôt des spécificités des registres du PIC pour l'exploitation du bus I2C que du protocole I2C lui-même. Mais bon, je peux me tromper (ça arrive souvent)
Bonne soirée
Ludo

L'arsène

6 messages

De passage
De passage

Read post 03-05-2011 20:27

Bonsoir vous tous,

Ludo a raison, mon problème se situe à la façon de modifier les registres du PIC pour qu'il met en service le port (B1 et B4 dans mon cas) concerné par les connections SDA et SCL et se mette en condition de dialoguer en mode I2C.

Merci quand même Yves et Ludo.

Je continue à chercher bien sur.

Cordialement.

YMasquel

2503 messages

Expert
Expert

Read post 03-05-2011 20:31

Bonjour Ludo,

Tu as peut-être raison, je me suis centré sur le message d'origine qui semblait faire état d'un problème de protocole mais les derniers messages sont plus ciblés sur le PIC lui-même.

Quelques précisions de base peuvent donc être utiles pour éclaircir un peu la situation.

D'abord l'information fondamentale (la quasi traduction de la documentation de MICROCHIP sur le fonctionnement des lignes SDA et SCL en mode MASTER) :
Dans le fonctionnement en mode MASTER, les lignes SCL et SDA sont gérées dans le logiciel par passage à ZERO ou UN du bit correspondant au port MAIS DANS LE REGISTRE TRIS (pas le PORT lui-même).
Ici la phrase du document peut prêter à confusion et je parlerai donc d'abord du rôle des résistances de tirage à V+.
Les lignes SCL et SDA sont "tirées au +V" par des résistances (les résistances de PULL-UP intégrées ne doivent pas être utilisées car elles ne sont pas calibrées pour cette fonction).

Lorsqu'on souhaite placer un bit à UN sur SCL ou sur SDA il suffit de basculer le bit TRIS correspondant à UN (en Input) puisque la résistance de tirage fait son travail sur un port en entrée (principe du OU câblé avec collecteurs ouverts). Pour un ZERO il faudra que la ligne de PORT ET le bit de TRIS correspondant soient à ZERO (en Output pour ce dernier).
- La ligne SCL est sous le contrôle total du MAITRE, l'ESCLAVE ne peut l'influencer. Le contrôleur bascule donc la valeur du bit TRIS correspondant à la ligne SCL pour séquencer le transfert dans quelque sens que ce soit.
Pour la ligne SDA il suffit de connaître le sens de la communication.
Si le contrôleur est en PHASE DE RECEPTION LE BIT TRIS CORRESPONDANT A LA LIGNE SDA DOIT ETRE EN PERMANENCE A UN (en entrée). La ligne de PORT basculera au gré des données placées par le composant distant.
Si le contrôleur est en PHASE D'EMISSION LE BIT DE PORT CORRESPONDANT A LA LIGNE SDA DOIT ETRE EN PERMANENCE A ZERO. Lorsqu'on souhaite envoyer un bit à ZERO il suffit de basculer le bit TRIS correspondant à ZERO, la ligne sera tirée à la masse puisqu'en sortie avec une valeur ZERO sur le PORT. Lorsqu'on souhaite envoyer un bit à UN il suffit de basculer le bit TRIS correspondant à UN, la ligne sera tirée à +V puisqu'en entrée avec une résistance de tirage à +V.


J'espère avoir été clair (et n'avoir pas commis d'erreur).
Dernier détail, chez Microchip un port en entrée est à 1 (Input) et un port en sortie est à 0 (Output). C'est l'inverse chez Atmel. TOUJOURS VERIFIER CE POINT QUAND ON CHANGE DE CONTROLEUR.

Amicalement, Yves.

Gérard2

177 messages

Visiteur régulier
Visiteur régulier

Read post 03-05-2011 21:51

L'arsèneBonjour Ludo et Gérard,

....

Gérard, as-tu réalisé l'horloge avec l'affichage en tubes Nixies ?

Bonne soirée.

L'Arsène.


J'ai acheté une horloge à tubes Nixie chez Vellemann, elle fonctionne parfaitement comme tous les kit de chez eux.

J'ai d'autres projets d'horloges, mais ... encore secret.

Veuillez vous identifier avant de répondre ou pour vous abonner à cette discussion

Elektor 6/2012 en kiosque

Elektor-Hebdo gratuit !

Mon adresse électronique :

Unités de crédit Elektor

Nos blogs-ateliers