Je comprends mal ce qui peut se passer car le timing du 14M2 est plus court que celui du 28X2Effectué .
La led s'allume tout de suite , rien ne bouge .
Je met a chaque fois tout le programme pour etre certain de ce que j'injecte.
#PICAXE 28X2
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
do
[COLOR="#0000FF"] get 0,b0,b1,b2,b3,b4,b5 ' Lecture du scratchpad
if b5 = 111 then gosub Escape
put 5, 111[/COLOR]
endif
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
[COLOR="#0000FF"]Escape:
Pulsout gyro, 5000
return[/COLOR]
#PICAXE 28X2
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
do
get 0,b0,b1,b2,b3,b4,b5 ' Lecture du scratchpad
if b5 = 111 then gosub Escape
put 5, 111
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
Escape:
Pulsout A.0, 5000
return
#PICAXE 14M2
'######################## Configuration ########################
Symbol Info = pinC.0
Symbol Klaxon = C.3
Symbol Phare = pinC.4
dirC.0=0 'declare C.0 en entrée DATA
dirC.3=1 'Declare C.3 comme une sortie Klaxon
dirC.4=1 'Declare C.4 comme sortie Phare
inputtype %0000000100000000 'met la broche C.0 en mode TDS
'######################## Initialisation ########################
setfreq m32 ' met le frequence a 32Mhz
hi2csetup i2cmaster, %10100000, i2cfast_32, i2cbyte ' met le 14M2 en mode maitre
'####################################################################################################
' Programme Principal
'####################################################################################################
do
b1 = 125
hi2cout 0,(b0,b1)
RFin C.0,b0,b1,b2,b3,b4,b5,b6,b7 'Enregistre les données du RX
Phare = bit0
hi2cout 0,(b0,b1,b2,b3,b4,b5,b6,b7) ' Envoi des données au scratchpad du 28X2 esclave
loop
Très bonne remarque effectivement.En radiocommande il est toujours conseillé de mettre l'émetteur en marche avant le récepteur et à l'inverse couper le récepteur avant l'émetteur,car le récepteur privé de signal peut
créer des signaux parasites qui peuvent entrainer des dysfonctionnements des servos (entre autres).
#PICAXE 28X2
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
main:
do
get 0,b0,b1,b2,b3,b4,b5 'Lecture du scratchpad
if b5 = 111 then
gosub Escape 'si pas de mise à jour
else
w12 = 0: gyro = 0 'sinon RAZ compteur défauts
endif
put 5, 111 'pseudo flag de test
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
'________________________________________
'traitement en cas de défaillances
'si plus de 50 consécutives, arrêt moteur + signal
Escape:
inc w12
w12 = w12 max 60000
If w12 > 50 then
pwmout B.0, OFF 'Moteur à l'arrêt
put 1, 125 ' lors du return laisse le moteur à 0
Gyro = 1 'allume le gyro
endif
return
'==========================================
#PICAXE 28X2
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
main:
do
if hi2cflag = 0 then Escape 'si pas de signal on appelle les pompiers
hi2cflag = 0 ' re-armement du flag
get 0,b0,b1,b2,b3,b4,b5 ' Lecture du scratchpad
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
Escape:
gyro = 1
goto main
Normal ! grosse fatigue 2 !!Quand le TX est allumé , la direction fonctionne bien , mais le moteur ne fonctionne pas . la led est éteinte en permanence.
Do
Pulsin ENTREE,1,w0 'Mesure créneau entrée
Loop while w0<800 or w0>1600 'Sécu demarrage, si TX éteint
On ne gère pas la perte de signal, mais la non réception d'un code numérique. Ce qui englobe aussi la perte de signal.Sans vouloir "radoter", je rapelle, ici, que le seul moyen de gérer une perte de niveau du signal reçu, c'est un RX avec une sortie RSSI.
Sur le coup, c'est toi qui as fait le boulot .Tu vois quand tu veux ...
C'est ici que je bloque . car que viens faire le RFin dans la mise a 1 du flag hi2c. comme les frequences de travail sont pas les memes , il s'ecoule 4 fois plus de temps entre les deux , a savoir que le flag est mise a 1 que l"esclave n'en lira qu'1 seul . je pense que je vais regarder cela de plus pret ;La difficulté tient au fait de l'irrégularité du rfin
#PICAXE 20M2
'########################## configuration ################################
symbol BUZ=C.0
symbol TX = B.4
symbol DONNEE = B.7
symbol Klax = pinC.6
symbol Phare= pinB.5
symbol Gyro= pinB.6
symbol sirene= pinB.1
symbol chgt= pinB.3
'########################## Initialisation ################################
setfreq m32 'Mets la freq à 32Mhz pour tout le programme, RFout se met a 4 mzh puis repasse à 32Mhz
dirsC = %00000001 'declare C.0 comme sortie
dirsB = %10010000 'declare B.4 et B.7 en sortie
high TX
'#################################################################################
'########################## Programme Principal ############################
'#################################################################################
do
readadc C.3,b1 'Av/ar voiture
readadc C.2,b3 'Dr/ga voiture
bit0 = Klax
bit1 = Phare
bit2 = sirene
bit3 = gyro
bit4 = chgt
rfout DONNEE,(b0,b1,b2,b3,b4,b5,b6,b7) 'envoi des données par RF
loop
#rem
low BUZ
'apres un tour eteint le BUZZER
if b8<>b0 then 'si changement d'un etat allume le BUZ
high BUZ 'fais un BIP
end if
b8=b0 ' recopie la valeur b0 dans b8
#endrem
Non ça ne marche pas comme ça.il s'ecoule 4 fois plus de temps entre les deux , a savoir que le flag est mise a 1 que l"esclave n'en lira qu'1 seul . je pense que je vais regarder cela de plus pret ;
la je suis d'accord Une fois la perte de liaison prouvée , il devrait y avoir une réaction .Avec le flag, on serait obligé de s'assurer qu'il il en a plusieurs de suite qui ne sont pas remis à 1. d'où un compteur et de prendre la décision d'un arrêt au bout d'un cetain temps.
Cela mérite explications, car je suis pas d'accord d'après mes test .le flag est mis à 1 si le 14M2 envoie ses données, donc si il n'est pas bloqué par RFin. Tout cela est lié.
Oui mais, il peut etre mis a 1 sans avoir etre recu . c'est ce qui se passe 1 fois sur 4 . L'esclave tourne 4 fois moins vite . donc loupe 3 infos sur 4 .le flag est mis à 1 si le 14M2 envoie ses données
Ca c'est sur , il vaut mieux s'assurer de l'erreur, avec de donner un vaccin . MAIS il est préférable de donner un anti-dote avant d'etre mordu . Avec le hi2cflag, l'erreur devrait être déterminée plus vite que 200 fois pour être fiable ? non ?Avec le flag, on serait obligé de s'assurer qu'il il en a plusieurs de suite
Ben le 14M2 attend ! et rien ne se passe, donc il n'y a plus de liaison i2c.Cela mérite explications, car je suis pas d'accord d'après mes test .
Que fais reelement un RFin bloqué ? je veut dire "softement" parlant?
Totalement faux. Ce n'est pas un problème de fréquence d'horloge, mais de durée du cycle du programme ce qui n'a rien à voir. Ici, c'est l'esclave qui attend la mise à jour en provenace du 14M2, car RFIN est une instruction qui demande du temps !Oui mais, il peut etre mis a 1 sans avoir etre recu . c'est ce qui se passe 1 fois sur 4 . L'esclave tourne 4 fois moins vite . donc loupe 3 infos sur 4 .
Si la connexion i2c est coupée, c'est certain que ce qui part n'arrive pas ! On se moque de l'info envoyée. On surveille le flag qui se met à 1 quand il y a écriture dans le scratchpadCela ne colle pas ,on respire , ca colle pas avec MA logique . une info envoyée n'est pas égale à une infos recue , avec les pertes . Le flag n'est pas mis à 1 si les infos sont envoyées. le flag est mis a 1 si les infos sont recues. la différence se situe la ; et notre probleme aussi !!!
Bonjour,Je préfère rajouté ,comme d'hab un gros merci a PieM (qui devrais ouvrir un site)
et Jojojo dit Georges ( pareil ouvrir un site)
un peu a l'image de MGU dit Michel celui la
Et la je pourrais en aider certains ...
Je dois être un mec super égoïste, car je conçois mal qu'une personne vienne me voir en me disant , S'il vous plait aidez moi .
sans que cette personne , me dise s'il vous plait aidez moi avant ????? genre ca
@MGU : ton site pourrait te ramené des sousous : @Me MP si interrssé
C'est vrai que PieM devrait ouvrir un site, nous en apprenons tous les jours grâce à lui.
"B5 = 111" y-a-t-il une raison pour avoir choisis 111 ?w12 = w12 max 60000
#PICAXE 14M2
'######################## Configuration ########################
Symbol Info = pinC.0
Symbol Klaxon = C.3
Symbol Phare = pinC.4
dirC.0=0 'declare C.0 en entrée DATA
dirC.3=1 'Declare C.3 comme une sortie Klaxon
dirC.4=1 'Declare C.4 comme sortie Phare
inputtype %0000000100000000 'met la broche C.0 en mode TDS
'######################## Initialisation ########################
setfreq m32 ' met le frequence a 32Mhz
hi2csetup i2cmaster, %10100000, i2cfast_32, i2cbyte ' met le 14M2 en mode maitre
'####################################################################################################
' Programme Principal
'####################################################################################################
do
b1 = 150
hi2cout 1,(b1) 'extinction du moteur
RFin C.0,b0,b1,b2,b3,b4,b5,b6,b7 'Enregistre les données du RX
Phare = bit0
hi2cout 0,(b0,b1,b2,b3,b4,b5,b6,b7) ' Envoi des données au scratchpad du 28X2 esclave
loop
aucun problème...Je pensais du coup changé le w12 par un byte plutôt , ou cela poserai-t-il probléme ?
faudra mettre max 255 si tu utilise un byte. C'est pour bloquer le comptage et eviter qu'il passe à 0 tout seul.je ne comprends pas cette ligne PieM ou plutot son utilité :
w12 = w12 max 60000
"B5 = 111" y-a-t-il une raison pour avoir choisis 111 ?
Oui, oui , tout mes tests sont fait, en arrêtant directement le TX afin de simuler la perte de com.Pour le reste, je ne sais pas. Tu as expérimenté en arrêtant le TX ?
Je cherche toujours à trouver une solution . Alors je veux bien un petit coup de main . Ca me chiffonne de de voir contourné le problème alors qu'il existe une fonction parfaite pour faire ca mais que ca ne fonctionne pas.Te passerai un nouveau programme demain avec le hi2cflag .....
Non nous ne sommes pas dans le cas d'une interruption. De toute façon l'interruption liée au hi2cflag se déclenche... quand le hi2cflag est mis à 1 !tu m'avais dis PieM, de ne pas utilisé l'interruption flag ( "setintflags" ), pourquoi , je trouve que l'interruption trouve tout son sens de ce cas d'urgence ? non ?
Désolé si je fais fausse route , j'essaie juste de comprendre
#PICAXE 28X2
#no_table
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
symbol compteur = w12
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens
hi2cflag =0 ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
main:
do
'boucle de contrôle --------
do while hi2cflag = 0
inc compteur
if compteur > 100 then Escape ' à ajuster à la plus petite valeur.
loop
' si écriture dans scrath
hi2cflag = 0
get 0,b0,b1,b2,b3,b4,b5 'Lecture du scratchpad
gyro = 0
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
'________________________________________
'traitement en cas de défaillances
' arrêt moteur + signal
Escape:
compteur = 0 'RAZ compteur
pwmduty B.0, 125 'Moteur à l'arrêt
Gyro = 1 'allume le gyro
pause 1000
goto main
'=========================================
Même avec "setintflags NOT " ? Allez j'arrete de t'embeter avec mes interruptions.De toute façon l'interruption liée au hi2cflag se déclenche... quand le hi2cflag est mis à 1 !
Oui mais un peu d'explication serait mieux car on ne voit pas ce que tu commandes !Alors voici le résultat : une vidéo vaut peut etre mieux que tout les discours ;
Le truc que je trouve intéressant c'est que la led s'éclaire très fort , donc elle ne clignote pas . Sinon le fonctionnement est plutôt étrange .
#PICAXE 28X2
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
main:
do
get 0,b0,b1,b2,b3,b4,b5 ' Lecture du scratchpad
if hi2cflag = 0 then 'Si flag=0, donc perte de com
b6 = b6+1 max 255
if b6>20 then
gyro = 1 ' On allume la led
end if
else
hi2cflag = 0 're-armement du flag
gyro = 0
b6 = 0 'extinction de la led temoin
end if
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
augmente la valeur du compteur qui est à 100 . Je n'avais pas calculé mais on est en 8 MHz ... mets le à 500 et tu diminues progressivement. Tu ne dois pas avoir d'allumage de la led, TX allumé.Test programme PieM ,
Donc :
J'allume la voiture , le TX est eteint :
Led allumée forte en permanence : tout va bien .
Voiture toujours allumé , j'allume le TX :
La voiture a un comportement tordue , elle avance doucement , et la led clignote périodiquement, je dirais toutes les secondes .Les commandes fonctionnent 1 secondes sur 2 .
Je re-eteins le TX , la led devient fixe , mais la voiture continue de rouler doucement
Oui car je jongle entre les deux , entre ta facon et la mienne lol .Si tu veux bien on ne vas pas travailler sur plusieurs programmes à la fois !
#PICAXE 28X2
#no_table
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
symbol compteur = w12
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens
hi2cflag =0 ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
main:
do
'boucle de contrôle --------
do while hi2cflag = 0
inc compteur
if compteur > 500 then Escape ' à ajuster à la plus petite valeur.
loop
' si écriture dans scrath
hi2cflag = 0
get 0,b0,b1,b2,b3,b4,b5 'Lecture du scratchpad
gyro = 0
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
'________________________________________
'traitement en cas de défaillances
' arrêt moteur + signal
Escape:
compteur = 0 'RAZ compteur
pwmduty B.0, 125 'Moteur à l'arrêt
put 1, 125
Gyro = 1 'allume le gyro
pause 1000
goto main
'=========================================
Que faudrait - il ?si tu n'as pas de moyen d'investigation pour visualiser le flag...
#PICAXE 28X2
'######################## Configuration ########################
Symbol moteur = B.0
Symbol sens = C.6
Symbol Direction = B.1
Symbol Pan = B.2
Symbol Tilt = B.3
Symbol Sirene = B.5
Symbol Secu = PinC.7
Symbol Gyro = pinA.0
Symbol Option = A.2
dirsA = %0101 'declare les broches A.0 et A.2 en sortie
dirsB = %00101111 'declare les broches B.0, B.1, B.2, B.3, et B.5 en sortie
dirsC = %01000000 'declare La broche C.7 en entrée
'######################## Initialisation ########################
setfreq m8
hi2csetup i2cslave, %10100000 ' Met le 28X2 en Esclave
servo B.1,150 'Servo direction en broche B.1, position neutre a 150, MAJ 20ms
pwmout B.0, 125, 0 ' rapport cyclique a 0
put 1,125 ' Ecrit dans le scratchpad la valeur du point milieu pour le moteur
put 3,125 ' Ecrit dans le scratchpad la valeur du point milieu de la direction
Low sens ' met le relais a l'etat bas
'####################################################################################################
' Programme Principal
'####################################################################################################
main:
do
get 0,b0,b1,b2,b3,b4,b5 ' Lecture du scratchpad
if hi2cflag = 0 then 'Si flag=0, donc perte de com
b6 = b6+1 max 25 'Compteur d'erreurs de flag
if b6>20 then 'quand 21 erreurs
put 1,125 'On eteint le moteur
end if
else
hi2cflag = 0 're-armement du flag
b6 = 0 'RAZ du compteur
end if
'##### Commande TOR #####
Gyro = bit4
'##### Commande moteur #####
Select Case b1
Case < 101 'Marche arriere
high sens
b1 = 100-b1 ' Mise a l'echelle
w13 = b1*37/10+130 max 500
Case > 128 'Marche avant
low sens
b1= b1-129 'Mise a l'echelle
w13 = b1*3+130 max 500 '130 commence à faire avancer la voiture.
else
w13 = 0 'Sinon point milieu , donc a l'arret
end select
pwmduty B.0, w13 'envoi du pwm sur le moteur
'##### Commande direction #####
Select case b3
case < 120
b3 = b3*3/8
b3 = 192 - b3
case > 134
b3 = b3*4/10
b3 = 200 - b3
else
b3=150
end select
servopos 1,b3
Loop
ça n'a rien à voir ! Tu vas faire un test pour mettre le compteur à 0 si il est différent de 0 ? c'est à dire que tu remplaces une instruction qui prend 200 µs par plusieurs qui prennent 4 fois plus de temps !!mais je me souviens du conseil de BEUSQUET et du lapin blanc . Dans ma configuration, a chaque tour il y as RAZ du compteur ce qui ne sert a rien si le compteur n'as pas décollé .