Vitesse d'execution ...

Salut a tous, j'ai une question bete mais ...

L'arduino uno fonctionne a 16Mhz.

J'ai une boucle dans un programme et j'aimerai savoir a peut pres combien de temps met la carte a effectuer une boucle ...

J'ai plus la carte avec moi, et je n'ai malheureusement pas pensé a faire la mesure avec le serial et l'horloge interne :confused:

Merci de votre aide

Comme dirait Fernand Raynaud : . . . un certain temps. :smiley:

Comment veux-tu que l'on t'aide si tu ne donnes pas ton programme !!!!

  etatledG2 = analogRead(ledG2); //Lecture de la valeurs du capteur
  etatledG1 = analogRead(ledG1); //Lecture de la valeurs du capteur
 
  etatledCG = analogRead(ledCG); //Lecture de la valeurs du capteur
  etatledCD = analogRead(ledCD); //Lecture de la valeurs du capteur

  etatledD2 = analogRead(ledD2); //Lecture de la valeurs du capteur
  etatledD1 = analogRead(ledD1); //Lecture de la valeurs du capteur


   
  // Stop si pas de ligne
  if(etatledG2 > ligne && etatledG1 > ligne && etatledCG > ligne && etatledCD > ligne && etatledD2 > ligne && etatledD1 > ligne) 
    // Si les capteurs ne voient rien, les moteurs restent a l'arret
  {
    VMG == 0;
    VMD == 0;
  }

 analogWrite(MG,VMG);
 analogWrite(MD,VMD);

Bonjour,

Deux possibilités pour le savoir :

  • faire basculer une broche + oscilloscope
  • simulateur avec compteur de tick d'horloge (ça existe pas en gratuit pour les AVR)

l'utilisation de la fonction micros() ne suffit pas ?

unsigned long time = micros();
//code de la loop
serial.println(micros() - time);

l'utilisation de la fonction micros() ne suffit pas ?

Il n'a plus la disponibilité de la carte !

Par contre l'examen du fichier de désassemblage (extension lst il me semble) ne donnerait-il pas une bonne indication ?

68tjs:
Par contre l'examen du fichier de désassemblage (extension lst il me semble) ne donnerait-il pas une bonne indication ?

Ce passer le listing à la main et compter le nombre de cycles cpu par instructions ... un travail de dingue, surtout si tu connais pas l'assembleur.

Il a mis juste 13 lignes :grin:

Le mode debug de AVR Studio permet de voir l'avancement du programme en comptant le nombre de cycle utilisé en même temps.
Par contre, c'est un peu chaotique pour le rendre compatible avec les sketchs de l'IDE arduino.

D'un autre côté, avec un code de ce type qui utilise intensivement la fonction analogRead, le temps d'exécution sera très majoritairement influencé par le temps qu'il faut attendre pour que le convertisseur finisse sont travail (puisque cette fonction est bloquante), le reste étant pratiquement négligeable.

Exemple : avec une horloge ADC configurée à 125 kHz (valeur par défaut sur arduino), il faut 13 cycles pour effectuer une seule conversion, donc tconv = (1/125000)*13 ? 104 µs. Il y a 6 conversions à la suite, soit t ? 624 µs. À côté de ça, les instructions CPU qui s'effectuent en 0,0625 µs, c'est peanuts.

Donc, puisque la question était de « savoir a peut pres combien de temps met la carte a effectuer une boucle », sauf erreur de calcul de ma part, je dirais entre 650 et 700 micro-secondes.

Pas faux.

Et même sûrement juste :grin:

Un complément : une conversion prend 13 cycles sauf celle qui suit immédiatement la mise en route du convertisseur qui en prend 26.