Velocità arduino

astrobeed:
La digitalWrite, e la digitalRead, richiedono circa 2us per essere eseguite, se ne metti due in fila in un loop eterno ci vogliono circa 5 us per eseguire l'intero ciclo, il risultato finale è che ottieni un'onda rettangolare con un fronte che dura circa 2 us e uno 3us, alla fine la frequenza out è attorno ai 200 kHz.
Utilizzando la scrittura diretta dei registri, p.e. tramite le macro cbi e sbi, servono solo due cicli macchina per cambiare lo stato del pin, ovvero 125 ns, in questo caso il risultato finale è che hai un fronte che dura solo 125ns e uno che dura poco meno di 1us per via del tempo richiesto per la gestione del loop, frequenza attorno ai 900 kHz.

se al posto del loop si usa un while non si risparmia qualcosa?