Мне нужен задержка несколько наносекундах. Плата Arduino Uno 16Mhz. Я знаю 1такт = 1/16 * 10^6 И команда NOP требуется такт для выполнения т.е. 62,5наноСек и 62,5 * 16 = 1000 нано сек = 1мкСек.
Вопрос, написал код задержки 1сек - конечно без встроенных функции - но она задерживает цикл меньше 1 секунда и не понял в чем ошибка.
const byte LED = LED_BUILTIN;
int mikS = 0;
int milS = 1;
const uint32_t TOP = 1000000; // for TOP
void setup() {
pinMode(LED, HIGH); // seting pin
}
void loop() {
delayNanoseconds(16);
// cslculate 1 sec
if ((milS * mikS) >= TOP){
digitalWrite(LED, !digitalRead(LED));
milS = 1; // reset var (mili)
}
if (mikS >= 1000){
milS++; // increment var (milisecond)
mikS = 0; // reset var (mikroSecond)
}
}
void delayNanoseconds(byte nsec){
if (nsec == 0) return;
while (nsec > 0){
asm volatile("nop \n\t");
nsec--;
}
mikS++;
}