Décalage de temps dans une boucle for

Bonjour,

Je veux envoyer une trame binaire fixe sur une des sorties.

Vous verrez ce que j’ai fait en dessous, ca fonctionne mais le problème c’est que le temps d’un bit varie du simple au double (entre 4 et 8 µs) !

J’ai limité les calculs au maximum (de ce que je sais faire), et même écrit la valeur de sortie directement dans le registre, c’est mieux qu’avec du langage arduino pur mais pas top…
Je pense que le problème vient de la (des) boucles mais sans certitude !?

Vous pouvez voir sur l’impression d’écran (si ça fonctionne) mon décalage.

Merci à tous :slight_smile:

#include <digitalWriteFast.h>

int j;
int i;
byte S;
byte Z;

byte Array[]={0b10101010, 0b10101010, 0b10101010, 0b10101010, 0b11111111, 0b0000000, 0b11111111, 0b00000000, 0b00101100, 0b10000111, 0b11......................};

void setup() {
Serial.begin(9600);
DDRD = DDRD | B11111100;
}

void loop() {


 for (i = 0; i<321; i=i+1){
  
  for (j = 0; j<9; j=j+1){
    S = ((Array[i] & (1<<j)) >> j)<<2; // "<<2" parce que j'utilise D2 en sortie qui est pour le port D : 0b00000100
    PORTD = S;
    //delayMicroseconds(208);
    //Serial.println(Z);
  }
  
}

  
  delay(100);
}

Merci beaucoup pour cette réponse précise et rapide !
Il reste une erreur de 2.3µs dut à la première boucle mais devient insignifiante après avoir mis une légère correction à la fréquence voulue !