bonjour,
Ce message fait suite aux posts [Résolu] interruption, delay et delayMicroseconds - Français - Arduino Forum interruption, delay et delayMicroseconds
, la convrsation a un peu dévié.
Il est question de voir combien de temps dure delayMicroseconds(). Elle est normalement correste si il n'y a pas d'interruptions.
Voici le programme qui m'a parmi de faire les tests avec une Uno:
#include <digitalWriteFast.h> // plus facile pour mesurer les temps courts, mais pas indispensable
#define mesure 2 // Mesure des temps
#define infos 3// Infos sur les temps
void setup()
{
pinMode(mesure, OUTPUT);
pinMode(infos, OUTPUT);
noInterrupts();
}
word largeur[]={0,1,2,3,5,10,20};
void loop()
{
for (byte num = 0; num <= 6; num++)
{
for (byte impulsion = 0; impulsion < num; impulsion++)
{
digitalWriteFast(infos, HIGH); // Pour étallonage
digitalWriteFast(infos, LOW); // Pour étallonage
}
digitalWriteFast(mesure, HIGH);
delayMicroseconds(largeur[num]);
digitalWriteFast(mesure, LOW);
}
delayMicroseconds(50);
}
J'obtiens comme chronogramme:
les durées des impulsions du bas sont de 0,125µs c'est donc à déduire des impulsions de mesure pour avoir le temps de delayMicroseconds() seule:
num | nb impul en bas | temps demandé | temps lu | delayMicroseconds() |
---|---|---|---|---|
0 | aucune | 0 | 0.625µs | 0.5µs |
1 | 1 | 1µs | 0.625µs | 0.5µs |
2 | 2 | 2µs | 1.625µs | 1.5µs |
3 | 3 | 3µs | 2.625µs | 2.5µs |
4 | 4 | 5µs | 4.625µs | 4.5µs |
5 | 5 | 10µs | 9.625µs | 9.5µs |
6 | 6 | 20µs | 19.62µs | 19.5µs |
Il me manque 0,5µs à chaque fois. Et dans le code, ils indiquent qu'il y a 2 cycles en moins si on passe une constante plutôt qu'une variable.
J'ai fait une erreur de mesure?