Oui c'est la première phase mais penser à créer un menu qui va évoluer au fil des fonctions.Suite...
comment débuter
1ere fonction à assurer:
Initialiser le pont à une position de référence, à la demande
nous avons déjà un programme qui détecte bien le zero référence
je pourrais commencer par créer un menu qui appelle le sous programme Init_PaP à l'aide de mon super clavier de compet
ou j'ai faux?
Préparer une série de grilles avec les 2x16 cases de votre afficheur.comment débuter ?
ton code ici[/CODE ] ( sans l'espace apres le deuxieme code)
Dans l'industrie, on ne mélange pas tout, les automates et la supervision ...J'ai fusionné les 2 programmes pas à pas/clavier
ça marchote... mais c'est pas terrible...
l'architecture ne doit pas être bonne...
Aller dans Options > Editeurcomment éviter que picaxe editor charge toutes les versions des programmes crées, en même temps?
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 20151901 revision 3 #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
symbol var_temp = w13 'variable temporaire
symbol Pos_actuelle = w12 'position courante
symbol Pos_cible = w11 'position cible
symbol Nb_de_pas = w10 'nombre de pas ? realiser
Symbol nombre = b3
Symbol touche = b2
Symbol compteur = b4
Symbol addition = w27
'reserve bits = b0
symbol Sens = bit0
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
'*********** memorisation en EEPROM **************
'*****Table des positions des voies m?morisees ***
eeprom 0,(0,125,256,125,0,126,128,162)
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
Prog_princ:
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
gosub init_pont
do
pos_cible = 32800
gosub Mise_en_position
loop
'#####################################################################
Init_PaP: 's/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est oculte
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arri?re
Do while FC_opto = 1 'en vitesse tr?s lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la d?tection faite, on initialise le compteur de pas ? 32000
return
'#####################################################################
Mise_en_position: 's/Programme calcul du nombre de pas a faire et commande du moteur.
If pos_cible > pos_actuelle then 'si la future position est dans le sens positif
Nb_de_pas = pos_cible - pos_actuelle 'calcul du nombre de pas
sens = cw 'et du sens
else
Nb_de_pas = pos_actuelle - pos_cible 'sinon , on fait l'inverse
sens = ccw
endif
'optimisation du sens
if Nb_de_pas > 4800 then 'Si on depasse 1/2 tour
Nb_de_pas = 9600 - Nb_de_pas 'on prends le complement
sens = sens + 1 'et on inverse le sens
endif
PaP(Nb_de_pas,sens,vit_lente) 'Action du moteur
serout B.7,N2400_16,(254,128,"Nb:",#Nb_de_pas," sens:",#sens," ")
return
's/programma saisie clavier ===========================
clavier:
nombre = 0
do
do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
select case touche
case = 12
pause 100
return 'fin de la saisie clavier
case = 11 'correction dernier chiffre
nombre = nombre/10
case < 240 'un chiffre valide est rentre
nombre = nombre*10 + touche 'ajout du chiffre
endselect
' serout B.7,N2400_16,(254,135,#nombre," ")
'puis on attend que les touches soient relachees pour eviter les repetitions
do
readadc a.0 , touche
loop while touche < 250
pause 200
loop
init_pont:
'Text sur display
serout B.7,N2400_16,(254,128,"init 0 pont?"," ")
serout B.7,N2400_16,(254,192,"NON=0 OUI=1"," ")
gosub clavier
if touche = 0 then : return : end if
if touche = 1 then : gosub clavier : end if
return
Tout à fait. Et comme déjà dit à de nombreuses reprises, on ne commence pas le code tant que l'on ne sait pas ce qu'il va faire.Dans l'industrie, on ne mélange pas tout, les automates et la supervision ...
Maintenant si c'est pour faire fonctionner les deux ensembles sur le même µC simple coeur, je ne sais pas faire. Attendre le lapin blanc ...
Voir post #284.c'est trop difficile pour moi de répondre au post 293 n'ayant pas d'experience dans la programmation et donc leurs limites....
Je ne pense pas que ça aille dans le bon sens ....post 292 ok merci beaucoup!! je vais tester ça et vous dire
Relisez ce qui est dit : Il ne faut pas utiliser le sous/programme clavier pour lancer une commande !apres ce petit essais d'assembler les 2 programmes je comprend qu'un clavier n'est pas vraiment adapté
Comprends pas ! le clavier vous renvoie une info en fonction du menu qui l'appelle. Donc ça peut être à tout moment pour n'importe quoi.le clavier pourrait être utiliser juste pour sélection des voies de garage autour du pont?
mais dans ce cas la il y aurait déjà une impossibilité d'utiliser ce clavier aussi pour la commande en manu des aiguillages?
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 20151901 revision 3 #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
symbol var_temp = w13 'variable temporaire
symbol Pos_actuelle = w12 'position courante
symbol Pos_cible = w11 'position cible
symbol Nb_de_pas = w10 'nombre de pas ? realiser
Symbol nombre = b3
Symbol touche = b2
Symbol compteur = b4
Symbol addition = w27
'reserve bits = b0
symbol Sens = bit0
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
'*********** memorisation en EEPROM **************
'*****Table des positions des voies m?morisees ***
eeprom 0,(0,125,256,125,0,126,128,162)
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
gosub init_pont
Prog_princ:
do
pos_cible = 32800
gosub Mise_en_position
loop
'#####################################################################
Init_PaP: 's/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est oculte
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arri?re
Do while FC_opto = 1 'en vitesse tr?s lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la d?tection faite, on initialise le compteur de pas ? 32000
return
'#####################################################################
Mise_en_position: 's/Programme calcul du nombre de pas a faire et commande du moteur.
If pos_cible > pos_actuelle then 'si la future position est dans le sens positif
Nb_de_pas = pos_cible - pos_actuelle 'calcul du nombre de pas
sens = cw 'et du sens
else
Nb_de_pas = pos_actuelle - pos_cible 'sinon , on fait l'inverse
sens = ccw
endif
'optimisation du sens
if Nb_de_pas > 4800 then 'Si on depasse 1/2 tour
Nb_de_pas = 9600 - Nb_de_pas 'on prends le complement
sens = sens + 1 'et on inverse le sens
endif
PaP(Nb_de_pas,sens,vit_lente) 'Action du moteur
serout B.7,N2400_16,(254,128,"Nb:",#Nb_de_pas," sens:",#sens," ")
return
's/programma saisi clavier ===========================
clavier:
nombre = 0
do
do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
select case touche
case = 12
pause 100
return 'fin de la saisie clavier
case = 11 'correction dernier chiffre
nombre = nombre/10
case < 240 'un chiffre valide est rentre
nombre = nombre*10 + touche 'ajout du chiffre
endselect
' serout B.7,N2400_16,(254,135,#nombre," ")
'puis on attend que les touches soient relachees pour eviter les repetitions
do
readadc a.0 , touche
loop while touche < 250
pause 200
loop
init_pont:
'Text sur display
serout B.7,N2400_16,(254,128,"init du pont?"," ")
serout B.7,N2400_16,(254,192,"NON=0 OUI=1"," ")
gosub clavier
if nombre = 0 then : return : end if
if nombre = 1 then : gosub clavier : end if
return
Non, je suis désolé, c'est l'opérateur qui décide via un menu !par contre je ne comprends pas cette phrase
on a pas à décider d'emblée dans un programme principal d'aller d'emblée sur une action comme l'initialisation du pont.
pourquoi puisque c'est la 1er action à faire?
#rem
###########################################
# Programme de gestion de pont tournant #
# Moteur PaP 200pas - driver EasyDriver #
# Date 20151901 revision 3 #
###########################################
#ENDREM
#picaxe 40X2
'************ initialisation *******************
setfreq m16 'frequence 16MHz interne
'*********** E/S ********************************
dirsB = %11100000 ' positionne B.5 et B.6 b7 en sorties
'entrees ------------------------------
symbol FC_opto = pinB.4 'Fin de course opto
'sorties ------------------------------
symbol dir = pinB.5 'sortie direction
symbol pas = B.6 'sortie pas
'*********** variables **************************
symbol var_temp = w13 'variable temporaire
symbol Pos_actuelle = w12 'position courante
symbol Pos_cible = w11 'position cible
symbol Nb_de_pas = w10 'nombre de pas ? realiser
Symbol nombre = b3
Symbol touche = b2
Symbol compteur = b4
Symbol addition = w27
'reserve bits = b0
symbol Sens = bit0
'*********** constantes **************************
symbol CW = 1 'sens horaire
symbol CCW = 0 'sens anti horaire (arbitraire)
symbol Vit_lente = 100 'predefini vitesse lente
symbol Vit_rapide = 20 'et vitesse rapide
'*********** memorisation en EEPROM **************
'*****Table des positions des voies m?morisees ***
eeprom 0,(0,125,256,125,0,126,128,162)
'*********** Macros ******************************
'definition macro avec parametres; Nb de pas, sens, periode entre pas.
#MACRO PaP(Nb,Sens,Per)
dir = Sens 'affecte 1 ou 0 ? dir donc ? B.5
for var_temp = 0 to Nb 'envoie Nb pulses au circuit
pulsout pas,1 'driver
pause Per ' pause en X fois 5?s
next
Pos_actuelle = sens * 2 * Nb + Pos_actuelle - Nb 'actualisation position du pont
'si sens =1 on ajoute Nb pas ? Pos_actuelle sinon on lui retranche Nb pas ;-)
#ENDMACRO
'############## Programme principal ############################
init:pause 500
SerOut B.7, N2400, ( 254, %00000001 ) ' efface l'ecran
pause 100
gosub init_pont
Prog_princ:
do
pos_cible = 32800
gosub Mise_en_position
loop
'#####################################################################
Init_PaP: 's/Programmes initialisation du moteur pas a pas
dir = cw
do while FC_opto = 1 'tout pendant que l'opto est oculte
pulsout pas,1 'on tourne en grande vitesse sens cw
pause Vit_rapide
loop
PaP(100,cw,Vit_rapide) 'la fente detectee, on passe au-dela - normalement 26 pas suffisent pour 1mm
dir = ccw 'puis on revient en arri?re
Do while FC_opto = 1 'en vitesse tr?s lente jusqu'a detection du bord de fente.
pulsout pas,1
pause Vit_lente
loop
Pos_actuelle = 32000 'la d?tection faite, on initialise le compteur de pas ? 32000
return
'#####################################################################
Mise_en_position: 's/Programme calcul du nombre de pas a faire et commande du moteur.
If pos_cible > pos_actuelle then 'si la future position est dans le sens positif
Nb_de_pas = pos_cible - pos_actuelle 'calcul du nombre de pas
sens = cw 'et du sens
else
Nb_de_pas = pos_actuelle - pos_cible 'sinon , on fait l'inverse
sens = ccw
endif
'optimisation du sens
if Nb_de_pas > 4800 then 'Si on depasse 1/2 tour
Nb_de_pas = 9600 - Nb_de_pas 'on prends le complement
sens = sens + 1 'et on inverse le sens
endif
PaP(Nb_de_pas,sens,vit_lente) 'Action du moteur
serout B.7,N2400_16,(254,128,"Nb:",#Nb_de_pas," sens:",#sens," ")
return
's/programma saisi clavier ===========================
clavier:
nombre = 0
do
do
readadc a.0 , touche ' On detecte un appui
loop while touche > 250
pause 100
for compteur = 0 to 19 ' on mesure 20 fois
readadc a.0 , touche ' On lit la touche appuyee
addition = addition + touche ' on fait la somme
next
touche = addition / 20
addition = 0
select case touche 'on reaffecte aux touches leurs vraies valeurs sauf # et *
case > 133 : touche = 1
case > 128 : touche = 2
case > 122 : touche = 3
case > 111 : touche = 4
case > 105 : touche = 5
case > 98 : touche = 6
case > 81 : touche = 7
case > 71 : touche = 8
case > 60 : touche = 9
case > 35 : touche = 11 'correction
case > 20 : touche = 0
case > 0 : touche = 12 'validation
endselect
select case touche
case = 12
pause 100
return 'fin de la saisie clavier
case = 11 'correction dernier chiffre
nombre = nombre/10
case < 240 'un chiffre valide est rentre
nombre = nombre*10 + touche 'ajout du chiffre
endselect
' serout B.7,N2400_16,(254,135,#nombre," ")
'puis on attend que les touches soient relachees pour eviter les repetitions
do
readadc a.0 , touche
loop while touche < 250
pause 200
loop
init_pont:
'Text sur display
serout B.7,N2400_16,(254,128,"init du pont?"," ")
serout B.7,N2400_16,(254,192,"NON=0 OUI=1"," ")
gosub clavier
if nombre = 0 then : return : end if
if nombre = 1 then : gosub Init_PaP: : end if
return
Merci de lire ce qui a été dit concernant l'approche à avoir .Decidemment je les accumule . A lieu d'aller a init_PaP , j'allais a gocub clavier . ( vous auriez pus le trouver lol) .
Un dernier cette fosi en esperant que c'est la bonne :
Soyez persuadé que tenter d'écrire un programme sans savoir ce qu'il va faire est encore plus chronophage...oui bé c"est plus facile à dire qu'à faire quand on sait pas comme moi ou je vais et comment y aller
Loin de moi l'idée de vouloir t'irriter, crois le bien .Ce programme est l'exemple même de ce qu'on dit de ne pas faire! c'est un peu irritant !
ici ta citation[/QUOTE ] pour bien les differencier de tes dires, ce sera plus agréable pour nous de te lire.
Ah ?Il est difficile de dire ou on veut aller , quand on ne sait pas comment y aller .
Ah que cet IHM serait facile à écrire avec un terminal Minitel ( ou similaire, mais je n' en connais pas ).Soyez persuadé que tenter d'écrire un programme sans savoir ce qu'il va faire est encore plus chronophage...
Sincèrement, tentez l'exercice : une petite grille, de 1 à 3 choix possibles à chaque fois :
Ecran N°1 :
1:INIT 2:Etalon
Votre choix :__
==> Je tape 1 et je valide.
Ecran N°2:
INIT en cours
Validation=ARRET
Quand c'est fini on revient à Ecran N°1
==> Je tape 2 et je valide.
Ecran N°3 :
ETALON en cours
Numéro Voie =__
Je choisi la voie N°1
Le pont se positionne à la dernière valeur enregistrée pour la voie N°1
Au premier lancement, c'est la position enregistrée par défaut.
Ecran N°4 :
Voie01 vitesse=8
4<>6 8<>2
Chaque appui sur la touche 4 provoque une rotation d'un pas entier.
Idem pour 6 dans l'autre sens.
Les appuis sur 8 et 2 permettent de multiplier ou de diviser la vitesse par 2 (entre 1 et 64)
La touche Effacement (faudrait lui donner un nom?) passe à écran N°5 sans sauvegarder.
La touche Validation sauvegarde et passe à écran N°5
Ecran N°5 :
1:INIT 2:Etalon
3:Exploit Chx:__
Je choisis : 3
Ecran N°6
Voie actuelle : 01
Votre choix : __
Je choisis la voie N°2 et je valide.
le pont se positionne sur la dernière position enregistrée pour la voie N°2, puis revient à écran N°6
Pour sortir, tapez la voie N°99 qui renvoie à écran N°5
Dites les gars...Il faudrait voir la difficulté que demanderait cela avec un expert qu ias deja travailler la dessus .
Ben tiens donc !Et pas forcément super compliqué , des modules tout fait existe , et ya même une discussion qui en parle en ce moment.
On pourrait faire un équivalent avec un écran LCD afficheur-serie et un clavier de PC en ps2.Ah que cet IHM serait facile à écrire avec un terminal Minitel ( ou similaire, mais je n' en connais pas ).