Terwijl het ontwerpen van de vervanging van een vaste toestand voor een vacuüm-buizen-en-CRT radar display subsysteem, zat ik vast op het krijgen van een geschikt systeem voor de periode tussen de synch pols en het echo-puls. De synch pols en echo-puls wordt gevangengenomen op twee pennen van een Arduino. De inachtneming van de Arduino heeft een klok MCLK/2 van 42 MHz, die me een resolutie van 23.81 nanoseconden (ns) die voor de snelheid van het licht geven zou, zou vertalen tot een afstand van 6.86 meter. Ik wilde een betere resolutie.
Na het kijken naar oplossingen met hoge snelheid oscillatoren en discrete logica ICs (tellers, shift registers), FPGA en uit de plank oplossingen kost in het bereik van USD 2.000 /-, heb ik besloten om te onderzoeken de ESP8266 voor sommige solutie voor mijn werkstuk timing.
Aan mijn verrukking, ik ontdekte twee functies in de Arduino ESP8266 API, namelijk ESP.getCycleCount() en ESP.reset()
ESP.getCycleCount() telt de instructie cycli sinds begin, in een interne unsigned 32-bits variabele, aansprakelijk overloopt van elke 28 seconden of zo. Een een microseconde krijgt periode 160 instructie cycli. Nu voor het meten van de overhead vereist door uw software software, moet u alleen de graaf de cycli van de instructie die uw routine voor een 1 microseconde telt vertragen en aftrekken 160 van die tellen, zodat u de software overhead in het verwerven van de graaf. Voor 1 microseconde vertraging kreeg ik een telling van 213. Die uitgewerkt tot 213-160 = 53 graven (53 x 6,25 = 331.25 nanoseconden) software overhead te verwerven van de graaf. Af te trekken van 53 uit elke tellen geeft me een nauwkeurigheid van enkele tientallen picoseconds, telling voor perioden van 30 microseconden tot ongeveer 500 microseconden.