Vitesse réelle liaison série <> vitesse configurée [Résolu]

Bonjour à tous,

Je mesure la durée d’un “setup” via la fonction micros().
Dans le “setup”, il y a de la transmission au pc via liaison série.
Or, selon la configuration de celle-ci, j’obtiens :

1200bds → 1284µs
2400bds → 1284µs
4800bds → 1284µs
9600bds → 1188µs
19200bds → 1292µs
38400bds → 1308µs
57600bds → 1324µs
115200bds ->1360µs

Je ne comprends pas où est “l’astuce” pour expliquer les résultats ?
L’un de vous en a-t-il une idée ?

#include <Wire.h>

byte portB;
int i2cStatus;
unsigned long compteur;

void setup() {
//
compteur=micros();
Serial.begin(9600);
Wire.begin();
Wire.beginTransmission(0x4F>>1);
Wire.requestFrom(0x4F>>1,1);
portB=Wire.read();
i2cStatus=Wire.endTransmission();
Serial.print("Port B : ");
Serial.println(portB,BIN);
Serial.print("i2c status : ");
Serial.println(i2cStatus);
Serial.print(“Durée de l’init : “);
compteur=micros()-compteur;
Serial.print(compteur);
Serial.println(” microsecondes”);

}

void loop() {
// put your main code here, to run repeatedly:

}

C'est juste que le temps d'exécution de ton setup() est indépendant de la vitesse de transmission.
La méthode print place les données dans un tampon qui est envoyé en tâche de fond donc le temps de transfert est invisible tant que le nombre de caractères à envoyer est inférieur à la taille du tampon d'émission.

fdufnews:
C'est juste que le temps d'exécution de ton setup() est indépendant de la vitesse de transmission.
La méthode print place les données dans un tampon qui est envoyé en tâche de fond donc le temps de transfert est invisible tant que le nombre de caractères à envoyer est inférieur à la taille du tampon d'émission.

Ok pour le principe du tampon et dans ce cas là, effectivement, le temps d'exécution ne devrait pas bouger en fonction de la vitesse de la liaison série. Or, le temps d'exécution est dépendant de la configuration de cette vitesse ?

Je vais modérer se que j'ai écrit au-dessus "le temps d'exécution de ton setup() est relativement indépendant de la vitesse de transmission."
La tâche d'émission n'est pas complètement transparente. Elle interrompt périodiquement le déroulement du programme.
Lorsqu'un caractère a été émis, une interruption est générée, la routine de gestion de l'interruption regarde s'il y a encore un caractère à envoyer si c'est le cas elle le place dans le registre d'émission de l'UART.
Plus le débit est élevé plus l'interruption est appelée souvent d'ou "l'écart" constaté. Lorsque le débit est "faible" la transmission continue après que ta mesure de temps est terminée donc tu ne mesures plus l'écart.

Ok ! Expliqué comme cela, c'est clair :slight_smile:
Merci !