I haven't seen the use of the avr-libc _delay_us() function yet. This produces a cycle-counted busy-loop and is more accurate than delayMicrosseconds() However, it can only be used with constant arguments; if you want a variable delay, you'd have to put it in a loop, which would complicate matters slightly (probably not significantly, at the 10us timescake,
So where are we?
The Arduino delayMicroseconds() function has a resolution of 4us, so it's not suitable for use in timing that need to be more accurate than that.
Moreover, Arduino functions like digitalWrite() can take several microseconds to execute (and soemtimes the timing is pin-dependent!)
Using the hardware timers could yield very accurate delays with little software involvement, but the desired biphasic output woud be "relatively complicated" to implement and may int6erfere with other Arduino functions (PWM, for instance.) There are three-phase motor controllers based on the same AVR family used in Arduinos, which I consider an "existance proof."
Using timers or _delay_us() will make code less portable to other architectures,
Honestly, I do not mind a 4us error on the long (800us) delay but on the scope it appears much worse than 4us. When I disable interrupt for the whole loop it looks pretty accurate.
Correct. I will take a look over the three phase motor controllers.
I don't really care about other architectures. Thanks for letting me know about the _delay_us function. I will take a look into it.