Go Down

Topic: Horloge piloté (Read 2354 times) previous topic - next topic

Trejo

Bonsoir à tous,

Étudiant en deuxième année de DUT GEII je me permet de poster sur le forum aujourd'hui car j'ai besoin d'une aide précieuse.

En effet il nous a été confié (à mon collègue et à moi) un projet à réaliser. Nous avons décidé de prendre comme projet une horloge numérique programmé grâce au module DC77 (je ne pense rien vous apprendre, il s'agit du module qui permet de se synchroniser sur l'horloge atomique allemande grâce aux ondes envoyées.)

Il nous a également été imposé le micro contrôleur, il s'agit d'une carte arduino duemilanove, ainsi qu'un LCD 16*4 afin d'y afficher l'heure.
Donc pour en revenir à notre projet, nous avons réussi sans trop de problèmes jusque là à bien câbler le tout, la carte, le LCD et le module DC77, ainsi qu'a récupérer (vue grâce à un oscilloscope) le signal du DC77.

Actuellement nous avons même réussi à afficher sur le LCD, malheureusement à part faire un chronomètre nous n'avons pas réussi a faire grand chose. Nous n'arrivons absolument pas, (pas faute d'avoir multiplié les recherches sur internet...) à récupérer et traiter la trame afin de pouvoir remettre automatiquement notre horloge à l'heure réelle..

Étant complètement a cours d'idée et dans le flou total, je viens donc soliciter votre aide, sachant que toute aide est bonne à prendre si elle peut nous permettre de nous débloquer.

Je souhaiterais si possible, soit de très très bonnes explications qui permettrait de nous décoincer (attention je préviens j'ai un niveau en informatique assez faible ;)), soit quelqu'un qui connait une fonction qui permet de récupérer la trame (pareil, nous n'utilisons pas les bornes « TX » et « RX » de la carte, donc inutile de nous donner une fonction qui permet de récupérer la tram en liaison série... Elle nous serai inutile.)

Voilà, si vous avez des questions j'y répondrais sans problème, en espérant trouver quelqu'un qui puisse nous répondre et nous aider/débloquer.
Merci d'avance a tout ceux qui voudrons bien prendre le temps de me lire.

Bonne soirée a tous.

Gozaki

30s de gogolisation...

http://gonium.net/md/2006/11/05/arduino-dcf77-radio-clock-receiver/
http://gonium.net/md/2007/01/06/arduino-dcf77-v02-released/

Gozaki
-----------------------------
www.laboelectronique.be

Trejo

Comme je l'ai dis dans mon message, nous avons déjà effectué pas mal de recherches, et les deux sites que tu m'a donné, on a déjà fouillé dessus ;)

Nous avons testé les programmes proposé sur ce site, mais aucun résultat...

Luj06

#3
Nov 12, 2010, 01:02 am Last Edit: Nov 12, 2010, 01:05 am by julien@pobot.org Reason: 1
"absolument pas", "aucun résultat"... c'est un peu négatif tout ça..
il doit bien y avoir quelque chose qui fonctionne :

- le code compile ?
- il arrive à être chargé dans la carte ?
- la carte vous envoie des informations ?
- les informations sont vides ? ou erronées ? ou indéchiffrables ?

Que dit le debug du code de Gonium ? Le signal est détecté ?

Vous avez une photo du montage ?

goabonga

regarde dans les commentaires aussi :)

Quote
I tried to get your code to run on a Duemilanove which didn't work at first. I figured out some very small changes in the names of some of the timers used by the ATMega 328. Might be useful for the people getting here from the arduino playground. Just rename the timers in the original code to the ones listed below:

TCCR2 to TCCR2A, TIMSK to TIMSK2, OCIE2 to OCIE2A

Compile, upload to your Duemilanove and have fun!


@+

Trejo

#5
Nov 12, 2010, 09:58 am Last Edit: Nov 12, 2010, 10:32 am by Trejo Reason: 1
Bonjour,
déjà merci à vous trois pour vos réponses aussi rapide.

Pour répondre Luj06, non nous n'avons pas de photo du montage, mais nous pouvons en prendre une sans soucie je pense ;)
Pour le programme, nous avons testé quelques programmes trouvé sur internet après quelques recherches, mais tout ces programmes se compile sans problèmes, fonctionne plutôt bien, le seul problème qu'on a est double, soit le lcd affiche n'importe quoi... soit on arrive a faire un chronomètre au lieu de faire une horloge...

Pour le signal comme dis nous l'avons bien, grâce a l'oscilloscope nous pouvons le voir =)

J'avais oublié de préciser en fait, mais nous avons un ATmega 328 sur notre carte, si ca peut aider ;)

Bon pour prendre un exemple : http://larsf.pastebin.com/f7197f100 (En changeant les TCCR etc comme proposé)
avec le programme proposé sur se site, nous arrivons à compiler, à afficher sur le LCD, le seul problème il commence à 0 et incrémente petit à petit, donc il s'agit plus d'un chronomètre que d'une horloge...

Voila où l'on en est et où est notre plus gros problème actuelle, impossible de mettre l'horloge a l'heure réelle... De quoi être bien négatif donc après 6semaines de travail arriver à un tel résultat...



Enfin Goabonga, effectivement nous avons un peu zappé les commentaires.. ^^
Mais ce que le message propose comme modifications, tu penses pouvoir nous donner le programme à utiliser ou il faut effectuer les changements proposé ?

Merci d'avance,
Bonne journée  :)

Epy

Suggestion bête, est-ce que ce 'chronomètre' ne serait pas affiché le temps que la synchro soit faite avec l'horloge atomique ?
Je propose ça parce que j'ai des réveils/horloge murale qui ont ce comportement en attendant de trouver l'heure sur le signal (ou d'avoir une synchro pour les secondes qui soit correcte, je ne sais pas exactement comment ça fonctionne)
Vous avez attendu combien de temps avec ce timer en fonctionnement ?

[Autre question, est-ce que le but de votre projet est d'utiliser un code tout fait pour que ça fonctionne ou d'apprendre à le faire complètement vous mêmes ?]

Trejo

Notre projet n'a aucune règles bien précise, à part le matos utilisé bien sur ^^

Le seul but est qu'à la fin elle fonctionne, moi personnellement je suis un peu curieux de nature donc je préfère y faire moi même en apprenant, mais comme on a du mal à s'en sortir, et que notre prof n'y connais absolument rien en informatique... Beh dans ce cas nous reste que la solution d'essayer de chercher sur le net un programme pour nous aider à la faire fonctionner... Pas si simple puisqu'on a toujours pas réussi

Sinon dans nos premiers essais nous avions laissais le timer en fonctionnement durant 2h de memoir, donc je ne pense pas que le problème vienne de là =/ (dommage ^^ lol)

Non non, notre vrai problème se situe au niveau de la récupération de la trame

fdufnews

#8
Nov 12, 2010, 11:29 pm Last Edit: Nov 13, 2010, 09:09 am by fdufnews Reason: 1
En fait toutes les informations nécessaires sont là: http://www.ptb.de/en/org/4/44/442/dcf77_kode_e.htm
ou là
http://www.compuphase.com/mp3/h0420_timecode.htm
ou là
http://en.wikipedia.org/wiki/DCF77

En résumé toutes les secondes (sauf la 59ème) il y a une impulsion. Si elle fait 100ms c'est un 0. Si elle fait 200ms c'est un 1. Ces 1 et ces 0 encodent la date, l'heure, etc suivant la table définie dans les docs ci-dessus.
C'est quand même pas très compliqué pour un DUT GEII

Trejo

Oui on avait bien compris le coups des impulsions, on a trouvé le graphique au tout début

J'ai compris le principe, idem pour les 100 ou 200ms, mais je répète encore une fois
toutes les secondes une trame est envoyé, et nous devons la récupéré et la traduire pour ensuite la balancer sur le LCD pour avoir l'heure (et la date en option mais ca fait toujours mieux ^^).

Et donc nous n'arrivons pas à traduire la tram pour la balancer sur le LCD justement...
Donc soit on est vraiment nul et on arrive pas à faire un truc simple (possible ^^) soit le signal récupéré par le dcf77 est mauvais (j'en doute quand même a l'oscilloscope ca semble être le bon signal ^^) soit ... je sais pas =/
C'est bien pour ca que je viens réclamer votre aide :p

Mais merci quand même fdufnews

Luj06

#10
Nov 13, 2010, 12:55 pm Last Edit: Nov 13, 2010, 01:05 pm by julien@pobot.org Reason: 1
Dans un premier temps, utilisez une interruption (patte 2 ou 3 de l'Arduino), mémorisez le nombre de milliseconde courant, attendez l'interruption suivante, affichez la différence entre le temps actuel et le nombre de millisecondes mémorisé.

Faites déjà ce simple test et postez votre code, une photo du branchement et la sortie obtenue dans la console série.

Inutile d'aller plus loin tant que cette partie ne fonctionnera pas.

fdufnews

Vous avez réussi à détecter la 59ème seconde? C'est ce qui permet de réinitialiser la séquence d'acquisition de la trame.

Quote

Et donc nous n'arrivons pas à traduire la tram pour la balancer sur le LCD justement...

Mais vous avez essayé de l'afficher cette trame en utilisant par exemple la console et de la traduire à la main pour voir si le problème vient de l'interprétation par votre soft ou d'un problème de réception?


Korman

#12
Nov 13, 2010, 04:19 pm Last Edit: Nov 13, 2010, 04:24 pm by Korman Reason: 1
Trejo,

de quoi parles-tu exactement. Des données transmises avec les signaux de 100 ou 200 ms (par modulation d'amplitude), où après une minute tu récupères la date et l'heure exacte ou de la trame encodée en modulation de phase entre 200ms et 950ms chaque seconde. Si vous avez encore de problèmes avec la modulation d'amplitude, oubliez la modulation de phase. Cette partie la est un peu plus dure à décoder si ton récepteur ne le fait pas pour toi. Pour la fonction de votre horloge, cette trame n'est pas nécessaire, il suffit de mesurer les 100 ou 200ms à chaque seconde.

Korman

Trejo

Alors,

fdufnews, que veux tu dire par la traduire à la main ?  :-? Une petite explication vite fait ? ^^
Pour la 59° secondes, ca risque de choquer quelques uns, mais tant pis soyons honnête, je ne sais absolument si on la détecte ou non.. Je sais que le signal reçu ressemble au signal qu'on est censer avoir (tension en créneau) pas je peux pas affirmer que je suis sur et certain que ce soit le bon a 10000%

Korman, on parle des données transmises avec les signaux de 100 ou 200ms, si j'ai bien compris ta question.. lol.

Enfin luj06, avec ce que tu me proposes (il existe une fonction pour réaliser ca déjà nan ? sinon ca doit pouvoir ce faire ca n'a pas l'air bien compliquer mais sait on jamais :p) on est censer obtenir quel résultat ? 0 non ?
Et sinon, quand a lieu l'interruption ?

Merci à tous en tout cas pour votre aide,
désolé si je suis un peu à l'ouest, mais je suis pas vraiment dans le domaine que je préfère, j'essaye de comprendre mais dur dur... Donc merci pour votre patiente

Bonne soirrée

fdufnews

#14
Nov 14, 2010, 09:26 am Last Edit: Nov 14, 2010, 09:26 am by fdufnews Reason: 1
Quote
Je sais que le signal reçu ressemble au signal qu'on est censé avoir

Ce n'est pas une démarche très rigoureuse. Tu peux passer des jours à essayer de faire marcher un programme avec des informations erronées. Ce n'est pas très difficile avec les moyens disponibles maintenant dans un labo d'élec de visualiser la trame reçue et de vérifier si elle est bonne ou non.

Sinon, toute les secondes il y a une impulsion de 100 ou 200ms sauf à la 59ème seconde. Cela te permet de prévoir que l'impulsion suivante sera le début de la prochaine trame. Si tu fais afficher par la liaison série de l'arduino les 1 et les 0 que tu décodes tu devrais récupérer 59 bits. Tu peux interpréter ces 59 bits en t'appuyant sur les docs décrivant la trame DCF77. Tu peux ainsi contrôler que les informations que tu décodes sont cohérentes, tu devrais trouver l'heure et la date et vérifier si elles ont un sens.

Go Up