Arduino Uno gpio Speed Test

Gpio Speed Test velocità di commutazione di un pin digitale

Per eseguire una comparazione con Netduino ho eseguito lo stesso esperimento (Netduino speed test) anche per Arduino Uno. Il gpio speed test è molto semplice, basta definire un pin in uscita ed eseguire in modo ciclico un’istruzione che lo ponga a livello logico alto e poi basso.
Questa commutazione continua genera un segnale ad onda quadra misurabile con un oscilloscopio.

Arduino uno gpio speed test

Il codice seguente mostra come effettuare questo test:

 

Arduino Speed test

La frequenza ottenuta sul pin 0 è di ben 125 KHz decisamente superiore a quella ottenuta dal Netduino (8.4KHz) nonostante i suoi 48 Mhz di clock contro i 16Mhz dell’Arduino.

L’istruzione digitalWrite() impiega circa 4uS contro i 53uS della Write() eseguita dal Netduino.

Netduino impiega delle risorse per far girare il .Net micro framework ecco perché nello speed test contro Arduino esce perdente.
Arduino nonostante i sui 16Mhz di clock è capace di essere più veloce, perché il suo codice, accede direttamente alle funzioni a basso livello del microprocessore ATMEGA328.

2 risposte a Arduino Uno gpio Speed Test

  • Testando un piccolo programma che legge il valore digitale sui pin (ovviamente su Arduino), mi è capitata una cosa davvero strana (non so se dipende direttamente dalle capacità parassite o da altro).

    In pratica, se setto un pin digitale in modalità “OUTPUT” (stesso con la lettura dei pin analogici) e invio il valore letto sulla seriale mi capita questo:

    – se collego il pin alla 5 Volt, mi manda HIGH (OK questo è previsto);
    – se collego il pin a GND, mi manda LOW (…anche questo è ovvio);
    – se collego a 5 volt e poi tolgo il filo sulla seriale inizia a invia in alternanza HIGH e LOW (strano).

    Da cosa può dipendere il fatto che il pin legge HIGH, anche quando non è connesso a nulla?

  • Questo dipende dalle famose resistenze di pull-up. Devi mettere una resistenza (15-20Kohm) che collega il pin digitale alla +5Vdc, in modo da ottenere sempre dei valori definiti.
    Infatti se lasci il pin ‘appeso’ Arduino può leggere dei dati non validi.
    Prova e fammi sapere.

    Ciao
    Marco

Preferiti
Rimani aggiornato

Sondaggi
Sorry, there are no polls available at the moment.
Seguimi su Twitter