[RISOLTO] Speed Test

Ciao Ragazzi,

vorrei conoscere la velocità con cui arduino esegue il loop di un listato, ma non possiedo un oscilloscopio.

Ho studiato con attenzione questo playground: ShowInfo

scoprendo che addirittura per un analogRead() servono 111.987 us.

Allora mi sarebbe piaciuto analizzare quanti "giri" fa il loop dei vari sketch che sviluppo.

Si potrebbe utilizzare un altro Arduino per fungere da oscilloscopio in questo caso ?

Ho letto, ovviamente, di diversi oscilloscopi costruiti con un Arduino, ma ho due dubbi:

  1. Nell'Arduino da "misurare" devo inserire un interrupt in un punto qualsiasi del loop ?

  2. L'Arduino "misuratore" a cosa deve essere collegato ?

Grazie

Sparo: mettere HIGH un pin ad inizio loop e LOW a fine loop modificando direttamente i registri in modo da avere l'esecuzione più rapida possibile. Dopo puoi estrarre il segnale con quello che vuoi

p.s. io uso un multimetro da 24€ che legge anche le frequenze, non sarà stratosferico ma funziona

... ma ... se memorizzi micros() nel punto di partenza e lo rileggi nel punto d'arrivo e fai la differenza non ti basta ?

Guglielmo

A meno di 2 x quanti micros impiega micros() a memorizzare i micros in una variabile...

Guglielmo ancora una volta la tua soluzione è eccellente. :slight_smile:

E' bastato inserire una lettura di micros ad inizio loop ed una lettura a fine loop.
Poi una semplice stampa della differenza dei due valori sul monitor seriale et voilà !!!!

Come previsto (considerato anche che la risoluzione del micros() è 4 microsecondi) ottengo valori perfettamente congruenti con le attese.

In un primo caso ho testato il classico BlinkWithoutDelay ed il risultato è stato 8 us ossia 125.000 cicli al secondo.

Nel secondo caso ho inserito un analogRead() ed il risultato è stato 112 us ossia "solo" 8929 cicli al secondo.

Grazie di cuore

PS Non ho compreso bene il messaggio di paulus1969 :confused:

Credo che paulus1969 intendesse dire che la funzione micros() impiega lei stessa un certo tempo per essere eseguita ed essendo richiamata 2 volte andrebbe conteggiata per 2. Idem poi per qualunque funzione viene inserita extra, tipo stampare su monitor seriale :slight_smile: vale anche per la soluzione proposta da me :wink:

scusa paulus se mi sono permesso di chiarire :wink:

Era esattamente quello che intendevo!

Grazie delle risposte.
Nel mio caso la precisione al 100% non era l'obiettivo.
Mi accontento di quella al 99,99 % :smiley:

Quindi in questo contesto, la giusta osservazione che lo stesso micros() richiede del tempo ad agire, credo sia irrilevante.

I dati riportati sono coerenti con le aspettative.