GPIO Speed test e considerazioni sulla UNO WiFi r2

Nonostante la presenza di alcune schede della serie MKR che hanno a bordo il modulo WiFi è da qualche tempo disponibile la scheda UNO WiFi r2. Questa nuova scheda ha numerose funzionalità rispetto alla UNO (basata sul micro ATMEGA328) e personalmente credo che la caratteristica maggiore sia la presenza del microcontrollore ATMEGA4809. Nonostante la maggior parte dei progetti basati su Arduino impieghi il micro ATMEGA328 probabilmente è ora il momento di guardare avanti utilizzando un nuovo microcontrollore.

ATMEGA4809

ATMEGA4809 Arduino UNO WiFi r2Per capire cosa c’è di nuovo nell’ATMEGA4809, di seguito una tabella comparativa tra i vari micro delle schede Arduino UNO, Leonardo e UNO WiFi

UNOLEONARDOUNO WiFi R2
FLASH Memory32KB32KB48KB
SRAM2KB2.5KB6KB
EEPROM1KB1KB256B
EEPROM1KB1KB256B
CPU Clock16MHz16MHz16MHz
Operating Voltage5V5V5V
PIN IO142014 (disponibili 41)
Seriale124
I2C111
SPI111
Timer2 a 8 bit ,1 a 16 bit2 a 8bit, 2 a 16bit5 a 16 bit
ADC6 ch a 10bit12ch a 10 bit16ch a 10bit

Si può notare subito una maggiore quantità di memoria programma, una maggiore quantità di memoria SRAM e la presenza di ben 4 seriali UART.
Il package  può essere un limite, sono disponibili infatti il TQFP48 e il UQFN, e questo significa che per utilizzarlo in progetti custom è necessario utilizzare un pcb o un supporto adattatore (TQFP to DIP).

Probabilmente avrebbe più senso avere una versione delle schede serie MKR con questo microcontrollore. In questo modo verrebbe semplificata la prototipazione di schede custom.

Sulla carta l’ATMEGA4809 ha molte caratteristiche che potrebbero permettere una evoluzione della piattaforma Arduino basata sui microcontrollori a 8 bit. La presenza di 5 timers, il gran numero di line GPIO (41), 11 linee PWM e altre funzionalità, che potete leggere sul datasheet, lo candidano (forse) ad essere il dispositivo ideale per essere utilizzato nelle future schede.

ATMEGA4809 Speed Test

Come negli articoli precedenti ho eseguito una commutazione continua di una linea GPIO per misurare la frequenza di commutazione. Eseguendo il codice sottostante e misurando e misurando con un oscilloscopio la frequenza di commutazione presente sulla linea GPIO 0 ho ottenuto un valore di circa 138.3KHz.

void setup()
{
  //pin0 in uscita
  pinMode(0, OUTPUT);
}
 
void loop()
{
  //ciclo infinito
  while(true)
  {
    //metto il pin0 alto
    digitalWrite(0, HIGH);
    //metto il pin0 basso
    digitalWrite(0, LOW);
  }
}

Di seguito la tabella riepilogativa aggiornata:

Tipo SchedaFrequenza di commutazione
Genuino 101320 KHz
Genuino MKR1000316.3 KHz *
Arduino UNO147.5 KHz *
Arduino LEONARDO / MICRO143.8 KHz *
Arduino UNO WiFi r2138.3 KHz
Flyport Ethernet134.5 KHz
Netduino Plus 244.27 KHz
FEZ Panda II12.7 KHz
Netduino8.4 KHz

Le voci dove è presente l’asterisco (*) sono i nuovi valori ottenuti utilizzando gli ultimi aggiornamenti (Arduino avr Boards versione 1.6.23)