bonjour, dans le cadre de mon PPE, je dois piloter un
servomoteur avec Flowcode.
Mais je ne comprend pas l'utilisation de l interruption
-----
bonjour, dans le cadre de mon PPE, je dois piloter un
servomoteur avec Flowcode.
Mais je ne comprend pas l'utilisation de l interruption
Discussion déplacée dans le forum d'électronique.
Bonjour,
qu'est ce que tu n'as pas compris ? ce qu'est une interruption ou comment s'en servir, ou comment la programmer sous Flowcode ?
Sais-tu comment piloter un servo-moteur ?
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
oui, je connais le principe de fonctionnement du servomoteur mais je ne c pas comment faire une impulsion entre 1 et 2 ms sur une période de 20ms en utilisant l interruption sur flowcode
Bonjour,
Le timer-0 (par exemple) est un compteur, qui, bien paramétré, compte les coups d'horloge du pic. Tu vas donc pouvoir t'arranger pour que, tout les n coups d'horloge, c'est à dire toutes les p µs, il déclenche une interruption.Compter les interruptions (on parle de "débordement du Timer0) permettra de "lire le temps qui passe".
C'est aussi faisable avec des "pauses", des temporisations, mais c'est moins précis et le µC ne peux rien faire en même temps.
PS : il me semble que flowcode V4 gère les servo-moteurs, pas flowcode V3.
PS2 : il me semble que c'est faisable "simplement" avec le module PWM, masi pas sous Flowcode (fréquence du PWM fixée).
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
Bonjour,
il faut donc que je mette l'interruption a une fréquence de 50 Hz (pr période de 20 ms), il faut aussi que je mette une deuxiéme interruption pour pour une impulsion de 1ms ?
C'est pas possible : le timer, c'est en fait un compteur, un diviseur de fréquence. Tu le configures pour qu'il divise la fréquence d'horloge par un certain nombre n (sur flowcode, c'est des puissances de deux : 2,4,8...) ; et à une fréquence égale à , le programme appellera ta macro d'interruption (le 4 vient du fait qu'il faut 4 coups d'horloge pour exécuter une action, le 256... je sais plus, il me semble que c'est le prédiviseur, réglé d'office sur 2^8 par Flowcode)
Si tu veux créer un signal de période 500µs, 100µs à l'état haut :
- quartz de 20MHz,
- pré-diviseur du timer0 (c'est le n) configuré à 1
le timer déborde tous les 51µs
Ton programme :
avec var une variable, temps vaut ici : 100µs/51µs = 2 :
var = var + 1
Si var == temps_haut alors sortie = 0
Si var == 10 alors sortie = 1 et var = 0
PS : c'est sûr que c'est ici pas très précis, on gagnerait à ne pas utiliser 51µs, mais beaucoup moins, au prix de variables qui compteraient plus, et d'un interruption qui serait appelée plus souvent (rien de bien méchant).
Dernière modification par Antoane ; 16/05/2010 à 15h54.
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
merci pour l explication,
J'ai compris la premiére partie mais pas totalement compris le programme.
avec ton exemple: signal de 100µs et de periode 500µs
si var= temps haut alors sortie =0
temps haut doit être égale a 2
Et le programme que tu m a énoncé doit se situer dans la interruption ?
Dans le programme principal je ne dois mettre que l'interruption ?
Imagine que tu discutes tranquillement avec un amis en bas d'un immeuble. Tout d'un coup, un piano tombe du 3e étage, juste à votre verticale. Attendras-tu que M. ai fini sa phrase avant de réagir ?
C'est ça une interruption : le programme se déroule tranquillement (dans la boucle principale) et quand un piano arrive, on appelle une macro d'interruption, qui va agir en conséquence (appeler un nouvel accordeur ou autre...)
Ici, ton programme se déroule gentiment (gestion de moteur, de LCD, de boutons-poussoirs....), et à chaque débordement du TMR0, il appelle la macro d'interruption, dans laquelle tu mets le code que j'ai écris, qui sera fait une unique fois, tous les 51µs.
Si tu le mets dans la boucle principale (entre les Tant que), var va être incrémentée de manière anarchique, regardless to the TMR0.
PS : probablement la seule chose que j'ai retenu de BigOnOff.
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
bonjour,
J'ai essayé le programme que tu ma donné sur flowcode v4 qui possede un simulateur de servomoteur mais le servomoteur ne tourne pas.
Dans mon programme principal je n'ai mis que l interruption.
Faut il que je rajoute quelque chose ?
Sans voir le programme...
http://forums.futura-sciences.com/el...-sabonner.html
PS : essaye aussi de le compiler en C et de nous l'envoyer.
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
voici le programme d'interruption:
De deux choses l'une :
- ma voiture ne démare pas, peux-tu me dire d'où vient le problème ? en voici une photo pour t'aider. Tout ça pour dire que sans savoir comment tu as configuré l'interruption, sans voir la boucle principale...
- Ya clairement un problème dans ton programme :
Tu dois pas avoir compris le fonctionnement de l'interruption : à chaque débordement du timer (càd à des intervalles de temps précis), tu appelles un routine d'interruption, qui exécute un (cours) morceaau de programme. Le but, c'est de compter le nombre d'appels de cette routine, cartu saura alors exactement quel est le temps écoulé.
Ce n'est pas ce que tu as fais : une fois qu'on est entré dans le programme d'interruption, on va y rester pour toujours, le timer ne servant absolument à rien (sauf peut-être à planter le programme).
Le pictogramme d'interruption, que tu mets dans le programme principal correspond à l'autorisation de l'interruption, il doit donc être lû une seule fois par le micro-contrôleur, il doit alors être en dehors de la boucle infinie.
Renseigne-toi sur les interruptions, sur ce que fait un timer,
Ecrit un programme "basique" qui fait clignoter une led à une fréquence choisie à l'aide d'un timer,
Puis reprend l'exemple que je t'ai donné, comprend-le, et gère ton servo-moteur.
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
bonjour,
J'ai réussi a faire clignoter une led avec une interruption.
Je bloque sur la programmation du servomoteur.
Faut il que j'utilise 2 interruption ?
car je rencontre des problémes avec une seule interruption
Bonjour,
poste ton programme, en flowcode et C.
"car je rencontre des problémes avec une seule interruption " Quels problèmes ?
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.
bonjour,
J'ai fait ce programme mais il ne veut pas fonctionner, je n'arrive pas trouver l'erreur.
_La fréquence d'interruption est de 30,518 HZ
_Dans le programme d'interruption, int_a sert a compter le nombre d'interruption
_Dans le programme principal; je met la variable a sur le port A
Bonsoir,
je ne vois pas d'erreur. Dans les calculations, dans la macro d'interruption, il y a bien int_a = int_a +1 ?
Si oui, c'est peut-être que le simulateur n'arrive pas à suivre la vitesse de fonctionnement (20MHz) demandée. Diminue le rapport de deivision du Timer ; ça devrait par contre bien marcher en vrai.
PS : c'est une version demo de flowcode V4 ?
PS2 : il est évident qu'on ne voit pas tout le programme (configuration des fusibles, de l'interruption...) "non sans raison avais-je" demandé le C
Deux pattes c'est une diode, trois pattes c'est un transistor, quatre pattes c'est une vache.