Analisi oscilloscopio Blink Arduino UNO (senza timer)

L'obiettivo di questa guida è di analizzare, attraverso una misura con l'oscilloscopio, la fedeltà della frequenza della scheda Arduino UNO. Verranno fatte due prove: la prima ha lo scopo di analizzare qual'è la massima frequenza di output di un singolo pin, la seconda invece vuole verificare la fedeltà tra frequenza impostata via software e frequenza reale d'uscita.

PROVA 1: Massima frequenza a ciclo continuo (no timer)

Per la prova viene utilizzato un Arduino UNO rev.3 il quale sfrutta come microcontrollore l'ATmega328P.  Viene caricato lo sketch esempio Blink presente nell'IDE . Per aprirlo seguire:

File > Esempi > 01. Basics > Blink

e nella sezione loop rimoviamo i delay ottenendo quanto segue:

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
}

 

 Caricato lo sketch e collegato l'oscilloscopio sul terminale 13 possiamo vedere la seguente forma d'onda:

 

 

Notiamo che il periodo è formato da 4,3 divisioni e come costante TIME/DIV 2 microsecondi. Ne segue che il periodo T ha una durata di 8,6 microsecondi.

Di conseguenza possiamo calcolare la frequenza f:

F = 1 / T = 1 / 0.0000086 = 116279 Hz = 116 KHz

PROVA 2: Verifica frequenza a ciclo continuo 

In questa prova si vuole verificare il corretto funzionamento del comando delay. Aprendo sempre il file d'esempio blink impostiamo il delay  nella sezione loop a 500 micro secondi.

/*
  Blink
  Turns on an LED on for one second, then off for one second, repeatedly.
 
  This example code is in the public domain.
 */
 
// Pin 13 has an LED connected on most Arduino boards.
// give it a name:
int led = 13;

// the setup routine runs once when you press reset:
void setup() {                
  // initialize the digital pin as an output.
  pinMode(led, OUTPUT);     
}

// the loop routine runs over and over again forever:
void loop() {
  digitalWrite(led, HIGH);   // turn the LED on (HIGH is the voltage level)
  delay(500);
  digitalWrite(led, LOW);    // turn the LED off by making the voltage LOW
  delay(500);
}

 

 Caricato lo sketch e collegato l'oscilloscopio sul terminale 13 possiamo vedere la seguente forma d'onda: 

 

 

Notiamo che il periodo è formato da 10 divisioni e come costante TIME/DIV 100 microsecondi. Ne segue che il periodo T ha una durata di 1 secondo. Ciò significa che lo stato HIGH ha durata 0.5 secondi (500 millisecondi) e lo stato LOW ha durata 0.5 secondi (500 millisecondi) come da impostazioni dello sketch. 

Di conseguenza possiamo calcolare la frequenza f:

F = 1 / T = 1 / 1 = 1 Hz