Il y a une différence de fonctionnement entre utiliser les compteurs des timers et "clignote sans utiliser la fonction delay()"
.
Les deux méthodes ne sont pas bloquantes, c'est-à-dire que le micro peut continuer à faire d'autre tâche .
Nb => ce n'est plus vrai avec la méthode "blink without delay" si tu veux obtenir des fréquences élevées.
La différence est ailleurs :
- "clignote sans utiliser la fonction delay()" c'est de la programmation.
- Les Timers ce n'est pas de la programmation : c'est de l'électronique numérique.
Les timers, tu ne fais juste que les configurer, une fois lancés, ils vivent leur vie indépendante tant que tu ne leur changes pas leur configuration.
C'est parce que c'est de la pure électronique, que seuls, ils peuvent atteindre les fréquences élevées.
Une fonction digitalWrite sur avr prend environ 60/65 cycles horloge.
Avec une horloge à 16 MHz un cycle = 1/16MHz = 62,5 ns.
Un digitalWrite(x, HIGH) immédiatement suivi d'un digitalWrite(x, LOW) mobilise toutes les ressources du micro. Un cycle prend 120 cycles horloge soit une fréquence théorique maximale de 130 kHz au lieu de 8000 kHz par les timers.
NB : il existe une fonction digitalWriteFast qui est plus optimisée mais ne compte pas dépasser 500 kHz toujours en mobilisant les ressources du micro.
Ne compte pas lever l'obstacle avec un micro comme un ESP32 qui tourne 10 fois plus vite : 160 MHz d'horloge.
En fait l'horloge est une première fois divisée par 2 (80 MHz) et une deuxième fois pour les circuits qui gèrent les sorties : 40 MHz contre 16 MHz (sans division) l'amélioration est insuffisante, seul avantage avoir des registres 32 bits au lieu de 8 bits qui apporteront de la souplesse.
Je pose la pertinence de réaliser, avec précision, les fréquences que tu recherches avec un microcontrôleur.
Je pense (en électronicien
) que déléguer cette fonction délicate à un circuit spécialisé purement électronique serait préférable.
Je pense au DDS AD9833 que l'on peut approvisionner sur Aliexpress sous forme de module (5 à 6 €).
Il existe deux modules différents, celui que je te conseille est :

Il a l'avantage d'avoir un atténuateur et un amplificateur qui isole l'AD9833 de la charge.
L'AD9833 est assez chatouilleux vis à vis de sa charge, c'est plus sage de l'isoler de sa charge.
Tu fuis ce modèle :

Les performances de l'AD9833 est avec le quartz 25 MHz tel que vendu par Ali :
The frequency registers are 28 bits wide,
with a 25 MHz clock rate, resolution of 0.1 Hz can be achieved
with a 1 MHz clock rate, the AD9833 can be tuned to 0.004 Hz resolution.
La datasheet de l'AD9833 se trouve ici :
Je n'ai pas essayé d'obtenir des fréquences basses, à la lecture de la datasheet je pense qu'il descend jusqu'à 0,1 Hz, il serait sage de le vérifier ou d'interroger Analog Devices