interruption

RENAUDMAS

New Member
Bonjour a tous
debutant dans la mise en oeuvre picaxe je voudrais vous soumettre
mon premier projet
sur picaxe 08m je selectionne des durées de compte a rebours differentes
par roue codeuse avec 3 entrees soit 8 possibilités (selection qui se fait avant la mise sous tension)
j'ai reservé une sortie pour commander un servo a la fin de la minuterie
et une autre pour remettre au debut le compteur a tout moment pendant le deroulement du programme par interruption
l'interruption ne semble fonctionner qu'une fois? est-ce normal?
(mode simulation sous programming editor)
 

Attachments

Chavaquiah

Senior Member
On doit sortir de la routine interrupt avec un return. D'autre façon la "stack" (mot en Français?) va déborder. Sans un return, les interruptions ne seront pas restaurées.

Votre programme arrive aussi très vite a la fin (end). Peut-être il devait continuer, en attente de nouvelle interruption?


Edit:

Je m'excuse, je n'avais pas remarqué qu'il s'agit de votre première message sur ce forum. Soyez le bienvenu! :)
 
Last edited:

RENAUDMAS

New Member
merci de me repondre si vite
effectivement je debute...
avec un return cela marche effectivement , a chaque action sur l'entree
l'interruption se produit, puis le programme retourne au comteur
helas celui_ci est deja décrémenté (ou implemente) donc je n'ai pas ma duree voulue
il s'agit d'un projet de minuterie pour des planeurs de vol libre;
nous les larguons au moyen d'un treuil puis le modele évolue seul.
afin de ne pas le perdre la minuterie actionne un volet qui detruit la portance
on appelle cela le "dethermalisage"
selon les epreuves ,la meteo, on selectionne une durée (2minutes par
exemple)l'idee c'est que la minuterie ne demarre que quand le cable quitte
le crochet d'ou l' interruption commandée par minirupteur...
ya surement un moyen...
 

Chavaquiah

Senior Member
J'ai quelques difficultés pour bien comprendre (je n'ai pas parlé français pendant 20 ans).

Mais peut-être je peut aider un peu.

Il faut avoir au début du programme seulement les fonctions qu'il doit executer avant l'interruption. Après, il doit attendre avant de continuer.

Un exemple:

Code:
'minuterie de vol libre

symbol crochet = 3'interrupteur declanchement sur crochet treuillage = port3
symbol DT = 0	'servocommande de dethermalo = port0

symbol CONTINUER = b9



	setint %00001000,%00001000
	CONTINUER = 0 'Attendre l'interruption
	

main:

	servo DT,150
	pause 1000
	low DT	
	
	if pin1=0 and pin2=0 and pin4=0 then goto calcul0
	if pin1=1 and pin2=0 and pin4=0 then goto calcul1
	if pin1=0 and pin2=1 and pin4=0 then goto calcul2
	if pin1=1 and pin2=1 and pin4=0 then goto calcul3
	if pin1=0 and pin2=0 and pin4=1 then goto calcul4
	if pin1=1 and pin2=0 and pin4=1 then goto calcul5
	if pin1=0 and pin2=1 and pin4=1 then goto calcul6
	if pin1=1 and pin2=1 and pin4=1 then goto calcul7	
	

'Attendre que CONTINUER soit 1
Wait_here:
	if CONTINUER = 0 then
		pause 1000 'On sortira de pause si une interruption arrive
		goto Wait_here
	endif
	

compteur:		
	for b2 = 1 to b1
	pause 1000
	next b2
	
	servo DT,75
	pause 1000
	low DT
	
CONTINUER = 0 'Attendre la prochaine interruption
goto Wait_here	


	'end
	
interrupt:
	pause 2000
	if pin3=1 then interrupt
	CONTINUER = 1
	pause 2000
	setint %00001000,%00001000
	return
	
	
	
calcul0:
	b1=10
	goto Wait_Here	
calcul1:
	b1=60
	goto Wait_Here		
calcul2:
	b1=90
	goto Wait_Here
calcul3:
	b1=120
	goto Wait_Here	
calcul4:
	b1=150
	goto Wait_Here	
calcul5:
	b1=180
	goto Wait_Here	
calcul6:
	b1=210
	goto Wait_Here
calcul7:
	b1=240	
	goto Wait_Here
 

RENAUDMAS

New Member
merci pour l'aide car cela devient vite compliqué,j'ai testé cela ne correspond
pas exactement a mon besoin

un reset (commande Basic absente sur le 08m) ne serait-il pas le plus simple?

donc si mon interrupteur (normalement passant)de crochet au lieu d'etre une entrée sur un pin du chip etait l'interrupteur de l'alimentation du montage cela ferai un hard reset a chaque action sur celui-ci et je repartirai toujours au debut du programme

merci encore ,je vais monter un prototype bientot,et tester les differentes solutions
 

Chavaquiah

Senior Member
Je n'avais pas compris que la routine doit être exécuté dés le debut.

Ça peut-être encore plus facile. Le 08M n'as pas une commmande pour reset mais le code peut y revenir.

Avec le programme original, au lieu de END, on peut attendre le signal du crochet.

Ou vous avez...
Code:
	servo DT,75
	pause 1000
	low DT
	end
	
interrupt:
	pause 2000
	if pin3=1 then interrupt
	pause 2000
	setint %00001000,%00001000
	goto main
... on peut faire...
Code:
	servo DT,75
	pause 1000
	low DT

'***
   b0 = 0
   do loop until b0 = 1
   goto main
'***
	
interrupt:
	pause 2000
	if pin3=1 then interrupt
	pause 2000
'***
	b0 = 1
'***
	setint %00001000,%00001000
	return
 
Top