É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.
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:
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é ?
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 ?]
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
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
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
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.
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.
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?
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.
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
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.
Tu peux même te faire un oscilloscope sommaire avec ton arduino (googlelise un peu...) ça donnera en plus une petite valeur ajoutée lors de la présentation de votre projet.
Oui jean françois tout a fais tu as raison
Mais, le problème c'est que je viens pas ici vous demander genre "voila j'ai rien envie de foutre ca me casse les couilles vous voulez pas faire mon projet à ma place ? comme ca je fou rien de mes journées c'est trop cool" lol
Non non, je viens ici parce qu'on doit bientôt rendre le projet, et après avoir fait pas mal de recherches/ de tests, voyant que l'échéance arrivait et vue qu'on avance pas des masses, beh on vient demander un coup de main parce que sinon on risque de rendre un projet vierge =/ ca risque de faire mal sur le semestre tout ca (surtout que bon faut juste que je dise, l'horloge n'est pas notre idée, c'est un projet imposé donc... ^^)
Mais faire l'oscilloscope avec arduino je vois pas l'intérêt oO
Fdufnews, le matos qu'on utilise est... comment dire, très sommaire je trouve, oui on peux faire beaucoup de choses mais bon c'est pas non plus le top du top lol on pourrai mieux faire
Mais, je vais chercher pour envoyer la trame par liaison série pour la transformer en 0 et 1 voir ce qu'on reçois lors de mon projet cours de projet (et oui en plus on a que 3h par semaines, donc c'est pas le top pour réaliser un projet je trouve mais bon je sais je suis pas le premier d'autres on réussi alors pourquoi pas moi lol)
Mais je te tiendrais au courant, et si je bloque j'espère que tu pourras toujours répondre à mes questions
Juste une la... Si on vérifie à l'oscilloscope sur une période de 1 seconde et qu'on à des créneaux qui ne font pas 100 ou 200ms mais qui on un temps autre, que faire ?
A part ça je donnais simplement une piste ... je ne faisais pas la morale ;), mais je n'allais pas me taper une recherche qui au final ne t'intéresse peut être pas.
Si on vérifie à l'oscilloscope sur une période de 1 seconde et qu'on à des créneaux qui ne font pas 100 ou 200ms mais qui on un temps autre, que faire ?
Que faire? Une bonne question qui mérite une bonne réponse. Commençons par comprendre le signal que vous recevez. Wikipedia l'explique assez bien:
Vous avec un signal de base à 77.5 kHz. Ce signal si vous devriez voir tous le temps, soit en pleine amplitude soit atténue de 6dB (25% du maximum). Il est bien possible que votre récepteur s'en occupe de ce cette fréquence de base et vous ne la voyez pas.
Ensuite, sur ce signal de base vous avez pour les premières 200 ms le signal à modulation d'amplitude avec les donnés des base. Ce signal la vous intéresse. Vous avez 3 possibilités de recevoir:
100ms plein signal (ou 1) 100ms signal atténué (ou 0) -> début de seconde sans donnée.
200ms plein signal (ou 1) -> début de seconde avec donnée
200ms signal atténué (ou 0) -> début de la seconde 59. Le prochain signal sera un début de minute.
Ensuite, pour les 793ms qui suivent, vous recevez une trame de 512 bits encodée en modulation de phase, chaque bit prend environ 1.5ms. Probablement vous avez vu ces signaux sur votre oscilloscope.
Enfin, à la fin de la seconde vous avez 7ms de signal sans données.
Pour la lecture du signal, c'est bien simple. Si vous lisez un signal qui a moins que 100ms, ce n'est pas un début de seconde, ignorez le et continuez d'attendre un signal (soit 0 ou 1) qui dure au minimum 100ms et au maximum 200ms. Est-ce-que ça conforme avec vos expériences? Sinon, qu'avez vous réussit à récupérer? Dés que vous avez reçu l'information de la 59ième seconde, vous pouvez décoder les données et les afficher. Ensuite, même chose pour la prochaine minute.