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

UNO LEONARDO UNO WiFi R2
FLASH Memory 32KB 32KB 48KB
SRAM 2KB 2.5KB 6KB
EEPROM 1KB 1KB 256B
EEPROM 1KB 1KB 256B
CPU Clock 16MHz 16MHz 16MHz
Operating Voltage 5V 5V 5V
PIN IO 14 20 14 (disponibili 41)
Seriale 1 2 4
I2C 1 1 1
SPI 1 1 1
Timer 2 a 8 bit ,1 a 16 bit 2 a 8bit, 2 a 16bit 5 a 16 bit
ADC 6 ch a 10bit 12ch a 10 bit 16ch 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 Scheda Frequenza di commutazione
Genuino 101 320 KHz
Genuino MKR1000 316.3 KHz *
Arduino UNO 147.5 KHz *
Arduino LEONARDO / MICRO 143.8 KHz *
Arduino UNO WiFi r2 138.3 KHz
Flyport Ethernet 134.5 KHz
Netduino Plus 2 44.27 KHz
FEZ Panda II 12.7 KHz
Netduino 8.4 KHz

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