MVTECHNIQUE
Well-known member
Serait il possible qu a la fin du temps lorsque l affichage passe de 0000 puis reste vierge ( ne plus rien afficher )
lorsqu on pousse sur le bouton start l affichage s allume de nouveau.
Bonjour,CORRECTION
serait il possible qu a la fin du cycle lorsque la led verte s eteint l affichage s eteigne aussi. L affichage se rallumera lors d 'un nouveau start
Oui, mais le décompte démarre immédiatement avec la valeur mémoriséeSerait il possible qu a la fin du temps lorsque l affichage passe de 0000 puis reste vierge ( ne plus rien afficher )
lorsqu on pousse sur le bouton start l affichage s allume de nouveau.
; décompteur 1/10s MM 050726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s => retour valeur enregistrée.
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passge en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol start=pinB.7
symbol orange=B.0 ;led
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité)
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %10000111 ;sur C.0,C.6,C.7,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59285 ;1/10 s à 16MHs 59285
; ***** init TM1637 et temps EEPROM
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
do
timer=0
high rouge
;boucle décomptage
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
; On éteint tout
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité nulle
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
do loop while start=1
;On rallume tout
clk=1 : dio=1 : dio=0 ;bal start
Octet=$8c ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5 min 0
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;fin de boucle intro secondes
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
; décompteur 1/10s MM 060726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol start=pinB.7
symbol orange=B.0 ;led
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 + 8(allumé, 0:éteint) + 0 à 7(intensité)
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %10000111 ;sur C.0,C.6,C.7,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59285 ;1/10 s à 16MHs 59285
; ***** init TM1637 et temps EEPROM
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
;On rallume tout si afficheur éteint
clk=1 : dio=1 : dio=0 ;bal start
Octet=$8c ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
do
timer=0
high rouge
;boucle décomptage
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
; On éteint tout
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
do loop while start=1 and mem=1
if mem=0 then decompt
;On rallume tout
clk=1 : dio=1 : dio=0 ;bal start
Octet=$8c ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5 min 0
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;fin de boucle intro secondes
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
; décompteur 1/10s MM 060726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol start=pinB.7
symbol orange=B.0 ;led
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %10000111 ;sur C.0,C.6,C.7,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59285 ;1/10 s à 16MHs 59285
; ***** init TM1637 et temps EEPROM
gosub allume
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
;On rallume tout si afficheur éteint
gosub allume
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
timer=0
do
do
high rouge
;boucle décomptage
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
; On éteint tout
gosub eteint
do loop while start=1 and mem=1 ;attente appui sur start ou mem
if mem=0 then decompt
;On rallume tout
gosub allume
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5 min 0
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;fin de boucle intro secondes
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
allume:
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
eteint:
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
bonjour le decompte ne demarre pas lors de l'appuis sur le bouton startJ'ai fait deux sub: "allume" et "eteint", c'est plus clair.
Code:; décompteur 1/10s MM 060726 ; réglage par poussoirs +/- ;pour temps=9990 10ème s => tmax=16 mn 39s; ;les poussoirs sont sur le 0V, ;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 ;****** MODE D'EMPLOI ********** ;A la mise sous tension, mémoire vide, passage auto en mode programmation temps ;Mode Programmation du temps: ;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3 ;Pour identifier ce mode,il y a en plus un point sur le digit 4 ;Appui sur plus: ; appui court < 500ms => incrémentation de 1 ; appui long > 500ms => défilemenrt rapide ;Appui sur moins: ; Idem en décrémentation ;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM ;Passage en mode décomptage ; ;Mode décomptage. ;Le point sur le digit 4 disparait,reste le point décimal digit3 ;Attente appui sur poussoir start => décompte du temps led rouge allumée. ;A 5 s => led orange allumée ;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint ;Deux possibilités: ;Appui sur start => le cycle repart avec valeur en mémoire ;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible ;Arrêt possible par appui sur MEM à tout moment du décompte ;MEM => arret décompte => retour attente start avec temps mémorisé ;deuxième appui sur MEM =>passage en mode programmation #picaxe 20X2 setfreq M16 symbol dio=pinC.1 ;sur TM1637 symbol clk=pinC.2 ;idem symbol mem=pinC.0 ;poussoir MEM symbol plus=pinC.6 ;poussoir plus symbol moins=pinC.7 symbol start=pinB.7 symbol orange=B.0 ;led symbol rouge=B.1 symbol verte=B.2 symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé symbol j=b1 ;position point décimal symbol i=b2 ;compteur symbol chiffre=b3 symbol dp=b4 symbol point=b5 symbol second=w12 ;en fait des /10 de secondes symbol div=w13 symbol nbre=w14 symbol Ttot=w15 symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante dp=$80 ;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 pullup %10000111 ;sur C.0,C.6,C.7,B.7 dirsC=%110 ;pour utilisation pinsC settimer 59285 ;1/10 s à 16MHs 59285 ; ***** init TM1637 et temps EEPROM gosub allume low rouge,verte,orange read 0,Ttot ;lecture temps en EEPROM if Ttot=0 then ;la mémoire est vide gosub introtemp ;entrer une valeur en mémoire EEPROM endif second=Ttot ;initialisation compteur seconde gosub affich ;affichage temps initial ;********decompte ******* decompt: pause 200 ;On rallume tout si afficheur éteint gosub allume do loop while mem=0 ;attente relachement suite arret decompte low rouge do second=Ttot gosub affich do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start do do timer=0 high rouge ;boucle décomptage second=Ttot -timer if second < 50 then ;5 secondes avant la fin high orange endif if mem=0 then decompt ;arret décompte et RAZ gosub affich loop while second<>0 high verte:low orange,rouge ;fin décompte timer=0 do loop while timer <= 100 ;attente 10s led verte ON low rouge,verte,orange ; On éteint tout gosub eteint do loop while start=1 and mem=1 ;attente appui sur start ou mem if mem=0 then decompt ;On rallume tout gosub allume loop loop introtemp: ;sub intro nouveau temps ;********** intro secondes ******* pause 200 do loop while mem=0 ;attente relachement pous pause 200 point=1 ;ajout point décimal sur digit n°4 do gosub affich timer=0 ;***** code plus ***** if plus=0 then second =second+5 max 9995 do while plus=0 if timer >5 then ;500ms défilement accéléré second =second+5 max 9995 gosub affich endif loop gosub affich endif ; code moins if moins=0 then second =second-5 min 0 do while moins=0 if timer >5 then second =second-5 if second>9999 then: second=0 :endif ;dépassement négatif gosub affich endif loop gosub affich endif if mem=0 then exit ;fin de boucle intro secondes loop do loop while mem=0 ;attente relâchement poussoir Ttot=second write 0,Ttot ;mise en EEPROM high orange, rouge :pause 500:low orange, rouge:pause 500 high orange, rouge :pause 500:low orange, rouge point=0 ;sortie mode introtemps gosub affich return affich: div=1000 clk=1 : dio=1 : dio=0 ;balise start Octet=adrdep ;synchro adresse départ gosub EnvoiOctet Nbre=second ;on tronçonne Nbre et affiche chaque chiffre for j=1 to 4 Chiffre=Nbre/Div ;on isole le chiffre à afficher if j=1 and second<1000 and second<>0 then chiffre=10 ;chiffre "blanc" càd noir, en fait endif if j=2 and second<100 and second<>0 then chiffre=10 endif lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement if j=3 then ;choix affichage point octet=octet | dp ;ajout point décimal endif if point=1 and j=4 then ;mode programmation temps octet=octet | dp ;ajout point digit 4 endif gosub EnvoiOctet; Nbre=Nbre//Div Div=Div/10 next j clk=0: dio=0: clk=1: dio=1 ;balise stop return allume: clk=1 : dio=1 : dio=0 ;bal start Octet=RegLum ;Réglage luminosité gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return eteint: clk=1 : dio=1 : dio=0 ;bal start Octet=$80 ;Réglage luminosité =0 gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return ;******* Envoi des chiffres (octet) bit à bit dans le registre ******** EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi clk=0 dio=bit0 Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0 clk=1 next i clk=0 :clk=1: clk=0 ; balise ACK return
MM
Ok, je pense qu'il y a eu un pb de copier- coller, regarde où est le timer =0 dans le programme,Bonjour,
Dans aucune des versions?Code:do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start timer=0 do do high rouge ;boucle décomptage second=Ttot -timer if second < 50 then ;5 secondes avant la f
Donne une description plus complète, je n'ai plus le moyen de tester les programmes.
MM
;
; décompteur 1/10s MM 060726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol start=pinB.7
symbol orange=B.0 ;led
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %10000111 ;sur C.0,C.6,C.7,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59285 ;1/10 s à 16MHs 59285
; ***** init TM1637 et temps EEPROM
gosub allume
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
;On rallume tout si afficheur éteint
gosub allume
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
timer=0
do ;boucle décomptage
high rouge
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
; On éteint tout
gosub eteint
do loop while start=1 and mem=1 ;attente appui sur start ou mem
if mem=0 then decompt
;On rallume tout
gosub allume
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5 min 0
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;fin de boucle intro secondes
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
allume:
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
eteint:
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
cette version fonctionne je vais tester plus en profondeur mais ca a l'air de bien fonctionner merci 100000x pour tout ce travail bien faitLe reset du timer là est la question:
finalement, je reposte le code, avec le reset au bon endroit...j'espère :
J'avais repris 050726.... j'ai remodifié...
Code:; ; décompteur 1/10s MM 060726 ; réglage par poussoirs +/- ;pour temps=9990 10ème s => tmax=16 mn 39s; ;les poussoirs sont sur le 0V, ;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 ;****** MODE D'EMPLOI ********** ;A la mise sous tension, mémoire vide, passage auto en mode programmation temps ;Mode Programmation du temps: ;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3 ;Pour identifier ce mode,il y a en plus un point sur le digit 4 ;Appui sur plus: ; appui court < 500ms => incrémentation de 1 ; appui long > 500ms => défilemenrt rapide ;Appui sur moins: ; Idem en décrémentation ;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM ;Passage en mode décomptage ; ;Mode décomptage. ;Le point sur le digit 4 disparait,reste le point décimal digit3 ;Attente appui sur poussoir start => décompte du temps led rouge allumée. ;A 5 s => led orange allumée ;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint ;Deux possibilités: ;Appui sur start => le cycle repart avec valeur en mémoire ;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible ;Arrêt possible par appui sur MEM à tout moment du décompte ;MEM => arret décompte => retour attente start avec temps mémorisé ;deuxième appui sur MEM =>passage en mode programmation #picaxe 20X2 setfreq M16 symbol dio=pinC.1 ;sur TM1637 symbol clk=pinC.2 ;idem symbol mem=pinC.0 ;poussoir MEM symbol plus=pinC.6 ;poussoir plus symbol moins=pinC.7 symbol start=pinB.7 symbol orange=B.0 ;led symbol rouge=B.1 symbol verte=B.2 symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé symbol j=b1 ;position point décimal symbol i=b2 ;compteur symbol chiffre=b3 symbol dp=b4 symbol point=b5 symbol second=w12 ;en fait des /10 de secondes symbol div=w13 symbol nbre=w14 symbol Ttot=w15 symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante dp=$80 ;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 pullup %10000111 ;sur C.0,C.6,C.7,B.7 dirsC=%110 ;pour utilisation pinsC settimer 59285 ;1/10 s à 16MHs 59285 ; ***** init TM1637 et temps EEPROM gosub allume low rouge,verte,orange read 0,Ttot ;lecture temps en EEPROM if Ttot=0 then ;la mémoire est vide gosub introtemp ;entrer une valeur en mémoire EEPROM endif second=Ttot ;initialisation compteur seconde gosub affich ;affichage temps initial ;********decompte ******* decompt: pause 200 ;On rallume tout si afficheur éteint gosub allume do loop while mem=0 ;attente relachement suite arret decompte low rouge do second=Ttot gosub affich do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start do timer=0 do ;boucle décomptage high rouge second=Ttot -timer if second < 50 then ;5 secondes avant la fin high orange endif if mem=0 then decompt ;arret décompte et RAZ gosub affich loop while second<>0 high verte:low orange,rouge ;fin décompte timer=0 do loop while timer <= 100 ;attente 10s led verte ON low rouge,verte,orange ; On éteint tout gosub eteint do loop while start=1 and mem=1 ;attente appui sur start ou mem if mem=0 then decompt ;On rallume tout gosub allume loop loop introtemp: ;sub intro nouveau temps ;********** intro secondes ******* pause 200 do loop while mem=0 ;attente relachement pous pause 200 point=1 ;ajout point décimal sur digit n°4 do gosub affich timer=0 ;***** code plus ***** if plus=0 then second =second+5 max 9995 do while plus=0 if timer >5 then ;500ms défilement accéléré second =second+5 max 9995 gosub affich endif loop gosub affich endif ; code moins if moins=0 then second =second-5 min 0 do while moins=0 if timer >5 then second =second-5 if second>9999 then: second=0 :endif ;dépassement négatif gosub affich endif loop gosub affich endif if mem=0 then exit ;fin de boucle intro secondes loop do loop while mem=0 ;attente relâchement poussoir Ttot=second write 0,Ttot ;mise en EEPROM high orange, rouge :pause 500:low orange, rouge:pause 500 high orange, rouge :pause 500:low orange, rouge point=0 ;sortie mode introtemps gosub affich return affich: div=1000 clk=1 : dio=1 : dio=0 ;balise start Octet=adrdep ;synchro adresse départ gosub EnvoiOctet Nbre=second ;on tronçonne Nbre et affiche chaque chiffre for j=1 to 4 Chiffre=Nbre/Div ;on isole le chiffre à afficher if j=1 and second<1000 and second<>0 then chiffre=10 ;chiffre "blanc" càd noir, en fait endif if j=2 and second<100 and second<>0 then chiffre=10 endif lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement if j=3 then ;choix affichage point octet=octet | dp ;ajout point décimal endif if point=1 and j=4 then ;mode programmation temps octet=octet | dp ;ajout point digit 4 endif gosub EnvoiOctet; Nbre=Nbre//Div Div=Div/10 next j clk=0: dio=0: clk=1: dio=1 ;balise stop return allume: clk=1 : dio=1 : dio=0 ;bal start Octet=RegLum ;Réglage luminosité gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return eteint: clk=1 : dio=1 : dio=0 ;bal start Octet=$80 ;Réglage luminosité =0 gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return ;******* Envoi des chiffres (octet) bit à bit dans le registre ******** EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi clk=0 dio=bit0 Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0 clk=1 next i clk=0 :clk=1: clk=0 ; balise ACK return
MM
Vérifie que tout fonctionne comme prévu, possibilité de sortir de la boucle par mem, modif du temps, etccette version fonctionne je vais tester plus en profondeur mais ca a l'air de bien fonctionner merci 100000x pour tout ce travail bien fait
il faudrait peut etre faire un clear de la memoire apres envois d'un nouveau programme dans le picaxe. En effet il se met bien en mode programme du temps mais si par erreur j appuie sur la touche moins j ai des valeurs bizarre qui s affiche. Tout rentre dans l'ordre si j appuie sur la touche + . C est pas en sois grave ( on injecte pas le programme souvent ) mais pour le fun ....... le reste c est topca fonctionne bien c est parfais
; décompteur 1/10s MM 060726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol start=pinB.7
symbol orange=B.0 ;led
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %10000111 ;sur C.0,C.6,C.7,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59285 ;1/10 s à 16MHs 59285
; ***** init TM1637 et temps EEPROM
gosub allume
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
;On rallume tout si afficheur éteint
gosub allume
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
timer=0
do ;boucle décomptage
high rouge
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
gosub eteint ; On éteint tout
do loop while start=1 and mem=1 ;attente appui sur start ou mem
if mem=0 then decompt
gosub allume ;On rallume tout
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5
if second > 9999 then: second=0:endif ;passage en négatif
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;fin de boucle intro secondes
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
allume:
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
eteint:
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
Bonjour , cette version fonctionne correctement.Ok, je vois ça, en fait, si on fait un - à partir de 0, on boucle sur 65535 çàd: 0-1=65535...Je pensais ce pb réglé, apparemment, c'est pas le cas
A suivre.
Il y avait un min=0, mais ça ne fonctionne pas bien, j'ai modifié. Au testeur de tester....
MMCode:; décompteur 1/10s MM 060726 ; réglage par poussoirs +/- ;pour temps=9990 10ème s => tmax=16 mn 39s; ;les poussoirs sont sur le 0V, ;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 ;****** MODE D'EMPLOI ********** ;A la mise sous tension, mémoire vide, passage auto en mode programmation temps ;Mode Programmation du temps: ;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3 ;Pour identifier ce mode,il y a en plus un point sur le digit 4 ;Appui sur plus: ; appui court < 500ms => incrémentation de 1 ; appui long > 500ms => défilemenrt rapide ;Appui sur moins: ; Idem en décrémentation ;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM ;Passage en mode décomptage ; ;Mode décomptage. ;Le point sur le digit 4 disparait,reste le point décimal digit3 ;Attente appui sur poussoir start => décompte du temps led rouge allumée. ;A 5 s => led orange allumée ;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint ;Deux possibilités: ;Appui sur start => le cycle repart avec valeur en mémoire ;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible ;Arrêt possible par appui sur MEM à tout moment du décompte ;MEM => arret décompte => retour attente start avec temps mémorisé ;deuxième appui sur MEM =>passage en mode programmation #picaxe 20X2 setfreq M16 symbol dio=pinC.1 ;sur TM1637 symbol clk=pinC.2 ;idem symbol mem=pinC.0 ;poussoir MEM symbol plus=pinC.6 ;poussoir plus symbol moins=pinC.7 symbol start=pinB.7 symbol orange=B.0 ;led symbol rouge=B.1 symbol verte=B.2 symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé symbol j=b1 ;position point décimal symbol i=b2 ;compteur symbol chiffre=b3 symbol dp=b4 symbol point=b5 symbol second=w12 ;en fait des /10 de secondes symbol div=w13 symbol nbre=w14 symbol Ttot=w15 symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante dp=$80 ;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 pullup %10000111 ;sur C.0,C.6,C.7,B.7 dirsC=%110 ;pour utilisation pinsC settimer 59285 ;1/10 s à 16MHs 59285 ; ***** init TM1637 et temps EEPROM gosub allume low rouge,verte,orange read 0,Ttot ;lecture temps en EEPROM if Ttot=0 then ;la mémoire est vide gosub introtemp ;entrer une valeur en mémoire EEPROM endif second=Ttot ;initialisation compteur seconde gosub affich ;affichage temps initial ;********decompte ******* decompt: pause 200 ;On rallume tout si afficheur éteint gosub allume do loop while mem=0 ;attente relachement suite arret decompte low rouge do second=Ttot gosub affich do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start do timer=0 do ;boucle décomptage high rouge second=Ttot -timer if second < 50 then ;5 secondes avant la fin high orange endif if mem=0 then decompt ;arret décompte et RAZ gosub affich loop while second<>0 high verte:low orange,rouge ;fin décompte timer=0 do loop while timer <= 100 ;attente 10s led verte ON low rouge,verte,orange gosub eteint ; On éteint tout do loop while start=1 and mem=1 ;attente appui sur start ou mem if mem=0 then decompt gosub allume ;On rallume tout loop loop introtemp: ;sub intro nouveau temps ;********** intro secondes ******* pause 200 do loop while mem=0 ;attente relachement pous pause 200 point=1 ;ajout point décimal sur digit n°4 do gosub affich timer=0 ;***** code plus ***** if plus=0 then second =second+5 max 9995 do while plus=0 if timer >5 then ;500ms défilement accéléré second =second+5 max 9995 gosub affich endif loop gosub affich endif ; code moins if moins=0 then second =second-5 if second > 9999 then: second=0:endif ;passage en négatif do while moins=0 if timer >5 then second =second-5 if second>9999 then: second=0 :endif ;dépassement négatif gosub affich endif loop gosub affich endif if mem=0 then exit ;fin de boucle intro secondes loop do loop while mem=0 ;attente relâchement poussoir Ttot=second write 0,Ttot ;mise en EEPROM high orange, rouge :pause 500:low orange, rouge:pause 500 high orange, rouge :pause 500:low orange, rouge point=0 ;sortie mode introtemps gosub affich return affich: div=1000 clk=1 : dio=1 : dio=0 ;balise start Octet=adrdep ;synchro adresse départ gosub EnvoiOctet Nbre=second ;on tronçonne Nbre et affiche chaque chiffre for j=1 to 4 Chiffre=Nbre/Div ;on isole le chiffre à afficher if j=1 and second<1000 and second<>0 then chiffre=10 ;chiffre "blanc" càd noir, en fait endif if j=2 and second<100 and second<>0 then chiffre=10 endif lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement if j=3 then ;choix affichage point octet=octet | dp ;ajout point décimal endif if point=1 and j=4 then ;mode programmation temps octet=octet | dp ;ajout point digit 4 endif gosub EnvoiOctet; Nbre=Nbre//Div Div=Div/10 next j clk=0: dio=0: clk=1: dio=1 ;balise stop return allume: clk=1 : dio=1 : dio=0 ;bal start Octet=RegLum ;Réglage luminosité gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return eteint: clk=1 : dio=1 : dio=0 ;bal start Octet=$80 ;Réglage luminosité =0 gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return ;******* Envoi des chiffres (octet) bit à bit dans le registre ******** EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi clk=0 dio=bit0 Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0 clk=1 next i clk=0 :clk=1: clk=0 ; balise ACK return
Bonjour,Bonjour , cette version fonctionne correctement.
Je fais quelques essais en profondeur......mais je pense que tout est bon
Bonne journée
Bonjour peux tu sur la version 030726 corriger le bug "programmation" comme sur la version 060726 comme cela je disposeBonjour,
Il y a peut être un gosub allume en doublon à la fin de decompt, sans conséquence...
Ok, j'attends la prochaine demande de modif
MM
Bonjour,Bonjour peux tu sur la version 030726 corriger le bug "programmation" comme sur la version 060726 comme cela je dispose
d une version display toujours allumé et d une version display eteint apres le temps ecoulé
; décompteur 1/10s MM 060726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol start=pinB.7
symbol orange=B.0 ;led
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %10000111 ;sur C.0,C.6,C.7,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59286 ;1/10 s à 16MHs ; 59286 et non 59285...
; ***** init TM1637 et temps EEPROM
gosub allume ;règle l'allumage des segments
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
gosub allume ;On rallume tout si afficheur éteint
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
timer=0
do ;boucle décomptage
high rouge
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
;gosub eteint ; On éteint tout
do loop while start=1 and mem=1 ;attente appui sur start ou mem
if mem=0 then decompt ;on est sorti de l'attente
gosub allume ;On rallume tout
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5
if second > 9999 then: second=0:endif ;passage en négatif
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;sortie de boucle
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
allume:
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
eteint:
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
Bonjour,
Il suffit de mettre en commentaire le "gosub eteint" .
il y a des broches inutilisées, on pourrait ajouter un cavalier ou inter pour avoir les deux versions dispo.
Je viens de voir que la doc dit de prendre 65536 et non 65535 pour le calcul de set timer...c'est corrigé ci dessous
code à tester
Code:; décompteur 1/10s MM 060726 ; réglage par poussoirs +/- ;pour temps=9990 10ème s => tmax=16 mn 39s; ;les poussoirs sont sur le 0V, ;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 ;****** MODE D'EMPLOI ********** ;A la mise sous tension, mémoire vide, passage auto en mode programmation temps ;Mode Programmation du temps: ;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3 ;Pour identifier ce mode,il y a en plus un point sur le digit 4 ;Appui sur plus: ; appui court < 500ms => incrémentation de 1 ; appui long > 500ms => défilemenrt rapide ;Appui sur moins: ; Idem en décrémentation ;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM ;Passage en mode décomptage ; ;Mode décomptage. ;Le point sur le digit 4 disparait,reste le point décimal digit3 ;Attente appui sur poussoir start => décompte du temps led rouge allumée. ;A 5 s => led orange allumée ;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint ;Deux possibilités: ;Appui sur start => le cycle repart avec valeur en mémoire ;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible ;Arrêt possible par appui sur MEM à tout moment du décompte ;MEM => arret décompte => retour attente start avec temps mémorisé ;deuxième appui sur MEM =>passage en mode programmation #picaxe 20X2 setfreq M16 symbol dio=pinC.1 ;sur TM1637 symbol clk=pinC.2 ;idem symbol mem=pinC.0 ;poussoir MEM symbol plus=pinC.6 ;poussoir plus symbol moins=pinC.7 symbol start=pinB.7 symbol orange=B.0 ;led symbol rouge=B.1 symbol verte=B.2 symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé symbol j=b1 ;position point décimal symbol i=b2 ;compteur symbol chiffre=b3 symbol dp=b4 symbol point=b5 symbol second=w12 ;en fait des /10 de secondes symbol div=w13 symbol nbre=w14 symbol Ttot=w15 symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante dp=$80 ;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 pullup %10000111 ;sur C.0,C.6,C.7,B.7 dirsC=%110 ;pour utilisation pinsC settimer 59286 ;1/10 s à 16MHs ; 59286 et non 59285... ; ***** init TM1637 et temps EEPROM gosub allume ;règle l'allumage des segments low rouge,verte,orange read 0,Ttot ;lecture temps en EEPROM if Ttot=0 then ;la mémoire est vide gosub introtemp ;entrer une valeur en mémoire EEPROM endif second=Ttot ;initialisation compteur seconde gosub affich ;affichage temps initial ;********decompte ******* decompt: pause 200 gosub allume ;On rallume tout si afficheur éteint do loop while mem=0 ;attente relachement suite arret decompte low rouge do second=Ttot gosub affich do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start do timer=0 do ;boucle décomptage high rouge second=Ttot -timer if second < 50 then ;5 secondes avant la fin high orange endif if mem=0 then decompt ;arret décompte et RAZ gosub affich loop while second<>0 high verte:low orange,rouge ;fin décompte timer=0 do loop while timer <= 100 ;attente 10s led verte ON low rouge,verte,orange ;gosub eteint ; On éteint tout do loop while start=1 and mem=1 ;attente appui sur start ou mem if mem=0 then decompt ;on est sorti de l'attente gosub allume ;On rallume tout loop loop introtemp: ;sub intro nouveau temps ;********** intro secondes ******* pause 200 do loop while mem=0 ;attente relachement pous pause 200 point=1 ;ajout point décimal sur digit n°4 do gosub affich timer=0 ;***** code plus ***** if plus=0 then second =second+5 max 9995 do while plus=0 if timer >5 then ;500ms défilement accéléré second =second+5 max 9995 gosub affich endif loop gosub affich endif ; code moins if moins=0 then second =second-5 if second > 9999 then: second=0:endif ;passage en négatif do while moins=0 if timer >5 then second =second-5 if second>9999 then: second=0 :endif ;dépassement négatif gosub affich endif loop gosub affich endif if mem=0 then exit ;sortie de boucle loop do loop while mem=0 ;attente relâchement poussoir Ttot=second write 0,Ttot ;mise en EEPROM high orange, rouge :pause 500:low orange, rouge:pause 500 high orange, rouge :pause 500:low orange, rouge point=0 ;sortie mode introtemps gosub affich return affich: div=1000 clk=1 : dio=1 : dio=0 ;balise start Octet=adrdep ;synchro adresse départ gosub EnvoiOctet Nbre=second ;on tronçonne Nbre et affiche chaque chiffre for j=1 to 4 Chiffre=Nbre/Div ;on isole le chiffre à afficher if j=1 and second<1000 and second<>0 then chiffre=10 ;chiffre "blanc" càd noir, en fait endif if j=2 and second<100 and second<>0 then chiffre=10 endif lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement if j=3 then ;choix affichage point octet=octet | dp ;ajout point décimal endif if point=1 and j=4 then ;mode programmation temps octet=octet | dp ;ajout point digit 4 endif gosub EnvoiOctet; Nbre=Nbre//Div Div=Div/10 next j clk=0: dio=0: clk=1: dio=1 ;balise stop return allume: clk=1 : dio=1 : dio=0 ;bal start Octet=RegLum ;Réglage luminosité gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return eteint: clk=1 : dio=1 : dio=0 ;bal start Octet=$80 ;Réglage luminosité =0 gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return ;******* Envoi des chiffres (octet) bit à bit dans le registre ******** EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi clk=0 dio=bit0 Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0 clk=1 next i clk=0 :clk=1: clk=0 ; balise ACK return
MM
Bonjour,Ok pour ton idée de mettre un jumper pour selectionner le mode d'affichage toujours "ON" ou bien off a la fin du temps
; décompteur 1/10s MM 060726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilemenrt rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol A_E=pinB.6 ;affichage Allumé_Eteint
symbol start=pinB.7
symbol orange=B.0 ;leds
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5 ;point digit 4
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15 ;tepmps mémorisé
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %11000111 ;sur C.0,C.6,C.7,B.6,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59286 ;1/10 s à 16MHs 59286
; ***** init TM1637 et temps EEPROM
gosub allume ;règle l'allumage des segments
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
gosub allume ;On rallume tout si afficheur éteint
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
timer=0
do ;boucle décomptage
high rouge
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
if A_E=0 then ;option afficheur éteint
gosub eteint ; On éteint tout
endif
do loop while start=1 and mem=1 ;attente appui sur start ou mem
if mem=0 then decompt ;on est sorti de l'attente
gosub allume ;On rallume tout
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5
if second > 9999 then: second=0:endif ;passage en négatif
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;sortie de boucle
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
allume:
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
eteint:
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return

Bonjour en mode " display eteint " c 'est OKBonjour,
Le plus pratique serait un petit interrupteur à glissière quelque part, pour choisir sans rien démonter.
La R de pullup sur B.6 est activée, donc B.6=1 par défaut. On peut choisir à quoi cela correspond.
Ici, sans cavalier, ça reste allumé.
View attachment 27139Code:; décompteur 1/10s MM 060726 ; réglage par poussoirs +/- ;pour temps=9990 10ème s => tmax=16 mn 39s; ;les poussoirs sont sur le 0V, ;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 ;****** MODE D'EMPLOI ********** ;A la mise sous tension, mémoire vide, passage auto en mode programmation temps ;Mode Programmation du temps: ;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3 ;Pour identifier ce mode,il y a en plus un point sur le digit 4 ;Appui sur plus: ; appui court < 500ms => incrémentation de 1 ; appui long > 500ms => défilemenrt rapide ;Appui sur moins: ; Idem en décrémentation ;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM ;Passage en mode décomptage ; ;Mode décomptage. ;Le point sur le digit 4 disparait,reste le point décimal digit3 ;Attente appui sur poussoir start => décompte du temps led rouge allumée. ;A 5 s => led orange allumée ;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint ;Deux possibilités: ;Appui sur start => le cycle repart avec valeur en mémoire ;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible ;Arrêt possible par appui sur MEM à tout moment du décompte ;MEM => arret décompte => retour attente start avec temps mémorisé ;deuxième appui sur MEM =>passage en mode programmation #picaxe 20X2 setfreq M16 symbol dio=pinC.1 ;sur TM1637 symbol clk=pinC.2 ;idem symbol mem=pinC.0 ;poussoir MEM symbol plus=pinC.6 ;poussoir plus symbol moins=pinC.7 symbol A_E=pinB.6 ;affichage Allumé_Eteint symbol start=pinB.7 symbol orange=B.0 ;leds symbol rouge=B.1 symbol verte=B.2 symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé symbol j=b1 ;position point décimal symbol i=b2 ;compteur symbol chiffre=b3 symbol dp=b4 symbol point=b5 ;point digit 4 symbol second=w12 ;en fait des /10 de secondes symbol div=w13 symbol nbre=w14 symbol Ttot=w15 ;tepmps mémorisé symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante dp=$80 ;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 pullup %11000111 ;sur C.0,C.6,C.7,B.6,B.7 dirsC=%110 ;pour utilisation pinsC settimer 59286 ;1/10 s à 16MHs 59286 ; ***** init TM1637 et temps EEPROM gosub allume ;règle l'allumage des segments low rouge,verte,orange read 0,Ttot ;lecture temps en EEPROM if Ttot=0 then ;la mémoire est vide gosub introtemp ;entrer une valeur en mémoire EEPROM endif second=Ttot ;initialisation compteur seconde gosub affich ;affichage temps initial ;********decompte ******* decompt: pause 200 gosub allume ;On rallume tout si afficheur éteint do loop while mem=0 ;attente relachement suite arret decompte low rouge do second=Ttot gosub affich do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start do timer=0 do ;boucle décomptage high rouge second=Ttot -timer if second < 50 then ;5 secondes avant la fin high orange endif if mem=0 then decompt ;arret décompte et RAZ gosub affich loop while second<>0 high verte:low orange,rouge ;fin décompte timer=0 do loop while timer <= 100 ;attente 10s led verte ON low rouge,verte,orange if A_E=0 then ;option afficheur éteint gosub eteint ; On éteint tout endif do loop while start=1 and mem=1 ;attente appui sur start ou mem if mem=0 then decompt ;on est sorti de l'attente gosub allume ;On rallume tout loop loop introtemp: ;sub intro nouveau temps ;********** intro secondes ******* pause 200 do loop while mem=0 ;attente relachement pous pause 200 point=1 ;ajout point décimal sur digit n°4 do gosub affich timer=0 ;***** code plus ***** if plus=0 then second =second+5 max 9995 do while plus=0 if timer >5 then ;500ms défilement accéléré second =second+5 max 9995 gosub affich endif loop gosub affich endif ; code moins if moins=0 then second =second-5 if second > 9999 then: second=0:endif ;passage en négatif do while moins=0 if timer >5 then second =second-5 if second>9999 then: second=0 :endif ;dépassement négatif gosub affich endif loop gosub affich endif if mem=0 then exit ;sortie de boucle loop do loop while mem=0 ;attente relâchement poussoir Ttot=second write 0,Ttot ;mise en EEPROM high orange, rouge :pause 500:low orange, rouge:pause 500 high orange, rouge :pause 500:low orange, rouge point=0 ;sortie mode introtemps gosub affich return affich: div=1000 clk=1 : dio=1 : dio=0 ;balise start Octet=adrdep ;synchro adresse départ gosub EnvoiOctet Nbre=second ;on tronçonne Nbre et affiche chaque chiffre for j=1 to 4 Chiffre=Nbre/Div ;on isole le chiffre à afficher if j=1 and second<1000 and second<>0 then chiffre=10 ;chiffre "blanc" càd noir, en fait endif if j=2 and second<100 and second<>0 then chiffre=10 endif lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement if j=3 then ;choix affichage point octet=octet | dp ;ajout point décimal endif if point=1 and j=4 then ;mode programmation temps octet=octet | dp ;ajout point digit 4 endif gosub EnvoiOctet; Nbre=Nbre//Div Div=Div/10 next j clk=0: dio=0: clk=1: dio=1 ;balise stop return allume: clk=1 : dio=1 : dio=0 ;bal start Octet=RegLum ;Réglage luminosité gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return eteint: clk=1 : dio=1 : dio=0 ;bal start Octet=$80 ;Réglage luminosité =0 gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return ;******* Envoi des chiffres (octet) bit à bit dans le registre ******** EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi clk=0 dio=bit0 Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0 clk=1 next i clk=0 :clk=1: clk=0 ; balise ACK return
A tester...
MM
Bonjour,Bonjour en mode " display eteint " c 'est OK
en mode " display allumé" la led verte s'eteint bien mais l'affichage indique toujours 0000 au lieu de reafficher le temps programmé
; décompteur 1/10s MM 110726
; réglage par poussoirs +/-
;pour temps=9990 10ème s => tmax=16 mn 39s;
;les poussoirs sont sur le 0V,
;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
;****** MODE D'EMPLOI **********
;A la mise sous tension, mémoire vide, passage auto en mode programmation temps
;Mode Programmation du temps:
;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3
;Pour identifier ce mode,il y a en plus un point sur le digit 4
;Appui sur plus:
; appui court < 500ms => incrémentation de 1
; appui long > 500ms => défilement rapide
;Appui sur moins:
; Idem en décrémentation
;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM
;Passage en mode décomptage
;
;Mode décomptage.
;Le point sur le digit 4 disparait,reste le point décimal digit3
;Attente appui sur poussoir start => décompte du temps led rouge allumée.
;A 5 s => led orange allumée
;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint
;Deux possibilités:
;Appui sur start => le cycle repart avec valeur en mémoire
;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible
;Arrêt possible par appui sur MEM à tout moment du décompte
;MEM => arret décompte => retour attente start avec temps mémorisé
;deuxième appui sur MEM =>passage en mode programmation
#picaxe 20X2
setfreq M16
symbol dio=pinC.1 ;sur TM1637
symbol clk=pinC.2 ;idem
symbol mem=pinC.0 ;poussoir MEM
symbol plus=pinC.6 ;poussoir plus
symbol moins=pinC.7
symbol A_E=pinB.6 ;affichage Allumé_Eteint
symbol start=pinB.7
symbol orange=B.0 ;leds
symbol rouge=B.1
symbol verte=B.2
symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé
symbol j=b1 ;position point décimal
symbol i=b2 ;compteur
symbol chiffre=b3
symbol dp=b4
symbol point=b5 ;point digit 4
symbol second=w12 ;en fait des /10 de secondes
symbol div=w13
symbol nbre=w14
symbol Ttot=w15 ;tepmps mémorisé
symbol AdrDep=$c0 ; adresse du 1er digit (poids fort)
symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante
dp=$80
;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7
pullup %11000111 ;sur C.0,C.6,C.7,B.6,B.7
dirsC=%110 ;pour utilisation pinsC
settimer 59286 ;1/10 s à 16MHs 59286
; ***** init TM1637 et temps EEPROM
gosub allume ;règle l'allumage des segments
low rouge,verte,orange
read 0,Ttot ;lecture temps en EEPROM
if Ttot=0 then ;la mémoire est vide
gosub introtemp ;entrer une valeur en mémoire EEPROM
endif
second=Ttot ;initialisation compteur seconde
gosub affich ;affichage temps initial
;********decompte *******
decompt:
pause 200
gosub allume ;On rallume tout si afficheur éteint
do loop while mem=0 ;attente relachement suite arret decompte
low rouge
do
second=Ttot
gosub affich
do ;****** boucle attente départ ou intro temps ******
if mem=0 then gosub introtemp ;passage en programmation temps
loop while start=1 ;attente start
do
timer=0
do ;boucle décomptage
high rouge
second=Ttot -timer
if second < 50 then ;5 secondes avant la fin
high orange
endif
if mem=0 then decompt ;arret décompte et RAZ
gosub affich
loop while second<>0
high verte:low orange,rouge ;fin décompte
timer=0
do loop while timer <= 100 ;attente 10s led verte ON
low rouge,verte,orange
second=Ttot ;on recharge le temps mémorisé
gosub affich ;on l'affiche
if A_E=0 then ;option afficheur éteint
gosub eteint ; On éteint tout
endif
do loop while start=1 and mem=1 ;attente appui sur start ou mem
if mem=0 then decompt ;on est sorti de l'attente
gosub allume ;On rallume tout, éteint ou pas
loop
loop
introtemp: ;sub intro nouveau temps
;********** intro secondes *******
pause 200
do loop while mem=0 ;attente relachement pous
pause 200
point=1 ;ajout point décimal sur digit n°4
do
gosub affich
timer=0
;***** code plus *****
if plus=0 then
second =second+5 max 9995
do while plus=0
if timer >5 then ;500ms défilement accéléré
second =second+5 max 9995
gosub affich
endif
loop
gosub affich
endif
; code moins
if moins=0 then
second =second-5
if second > 9999 then: second=0:endif ;passage en négatif
do while moins=0
if timer >5 then
second =second-5
if second>9999 then: second=0 :endif ;dépassement négatif
gosub affich
endif
loop
gosub affich
endif
if mem=0 then exit ;sortie de boucle
loop
do loop while mem=0 ;attente relâchement poussoir
Ttot=second
write 0,Ttot ;mise en EEPROM
high orange, rouge :pause 500:low orange, rouge:pause 500
high orange, rouge :pause 500:low orange, rouge
point=0 ;sortie mode introtemps
gosub affich
return
affich:
div=1000
clk=1 : dio=1 : dio=0 ;balise start
Octet=adrdep ;synchro adresse départ
gosub EnvoiOctet
Nbre=second ;on tronçonne Nbre et affiche chaque chiffre
for j=1 to 4
Chiffre=Nbre/Div ;on isole le chiffre à afficher
if j=1 and second<1000 and second<>0 then
chiffre=10 ;chiffre "blanc" càd noir, en fait
endif
if j=2 and second<100 and second<>0 then
chiffre=10
endif
lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement
if j=3 then ;choix affichage point
octet=octet | dp ;ajout point décimal
endif
if point=1 and j=4 then ;mode programmation temps
octet=octet | dp ;ajout point digit 4
endif
gosub EnvoiOctet;
Nbre=Nbre//Div
Div=Div/10
next j
clk=0: dio=0: clk=1: dio=1 ;balise stop
return
allume:
clk=1 : dio=1 : dio=0 ;bal start
Octet=RegLum ;Réglage luminosité
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
eteint:
clk=1 : dio=1 : dio=0 ;bal start
Octet=$80 ;Réglage luminosité =0
gosub EnvoiOctet
clk=0: dio=0: clk=1: dio=1 ;bal stop
return
;******* Envoi des chiffres (octet) bit à bit dans le registre ********
EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête.
for i=1 to 8 ; envoi
clk=0
dio=bit0
Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0
clk=1
next i
clk=0 :clk=1: clk=0 ; balise ACK
return
cette version fonctionne parfaitement.J'ai testé toutes les fonctions et aucun bug. TOP BOULOTBonjour,
C'était pas comme ça avant? je sais plus...
Ok, après les 10s, on recharge le temps en mémoire et on l'affiche... ou pas.
Essaye ça :
Code:; décompteur 1/10s MM 110726 ; réglage par poussoirs +/- ;pour temps=9990 10ème s => tmax=16 mn 39s; ;les poussoirs sont sur le 0V, ;Broches avec pullup sur 20X2 : bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 ;****** MODE D'EMPLOI ********** ;A la mise sous tension, mémoire vide, passage auto en mode programmation temps ;Mode Programmation du temps: ;L'affichage est en /10 de seconde, avec un point décimal sur le digit 3 ;Pour identifier ce mode,il y a en plus un point sur le digit 4 ;Appui sur plus: ; appui court < 500ms => incrémentation de 1 ; appui long > 500ms => défilement rapide ;Appui sur moins: ; Idem en décrémentation ;Appui sur MEM => clignotement vert + rouge => mise en mémoire EEPROM ;Passage en mode décomptage ; ;Mode décomptage. ;Le point sur le digit 4 disparait,reste le point décimal digit3 ;Attente appui sur poussoir start => décompte du temps led rouge allumée. ;A 5 s => led orange allumée ;A 00,0 s => R et O éteintes, verte allumée 10 s puis, l'affichage s'éteint ;Deux possibilités: ;Appui sur start => le cycle repart avec valeur en mémoire ;Appui sur mem pour affichage temps mémorisé, un second appui pour réglage possible ;Arrêt possible par appui sur MEM à tout moment du décompte ;MEM => arret décompte => retour attente start avec temps mémorisé ;deuxième appui sur MEM =>passage en mode programmation #picaxe 20X2 setfreq M16 symbol dio=pinC.1 ;sur TM1637 symbol clk=pinC.2 ;idem symbol mem=pinC.0 ;poussoir MEM symbol plus=pinC.6 ;poussoir plus symbol moins=pinC.7 symbol A_E=pinB.6 ;affichage Allumé_Eteint symbol start=pinB.7 symbol orange=B.0 ;leds symbol rouge=B.1 symbol verte=B.2 symbol octet=b0 ;octet doit être en b0; le bit0 est utilisé symbol j=b1 ;position point décimal symbol i=b2 ;compteur symbol chiffre=b3 symbol dp=b4 symbol point=b5 ;point digit 4 symbol second=w12 ;en fait des /10 de secondes symbol div=w13 symbol nbre=w14 symbol Ttot=w15 ;tepmps mémorisé symbol AdrDep=$c0 ; adresse du 1er digit (poids fort) symbol RegLum=$8c ; réglage luminosité $80 = eteint, $88 à $8F => luminosité croissante dp=$80 ;pullup sur 20X2 bit0-bit7 = C.0,C.6,C.7,B.0,B.1,B.5,B.6,B.7 pullup %11000111 ;sur C.0,C.6,C.7,B.6,B.7 dirsC=%110 ;pour utilisation pinsC settimer 59286 ;1/10 s à 16MHs 59286 ; ***** init TM1637 et temps EEPROM gosub allume ;règle l'allumage des segments low rouge,verte,orange read 0,Ttot ;lecture temps en EEPROM if Ttot=0 then ;la mémoire est vide gosub introtemp ;entrer une valeur en mémoire EEPROM endif second=Ttot ;initialisation compteur seconde gosub affich ;affichage temps initial ;********decompte ******* decompt: pause 200 gosub allume ;On rallume tout si afficheur éteint do loop while mem=0 ;attente relachement suite arret decompte low rouge do second=Ttot gosub affich do ;****** boucle attente départ ou intro temps ****** if mem=0 then gosub introtemp ;passage en programmation temps loop while start=1 ;attente start do timer=0 do ;boucle décomptage high rouge second=Ttot -timer if second < 50 then ;5 secondes avant la fin high orange endif if mem=0 then decompt ;arret décompte et RAZ gosub affich loop while second<>0 high verte:low orange,rouge ;fin décompte timer=0 do loop while timer <= 100 ;attente 10s led verte ON low rouge,verte,orange second=Ttot ;on recharge le temps mémorisé gosub affich ;on l'affiche if A_E=0 then ;option afficheur éteint gosub eteint ; On éteint tout endif do loop while start=1 and mem=1 ;attente appui sur start ou mem if mem=0 then decompt ;on est sorti de l'attente gosub allume ;On rallume tout, éteint ou pas loop loop introtemp: ;sub intro nouveau temps ;********** intro secondes ******* pause 200 do loop while mem=0 ;attente relachement pous pause 200 point=1 ;ajout point décimal sur digit n°4 do gosub affich timer=0 ;***** code plus ***** if plus=0 then second =second+5 max 9995 do while plus=0 if timer >5 then ;500ms défilement accéléré second =second+5 max 9995 gosub affich endif loop gosub affich endif ; code moins if moins=0 then second =second-5 if second > 9999 then: second=0:endif ;passage en négatif do while moins=0 if timer >5 then second =second-5 if second>9999 then: second=0 :endif ;dépassement négatif gosub affich endif loop gosub affich endif if mem=0 then exit ;sortie de boucle loop do loop while mem=0 ;attente relâchement poussoir Ttot=second write 0,Ttot ;mise en EEPROM high orange, rouge :pause 500:low orange, rouge:pause 500 high orange, rouge :pause 500:low orange, rouge point=0 ;sortie mode introtemps gosub affich return affich: div=1000 clk=1 : dio=1 : dio=0 ;balise start Octet=adrdep ;synchro adresse départ gosub EnvoiOctet Nbre=second ;on tronçonne Nbre et affiche chaque chiffre for j=1 to 4 Chiffre=Nbre/Div ;on isole le chiffre à afficher if j=1 and second<1000 and second<>0 then chiffre=10 ;chiffre "blanc" càd noir, en fait endif if j=2 and second<100 and second<>0 then chiffre=10 endif lookup Chiffre,($3f,$06,$5b,$4f,$66,$6d,$7d,$07,$7f,$6f,0), Octet ; 0-9 +blanc uniquement if j=3 then ;choix affichage point octet=octet | dp ;ajout point décimal endif if point=1 and j=4 then ;mode programmation temps octet=octet | dp ;ajout point digit 4 endif gosub EnvoiOctet; Nbre=Nbre//Div Div=Div/10 next j clk=0: dio=0: clk=1: dio=1 ;balise stop return allume: clk=1 : dio=1 : dio=0 ;bal start Octet=RegLum ;Réglage luminosité gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return eteint: clk=1 : dio=1 : dio=0 ;bal start Octet=$80 ;Réglage luminosité =0 gosub EnvoiOctet clk=0: dio=0: clk=1: dio=1 ;bal stop return ;******* Envoi des chiffres (octet) bit à bit dans le registre ******** EnvoiOctet: ;lecture de b0 bit à bit de bit0 à bit8 poids faible en tête. for i=1 to 8 ; envoi clk=0 dio=bit0 Octet = Octet/2 ;décalage du bit lu, bit1 devient bit0 clk=1 next i clk=0 :clk=1: clk=0 ; balise ACK return
MM
Bon, ben tant mieux.
Si je peux avoir des précisions, photos, explications, sur son utilisation, sur quoi et à qui ça peut servir, c'est parfait...
Merci,le but du système est le suivant :
lors de certaines courses automobiles ont impose un temps d'arrêt au stand minimum calculé a partir de l'entrée des stands.C'est difficile pour le team manager ( que je suis )de savoir avec exactitude le moment où il a franchit la ligne d'entrée des stands et donc du début du chronométrage de l arrêt. Le pilote en appuyant sur la touche start déclenche le compte a rebours . Cela lui permet de sortir des stands et de reprendre la piste juste au bon moment ni trop tôt ( sinon pénalités ) ni trop tard .
La toute première version du système ( avec picbasic) était installé dans deux lamborghini .....
Ici les modules que nous avons fait seront plus modestement installés dans des citroen C1 que je gère en course.
Un display est placé a la vue du pilote et le deuxième est pour que de l'extérieur je vois le décompte.
Je suis en train de terminer les boitiers. Quand tout sera terminé je t'envois des photos.
je vais demander au team un petit budget pour faire une détection par module GPS du passage de la ligne d'entrée des stands......avec mise en mémoire des données(GPS ) de la ligne dans une sdcard.
Ok, je retire la barrière....suite .....
la première version du système date de 2016 et fonctionnait avec un BP ou une balise optique. Puis une grosse société de matériel électronique pour voiture de course a sorti une copie plus performante de mon système avec une détection GPS. Un des pilotes d'une des lamborghini n'était autre que le patron de cette société. Maintenant nous ne pouvons plus placer de balise au bord de piste.....
Je comprends bien qu'il y a un temps d’arrêt imposé, mais qui contrôle ce temps et comment est pris le top de départ de ce contrôle ?Ok, je retire la barrière....
MM
Ce serait trop simple..... Nous ne pouvons pas utiliser ce signal.
Ok, je n'ai pas cette expérience, j'avais simplement un doute sur la précision de la position.Les détections par GPS fonctionnent parfaitement. Tous les systèmes de chronométrages embarquées et acquisitions de données fonctionnent avec des antennes GPS .Je sais de quoi je parle j'installe dans des voitures des modules datalogger avec GPS pour le laptime. Precis au 10é de seconde.