Tout nouveau sur le forum, je viens d’acquérir mon UNO. J’ai bien assimilé la logique de programmation, mais je bute sur un point.
Je souhaite réaliser un compteur de vitesse et compte tours, mes données brutes seront des impulsions (niveau 1) sur une borne numérique par seconde. Je pense savoir compter les impulsions (dans une boucle) mais la notion du temps me pose problème. Il y a t’il une instruction qui défini le temps ? (exemple je compte les imputions dans une période de une seconde).
Il faut différencier deux façon de gérer le temps:
-un SP bloquant ou retournant un temps, pendant lequel tu consomme ton activité, souvent pour rien
-un Timer, programmé.
Pour ton utilisation, de loin c'est le timer. Savoir le nombre de µs qui se sont écoulées depuis le début, on s'en fout étant donné que l'acquisition peut être conditionnelle.
Renseigne toi sur les timers et les interruptions. C'est un outils très pratique : tu programme le timer, tu l'autorise. Puis tu fais ce que tu veux, quand le timer a fini de compter son temps (par exemple une seconde), il interrompt ton programme, réalise ce qu'il doit faire, et recommence.
Et du coup question sur cette interruption de programme :
entre l'arret du programme et son traitement, le roue continue à tourner...
Il va donc être possible de récupérer un grand nombre d'information, mais on risque rater des informations entre 2 traitements non ?
Pas si tu cales bien tes IT. En gros tu as les IT extérieures qui sont issues d'un passage de niveau 0 à 1 ou l'inverse, et donc détectables très facilement. Louper une interruption potentielle ça a deux causes ici : temps de traitement trop long (solution en dessous) ou fréquence du signal beaucoup trop rapide.
Pour avoir un temps de traitement court, au pire ton IT doit placer une variable dite de verrou à une certaine valeur, puis tu sors de l'it, et c'est ton programme principal qui traite. En général on admet qu'une interruption doit avoir le temps de traitement le plus court possible, afin de ne rien rater. Mais là encore ça trouve ses limites au temps de traitement de l'Arduino. Vois si tu peux choper le fichier LST généré à la compilation : il te donnera les instructions en assembleur (me rappelle plus si l'Arduino, du moins son logiciel, le fait mais normalement si...). Tu pourra voir à peu près ainsi par calcul le temps que nécessite ton "gros traitement" sur chaque Arduino. Si le UNO a une fréquence trop basse, tu peux passer au Due...mai splus compliqué à gérer d'un point de vue alim (3.3V).
Pour les IT internes, comme les timers, etc, les consignes sont en soit les mêmes.
L'arduino est équipé d'un uC obsolète mais il a quand même quelques timers-compteurs de dispo...
Tu as le choix :
1) un timer en mode compteur, compte les impulsions sur une entrée, une interruption toutes les secondes (par exemple) relève la valeur du compteur, ou bien une interruption déclenchée toutes les x impulsions regarde le temps que ça a pris
2) un timer en mode capture, mesure la période du signal en entrée, une interruption à chaque période relève la valeur et effectue le calcul
3) remplacer le timer en mode capture par du soft (post du dessus)
le choix de la bonne solution dépend de la fréquence du signal à mesurer et du nombre de timers dispo.
- Edité par Lord Casque Noir 16 juillet 2013 à 9:13:41
Avec vos conseils J’ai réalisé mon compteur de vitesse.
Je fais évoluer mon projet en ajoutant un module « totalisateur de kilomètres »
Les km sont enregistrés sur une carte SD.
A l’alimentation du compteur je lis bien mon kilométrage sur ma carte, mais je ne trouve pas la fonction pour convertir une variable alphanumérique en variable numérique.
Je suis un peu pommé sur le code de lorrio déposé le 15 Juillet 2013.
J'essai de faire tourner un code super vite avec une "queue" pour échanger des trames en TCP/IP
Le souci en faite c'est que je voudrais faire 2 taches en même temps sur un arduino Mega 2560, résultat lorsque je passe devant un capteur il m'arrive de le rater.
Savez vous comment faire des taches cyclique ou périodique sur Arduino???
Si ton capteur est reliée sur une pin attachée à une interruption, ton programme sera temporairement mis en pose pour exécuter la fonction d'interruption.
Avec cette technique, il est donc théoriquement impossible de rater un évènement.
Mais si tu tiens vraiment à faire une petite action périodiquement, tu peux utiliser un timer couplé à une interruption.
A fois fois que le timer annonce qu'il a finit de compter, il déclenche une interruption donc ton programme sera temporairement mis en pose pour exécuter la fonction d'interruption.
A noter que pendant une interruption, toutes autres demandes d'interruptions sont placées en file d'attente de traitement.
Du si tu utilises ton capteur sur pin d'interruption mais que tu as une autre interruption qui s'éternise dans ton code, tu peux rater un évènement.
A noter aussi que l'arduino est un processeur 8 bits qui fait ses calculs sur 8 bits donc tu lui demandes un calcul sur 16 bits (type int par exemple), il est obligé de le faire en 2 fois.
Par contre, ton interruption peut très bien se produire en pleins milieux des 2 opérations donc il est impératif de protéger les variables utilisées dans le code normal et dans les interruptions.
Je souhaiterais mettre un debimetre en amont du tuyau de ma douche afin de calculer un volume en tant reel. Le tout devra être relié a des led afin de faire un jeu de couleur en fonction de la consommation de la douche.
Le fait de mettre un timer va interrompre va t'il interrompre mon debitmetre ?
salut svp je veux avoir un programme sur arduino qui permet de calculer le temps d'arrêt d'une machine. je voudrais savoir la bibliothèque a utiliser et la fonction utilisée pour calculer le temps d'arrêt. merci
bjr j'ai un projet basé sur l'arduino mega 2560 pour la programmation pour mesurer la vitesse de rotation d'un moteur asynchrone monophasé .alors j'ai besoin de mesurer le nombre d'impulsion reçues par l'ARDUINO et déduise la vitesse de rotation le probleme est le temps de mesure comment on peut le définer ??? est ce que par timer ou b1 par une autre moyen??? mrc
bonsoir j'ai un projet basé sur un circuit qui donne un signal de 40Mhz et je veux afficher cette valeux en numerique. j'ai un arduino uno et vrmt je ne sais pas quoi faire !! c'est ma 1er fois de programmer en arduino... j'ai besoin de votre aide SVP ?!! si juste vous pouvez m'indiquer le chemin de recherche et je fais mon mieux pour réussir bien sur grasse a votre aide?!! est ce que par timer comme vous avez mentionner avant ou bien par une autre moyen??? merci d'avance ^_^
Le Stress c'est bon pour ce que tu a.
Le Stress c'est bon pour ce que tu a.