Tout en concevant un remplacement à l’état solide pour un sous-système d’affichage radar vide-tubes-et-TCR, j’étais coincé à obtenir un système adapté à la période entre les impulsions de synchronisation et l’impulsion de l’écho. Les impulsions de synchronisation et écho impulsion étant capturés sur les deux broches de l’Arduino. L’Arduino Due a une horloge MCLK/2 de 42 MHz, ce qui me donnerait une résolution de 23,81 nanosecondes (ns) qui, pour la vitesse de la lumière, se traduirait à 6,86 mètres. J’ai voulu une meilleure résolution.
Après avoir regardé dans les solutions utilisant des oscillateurs à grande vitesse et logiques discrets (compteurs, registres à décalage), FPGA et solutions du plateau des coûts dans la gamme de USD 2 000 /-, j’ai décidé d’examiner la ESP8266 pour une solution à mon problème de synchronisation.
À ma grande joie, j’ai découvert deux fonctions dans l’API de ESP8266 Arduino, à savoir ESP.getCycleCount() et ESP.reset()
ESP.getCycleCount() compte les cycles de l’enseignement depuis le début, dans une variable interne à 32 bits non signée, susceptible de déborder à chaque 28 secondes environ. Une une microseconde période donnera 160 cycles d’instruction. Maintenant pour mesurer le logiciel charge requis par votre logiciel, vous devez uniquement le nombre de cycles instruction que votre routine compte pour 1 microseconde retardent et soustraire 160 de ce chef d’accusation, pour vous donner le logiciel frais généraux en acquérant le comte. 1 retard de microseconde, j’ai eu un comte de 213. Qui a fonctionné à 213-160 = 53 chefs d’accusation (53 x 6.25 = 331,25 nanosecondes) logiciel frais généraux à acquérir le comte. Soustrayant 53 de compter chaque me donne un décompte précis à quelques dizaines de picosecondes, pour des périodes de 30 microsecondes à environ 500 microsecondes.