lien vers index

lien vers sommaire

carte qsl f6agv

Sciences Informatique Espace Communication Loisirs Expérimentation
dcf77

RECEPTION DCF77 (2)

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 :    

 

©2002 concept par SIECLE21 (F6AGV) toute reproduction autorisée si mention du site. Mise à jour le : 04/08/2009