déterminer la vitesse d'un axe à partir d'impulsion d'un capteur - C++ - Programmation
Marsh Posté le 09-05-2009 à 15:27:03
Lis la doc de ton micro-controlleur ?
Le plus simple c'est d'utiliser les input capture en général
Marsh Posté le 09-05-2009 à 15:31:47
g fé ca mé je sé pa si ca va marcher
interrupt [EXT_INT0]
void ext_int0_isr(void)
{
impulsion++;
}
interrupt [TIM1_COMPA]
void timer1_compa_isr(void)
{
nb_tour_par_seconde = impulsion/8;
impulsion = 0;
PORTA.0 = !PORTA.0;
}
V = nb_tour_par_seconde/(2*3.14);
Marsh Posté le 09-05-2009 à 15:32:08
Ok je connais pas ce chip. Tu as quoi à disposition pour déterminer la vitesse?T'as des ports d'input capture ?
Edit : Bon, déjà tu fais un effort pour écrire correctement sinon je m'en vais ok?
À part ça, ton script marche de toutes façons pas parce que tu tiens pas en considération la fréquence à laquelle est appelée l'interruption du timer1
Marsh Posté le 09-05-2009 à 15:33:53
je branche le capteur sur l'entrée 0 du port A
ya 3 timer intégré o composant
Marsh Posté le 09-05-2009 à 15:37:29
j'ai une autre question
lorsque j'utilise un goto
est-ce que je doit déclarer le label??
Si oui comment??
Marsh Posté le 09-05-2009 à 15:42:45
Sinon t'entend quoi par input capture??
si c'est plus simple je ve bien savoir ce que c'est
Marsh Posté le 09-05-2009 à 15:50:14
Donc : Pas besoin d'écrire 3 posts à la suite, tu peux très bien éditer ton post précédent.
T'écris en C++ non? Pourquoi tu me parles de goto?
Input Capture c'est une fonctionnalité qui est souvent présente sur les chips et qui font ce que tu veux "tous seuls". Mais dans ton cas ce n'est pas le cas.
T'es sur la bonne voie là, faut juste que tu modifie la "formule" que tu utilises pour trouver le rapport entre nombre d'impulsions et nombre de tours par seconde
Marsh Posté le 09-05-2009 à 15:58:47
ok merci
oui je programme en c
je te parle de goto parce que j'ai un souci
j'ai intégré un goto dans mon programme mé il me dit que j'ai un warning
Le voila:
unreferenced label 'retour1'
Marsh Posté le 09-05-2009 à 16:02:03
N'utilise pas de goto, t'en a pas besoin.
Arrête d'écrire plusieurs posts à la suite
Marsh Posté le 09-05-2009 à 16:46:56
Tu écris tout dans un while
Marsh Posté le 11-05-2009 à 20:11:43
LE TAUPIN a écrit : g fé ca mé je sé pa si ca va marcher |
Il manque toute la partie d'initialisation du micro en main. Notamment il faut déclarer PORTA.0 en entrée, l'interruption _INT0, l'interruption Timer1_Compare et spécifier la valeur de comparaison. Ensuite il faut une boucle infinie.
Genre :
Code :
|
Il te reste à écrire les fonctions init_ qui sont dépendantes du micro utilisé (que je ne connais pas)
Marsh Posté le 11-05-2009 à 20:37:03
beel1 a écrit :
|
La prochaine fois, histoire de faire avancer le smilblick, essaie de ne pas remonter un topic pour poster une imbécillité pareille..
Si on veut faire les chose bien (ce que tu suggères vu que tu sembles pinailler sur les initialisations) :
- Il doit inclure le fichier mappant les raccourcis genre PORTA vers l'adresse mémoire correspondante
- Il doit déclarer le prototype de ses fonction
- main n'est pas void mais int, donc doit finir par un return 0;
- Faut aimer se compliquer la vie pour écrire while( 1 == 1 ) au lieu que while(1)
- Tu n'as pas initialisé V (qui, si on respecte les notations, devrait être constant vu qu'écris en majuscule)
- La formule n'a aucun sens
Marsh Posté le 11-05-2009 à 20:52:26
esox_ch a écrit : La prochaine fois, histoire de faire avancer le smilblick, essaie de ne pas remonter un topic pour poster une imbécillité pareille.. |
Il est venu me chercher en MP
esox_ch a écrit : Si on veut faire les chose bien (ce que tu suggères vu que tu sembles pinailler sur les initialisations) : |
Je vais pas tout écrire et je connais pas les dits fichiers pour sa plateforme. Ce qui est sûr c'est que le programme tournera pas si les interruptions ne sont pas autorisées (d'ailleurs ça aussi ça manque dans mon bout de code)
esox_ch a écrit : - Il doit déclarer le prototype de ses fonction |
évidemment, si il a jamais fait de C dans ce cas c'est même pas la peine de parler de micro et il faut tout reprendre depuis le début
esox_ch a écrit : - main n'est pas void mais int, donc doit finir par un return 0; |
Pas sur les plateformes sur lesquelles j'ai l'habitude de travailler
esox_ch a écrit : - Faut aimer se compliquer la vie pour écrire while( 1 == 1 ) au lieu que while(1) |
Déformation professionnelle, c'est comme ça dans ma règle de codage que j'utilise tous les jours
esox_ch a écrit : - Tu n'as pas initialisé V (qui, si on respecte les notations, devrait être constant vu qu'écris en majuscule) |
J'ai copié-collé sa formule, si j'avais passé V en minuscule alors qu'ailleurs dans son prog il est déclaré en majuscule ça va pas marcher. L'essentiel c'est qu'il y ait de la vie pour avancer.
esox_ch a écrit : - La formule n'a aucun sens |
C'est la vitesse angulaire en radians par seconde, mais de toute façon elle est utilisée nulle part, c'est plus ça qui me gênerait perso.
Marsh Posté le 09-05-2009 à 15:17:13
Salu à tous
jauré besoin d'aide pour un peti programme
G un axe ki tourne avec o bout un capteur
Ce capteur délivre 8 impulsion par tour
Je ve déterminer la vitesse de l'axe en tr/sec
G pensé a utilisé un timer mé je ne sé pa comment le programmer.
HELP PLEASE!! QUICK!!!