Horloge fille IBM
L'horloge suisse décrite sur cette page demande des pulses positifs et négatifs de 24V alternés toutes les 30 secondes;
L'horloge IBM ci dessous demande des pulses positifs de 24V toutes les minutes.
Cette page fait suite à
cette demande de mirdeni:
La version proposée est aussi cadencée par le comptage des alternances secteur.
Le schéma:

Le transfo utilisé est un 2x6v de 3W: Il est bien précisé que la tension à vide est de 10V par enroulement. En fait, après le redressement et la charge que représente le µC picaxe 08M2, la tension obtenue est de 24V.
Il y a toutefois un problème: le comptage doit se faire en continu pour ne perdre aucune alternance, le plus sûr est d'utiliser une interruption. Mais il faut envoyer un pulse (une valeur de 200ms semble convenir) sur une sortie.
Deux solutions pour le pulse:
Une pause, mais l'interruption intervient toute les 20ms et le retour saute la pause au bout de 20ms max.
Un pulsout, mais la commande suspend l'interruption et le comptage des alternances.
Le choix est finalement l'utilisation d'un programme "multitâches" de quatre tâches:
Une tâche pour le comptage, une pour le pulse horloge, une pour la mise à l'heure coup par coup, une dernière pour la mise à l'heure rapide.
Le programme:
;Horloge fille IBM MM 24/03/23
;façon multitâches
start0:
#picaxe 08M2
#no_data
symbol entr=pinC.3
symbol coup=pinC.1
symbol rapid=pinC.2
symbol potar=C.4
symbol IBM=C.0
symbol Npuls=w13
symbol tpuls=w12
symbol Nmax=w11
symbol comp=b1
symbol minut=w9
dirsC=%00001 ;
pullup %1110 ;pullup sur C.1,2,3,
tpuls=200 ;temps de pulse 20000=>200000µs=200ms
Nmax=3000 ;pour 1 mn: 50 x 60=3000
low IBM
pause 500 ;pour démarrer en douceur à la mise sous tension
do ;boucle principale avance minute
if Npuls>=Nmax then ; passage de la minute 3000 pulses
Npuls=0; ;RAZ compteur
inc minut
if minut>=15 then
readadc potar,comp ;o à 255
comp=comp/10 ;0 à 25
Npuls = comp ;
minut=0
endif
high IBM:pause tpuls:low IBM
endif
loop
start1: ;avance coup par coup
pause 500
do
do loop while coup=1 ;attente coup=0
high IBM:pause tpuls:low IBM
do loop while coup=0
Npuls=0 ;RAZ compteur
loop
rem
start2: ;avance rapide
pause 500
do
do loop ;attente rapid=0
do
high IBM:pause tpuls:low IBM
pause 500 ;temps entre 2 pulses (à confirmer)
loop while rapid=0
Npuls=0
loop
start3: ;comptage alternances
pause 500
Npuls=0 ;init compteur Npuls
do
do loop while entr=1 ;on attend le passage à 0
do loop while entr=0 ;on est à 0, on attend 1
inc Npuls ;on est à 1, on compte
loop