Comprendre les interruptions

fuse

Senior Member
Bonjour à tous,
Pour comprendre les interruptions, voici quelques explications. Si vous avez des idées pour compléter, je suis preneur...
Si il y a des explications pas assez claires, dites le moi.
Cordialement
 

AndreBernot

Senior Member
:)Merci Fuse pour ces explications et pour votre document!

Le document suivant présente une application pour un bouton d'arrêt d'urgence qui doit pouvoir interrompre un automatisme pour le mettre en sécurité à tout moment :
voir p. 56 (58 du PDF) de http://www.a4.fr/images/Telechargements/BE-montecharge/D-BE-MCHA-V1002.pdf

:confused:Le problème que j'ai rencontré en proposant cet exemple particulier (arrêt d'urgence d'un monte charge) est qu'il est difficile (impossible ?) de savoir dans quel contexte survient l'interruption (instant où l’on appuie sur le bouton arrêt d’urgence) et de provoquer un retour d'interruption à un endroit approprié et choisit pour revenir à un mode de fonctionnement normal. Le retour se fait sur l'instruction qui suit immédiatement celle qui était exécuté au moment où l'interruption est survenue, c'est à dire n'importe où.

:eek:Pour éviter un comportement aléatoire du système une fois l'interruption traitée, je me suis abstenu dans cet exemple de faire un retour d'interruption ; le programme boucle en permanence dans la routine qui gère l'interruption. Il faut alors faire un reset ou marche/arrêt du système pour réinitialiser le programme au départ (à un endroit connu).
 

PieM

Senior Member
Bonjour,

Excellents documents. Il serait peut être possible d'ajouter un petit chapitre sur les interruption générées par les flags. Une interruption sur une entrée série ou I2C est très utile.
Peut être préciser aussi que si la condition ayant généré l'interruption est toujours présente après le réarmement et le return, une nouvelle interruption est immédiatement relancée.

Je rebondis sur la remarque très intéressante d'André Bernot concernant les arrêts d'urgence.
Il est vrai que c'est le cas type d'utilisation, mais le fait de ne pouvoir sortir d'une routine d'interruption que par un return, pose un problème.
Dans l'esprit de l'arrêt d'urgence, il s'agit de mettre le système dans un état de non danger. Si dans la pratique industrielle cela peut conduire à déclencher un mouvement (recul d'un vérin de presse, par exemple) avant l'arrêt total, ici, la seule solution est effectivement de redémarrer le programme à l'initialisation.

Toutefois, dans certains cas, il peut être utile de conditionner cette initialisation en fonction du fait qu'il y a eu arrêt d'urgence précédemment.
Il suffit d'inscrire un flag en mémoire data dans la routine d'interruption.

Au démarrage, la lecture de ce flag peut laisser le choix à l'opérateur d'effectuer une commande manuelle, ou de démarrer sur une autre séquence.

Sur un plan pédagogique, la réflexion sur ces aspects de sécurité parfois complexes, est très formatrice ... :)

Remarque: Avec l'avènement des Picaxes M2, il est possible d'avoir une séquence de surveillance en tâche parallèle .
 

fuse

Senior Member
Bonjour à tous,

Merci pour vos encouragements....:)
Je vais tenter de répondre à vos remarques.
Concernant AndreBernot, j'ai parcouru rapidement le dossier, je n'ai pas de réponse concernant l'arrêt d'urgence... Cela me fait penser qu'il faudrait que je précise une chose : le traitement d'une interruption s'effectue comme une routine , en conséquence dès le 'return' le programme reprend son fonctionnement à la séquence au moment de l'interruption.
Concernant les remarques de PieM, en effet, j'ai commencé à travailler avec les flags mais je n'ai pas tout essayé, je ne trouve pas de programme 'simple' et souvent l'ensemble dépasse largement les applications collèges....
Concernant bibi_49, la réponse est simple : une seule interruption par programme, il suffit d'essayer cela provoque une erreur sur le diagramme...
Je travaille pour le moment sur les timers, je galère les explications sont succinctes. Si vous avez des exemples, je suis preneur.
Cordialement
 

bibi_49

Member
bonjour,

J'ai bien compris les interruptions et je les intergrent maintenant dans tous mes programmes.

Il n'y a pas de problemes avec les entrees numeriques, mais avec une entree analogique pour un valeur superieur a une consigne comment cela marche t'il ? :confused: :confused: :confused:
 

fuse

Senior Member
Bonjour,
Tant mieux si les interruptions sont maintenant un peu mieux comprises...
Ceci étant, les interruptions fonctionnent avec des changement d'états sur des entrées numériques : impossible donc de les intégrer dans un test sur une valeur analogique... Ou alors en utilisant une astuce que je ne connais pas:confused:
Qui est capable de relever ce défi ? :D
 

bibi_49

Member
interruption et 18X

bonjour,

si la cde setint fontionne bien sur 28X1 elle ne fonctionne pas pour le 18X1 ?????
 

bibi_49

Member
setint et 18X

bonjour,

pour plus de compréhension j'ai deux contacts 1 sur in0 et 1 sur in1.

la Cde " setint %00000011, %00000011 " fonctionne bien il faut que les deux contacts soit a 1 en même temps

alors que la cde "setint or %00000011, %00000011 " me donne un message d'erreur de PE (erreur a la compilation)
:confused: :confused: :confused: :confused:
 

fuse

Senior Member
Bonjour Bibi_49,

D'après le dossier PICAXE manual2, la commande OR ne fonctionne que sur les séries M2, X1 et X2 :

Additional options for M2, X1 and X2 parts:
SETINT OR input,mask (OR Condition)
SETINT NOT input,mask (NOT the AND Condition)

Si le picaxe utilisé est un 16F88, il s'agit donc d'une série 18X non compatible.
Cordialement
 

bibi_49

Member
interruptions et 18M2

bonjour fuse,

effectivement cela marchait bien sur mon 28X1 et pas sur mon 18X.

J'ai fait un essai avec un 18M2 et cela fonctinne a merveille, encore merci ....

:) :) :)
 

bibi_49

Member
entree a 0 setint 18M2

bonjour,

Tjrs avec la cde setint, comment faire un mix entre des entrée à 1 et 0.

Je voudrait avoir la cde : setint "C5 à 0" ou "C1 à 1" ou "C2 à 1"

c'est pour garder le reset sur l'entrée C5 :confused: :confused: :confused:
 

fuse

Senior Member
Bonjour,
Le dossier d'explications indique le principe de setint en page 1 et 2.
Pour obtenir : setint "C5 à 0" ou "C1 à 1" ou "C2 à 1" avec C1 sur in1, C2 sur In2 et C5 sur In5, je pense que la solution est

setint OR %00000110, %00100110
Cordialement
 
Top