Sciences | Informatique | Espace | Communication | Loisirs | Expérimentation |
RECEPTION DCF77 avec le module BN641138
Programme : chargement du programme dcf77V2.bas pour BasicStamp1 : cliquez ici
Chargé sur le Basic Stamp 1 à partir d'un PC et du programme STAMP.EXE de Parallax.
symbol i = b1 | variable des boucles For-Next |
symbol k = b2 | variable des poids binaires |
symbol factor = b3 | variable des poids x bits : factor = k * sigbit |
symbol moi = b4 | variable du mois |
symbol an = b5 | variable de l'année |
symbol second = b6 | variable des secondes |
symbol sem = b7 | variable des jours de la semaine Lundi, Mardi... |
symbol cal = b8 | variable des jours du calendrier |
symbol minu = b9 | variable des minutes |
symbol heu = b10 | variable des heures |
symbol sigbit = b11 | variable des bits 0 ou 1 |
input 7 | déclare la pin 7 en entrée |
de: if pin7 = 0 then de | boucle d'attente du + 5 volts en entrée pin7 |
dep: if pin7 = 1 then dep | boucle d'attente du 0 volt |
après le départ de cette boucle : pause 1050 ms |
pause 1050 | attente de 1050 ms pour faire un test de bit |
depa: | |
if pin7 = 0 then de |
Si l'entrée est à 0 volt au moment du test, c'est que l'impulsion suivante sera une impulsion de bit "0" ou "1", donc retour au début du programme. L'impulsion recherchée est celle de la seconde 59 sur laquelle, il n'y a aucun bit, donc une tension de 5 volts.
Le test est franchi, si l'entrée est à +5 volts ( trait bleu à gauche ).
serout 0,T2400,(#sem,#cal,#moi,#an,#heu, #minu,13,10) | transmission des informations en sortie pin0 à la vitesse de 2 400 bauds. Toutes les valeurs sont nulles à la mise sous tension du BS1. |
sem = 0:cal = 0:moi = 0:an = 0:heu = 0:minu = 0:second = 0 | raz des informations. |
low 1 | allumer la Led rouge pour signaler que la synchro est obtenue. |
for i = 0 to 20 | première boucle des secondes 0 à 20 |
gosub chbit | vers sous-programme de détermination des bits "0" ou "1" ? |
next | retour boucle si i < 20, fini si i = 20 impulsion 20" avec bit toujours à 1 |
if sigbit = 0 then de | si le bit de l'impulsion 20" est à 0 : erreur et retour. |
for i = 0 to 7 | boucle des minutes ( 21 à 28 secondes ) |
gosub chbit | bits 0 ou 1 ? |
lookup i,(1,2,4,8,10,20,40,0),k | pour chaque tour de boucle, l'instruction lookup donne le poids et l'enregistre dans la variable k, par exemple : si i = 3 alors k sera égal à 8 |
factor = sigbit * k | calcul du facteur : le sous-programme a déterminé si le bit est à 0 ou à 1 pour la seconde considérée et multiplication par le poids k. exemple : |
à la seconde 24, on a i = 3 et k = 8, si le bit déterminé par le sous-programme est à ZERO, alors le facteur sera : factor = 0 x 8 = 0 sinon si c'est un bit à UN le facteur sera : factor = 1 x 8 = 8
|
|
minu = minu + factor | addition pour les 8 tours de boucle en vue de trouver le nombre des minutes valable à la séquence 0 à 59 suivante. Remarque : le poids noté 0 indique qu'il n'y aura pas de calcul de minute, en effet à la seconde 28, il s'agit de la parité sur les minutes P1. |
Bit de Parité 0 ( sigbit ) si le nombre de bits à 1 ( de 21 à 27 ) est PAIR.
Bit de Parité 1 ( sigbit ) si le nombre de bits à 1 ( de 21 à 27 ) est IMPAIR.
Par manque de place dans l'EEPROM du Basic Stamp 1, il n'y a pas de détection de parité, pour la détection d'erreur à ce niveau. On supposera que si la synchronisation est bonne avec la seconde 59 ( pas de bit) et bonne avec la seconde 20 ( bit toujours à 1), alors toute la séquence de 1 minute sera bonne. Une détection d'erreur plus efficace que celle avec détection de parité ( pas toujours fiable à 100%) peut se faire en aval dans le système ordinateur ou carte.
next | retour boucle si i < 7 |
for i = 0 to 6 | boucle des heures ( 29 à 35 secondes ) |
gosub chbit | |
lookup i,(1,2,4,8,10,20,0),k | parité P2 à la seconde 35 ( pas utilisée ) |
factor = sigbit * k | |
heu = heu + factor | |
next | |
for i = 0 to 5 | boucle des jours du calendrier ( 36 à 41 secondes ) |
gosub chbit | |
lookup i,(1,2,4,8,10,20),k | |
factor = sigbit * k | |
cal = cal + factor | |
next | |
for i = 0 to 2 | boucle des jours de la semaine ( 42 à 44 secondes ) |
gosub chbit | |
lookup i,(1,2,4),k | |
factor = sigbit * k | |
sem = sem + factor | sortie information de 1 à 7, 1 pour Lundi .... 7 pour Dimanche |
next | |
for i = 0 to 4 | boucle des mois ( 45 à 49 secondes ) |
gosub chbit | |
lookup i,(1,2,4,8,10),k | |
factor = sigbit * k | |
moi = moi + factor | |
next | |
for i = 0 to 8 | boucle de l'année ( 50 à 58 secondes ) |
gosub chbit |
lookup i,(1,2,4,8,10,20,40,80,0),k | parité P3 à la seconde 58 ( pas utilisée ) |
factor = sigbit * k | |
an = an + factor | |
next | fini = de l'impulsion 58", le temps est au trait bleu à 250 ms |
chronogramme de l' impulsion 58" , le test se fera à l'impulsion 59"
pause 800 | en sortie de sous-programme chbit, commence une attente de 800 ms. |
high 1 | extinction de la Led rouge pour indiquer la recherche d'une nouvelle séquence de 1 minute en commençant par une nouvelle synchronisation. |
goto depa | saut vers le test de synchronisation à l'impulsion 59". |
chbit: | debut du sous-programme de détermination des bits "0" ou "1" ? |
if pin7 = 1 then chbit | boucle d'attente du départ à 0 volt |
low 2 | allumer la Led verte |
Par exemple : l'impulsion 59" est en train de se terminer, la tension sur l'entrée était au niveau 5 volts, si la Led verte s'allume, c'est que l'impulsion suivante 0" est commencée.
L'instant est celui de la flèche ou front descendant.
pause 150 | attendre 150 ms après ce front à 0v. |
if pin7 = 1 then zero | si l'entrée est à 5 volts c'est un bit "0" ! |
sigbit = 1 | si ce n'est pas vrai, c'est que le bit est "1" ! |
goto suit | sauter à "suit" si le bit est "1" |
zero: sigbit = 0 | le bit est "0" |
suit: | |
second = second + 1 | incrémenter le compteur de secondes |
serout 0, T2400,(#second) | transmission des informations secondes en sortie pin0 de BS1. |
pause 100 | attendre 100 ms pour que l'entrée soit au +5 volts : voir figure juste au dessus, le trait bleu à droite. |
high 2 | extinction de la Led verte la seconde vient d'être signalée par son clignotement, elle indique aussi que le programme tourne. |
return | fin du sous-programme de détermination des bits "0" ou "1" |
Chargement du programme dcf77V2.bas pour BasicStamp1 : cliquez ici
Nota : il serait possible de changer la vitesse de transmission des informations suivants les besoins.
à suivre, pour voir la suite cliquez ici :