# Atmel AVR

L'AVR è una famiglia di microcontrollori RISC ad architettura Harvard sviluppati dalla Atmel a partire dal 1996. L'AVR fu una delle prime famiglie di microcontrollori a utilizzare una memoria flash interna per memorizzare il contenuto del programma: questo permette di cancellare la memoria di programma e riscriverla con una nuova versione in pochi secondi e anche senza rimuovere il microcontrollore dalla scheda su cui è montato, velocizzando enormemente il processo di correzione e messa a punto del codice. Durante gli anni novanta la maggior parte dei microcontrollori utilizzavano One-Time Programmable ROM, EPROM, o EEPROM.
I creatori dell'AVR non hanno mai chiarito il significato della sigla. È comunemente accettato che AVR stia per "Alf and Vegard RISC processor" (da Alf-Egil Bogen e Vegard Wollen, i due studenti che lo idearono).
I microcontrollori AVR tipo "mega" sono diventati molto popolari da quando sono stati inclusi nel progetto della piattaforma Arduino.

## Caratteristiche generali

Caratteristiche salienti di tutti i dispositivi sono:
* memoria di programma Flash (riprogrammabile per almeno 10.000 volte, ma nella serie XMega questo limite è diventato 100.000)
* memoria EEPROM (riscrivibile almeno 100.000 volte)
* memoria RAM statica (di dimensioni variabili a seconda del dispositivo)
* disponibilità di un clock interno RC calibrato su ogni singolo dispositivo
* possibilità di bloccare l'accesso al programma per evitare copiature (chiamato Lock Bit)
* Watchdog con oscillatore interno autonomo
* POR (Power On Reset: reset automatico quando viene applicata la tensione di alimentazione) e se, durante il funzionamento, la tensione di alimentazione scende sotto una soglia minima prefissata è possibile inserire un reset automatico (in inglese: Brown-out Detection Circuit, circuito di rilevamento dei cali di alimentazione)

### Famiglie base

In base alle caratteristiche gli AVR si possono suddividere in quattro gruppi:
* Tiny (i dispositivi più piccoli come dice la traduzione del termine) con sigle che iniziano con "ATtiny"
** 1÷8 kB di memoria (flash) per il programma
** set di dispositivi hardware periferici limitato (ad esempio linea seriale disponibile solo su alcuni microcontrollori)
** contenitori disponibili con numero di pin (e quindi di connessioni ingresso/uscita) limitato (da 8 a 32)
* Mega (con sigle che iniziano con "ATmega")
** 4÷256 kB di memoria (flash) per il programma
** set di istruzioni esteso
** maggior numero di periferiche disponibili (ad esempio presenza di una o più linee seriali, presenza di più PWM, ecc.)
** contenitori con pin da 28 a 100
* XMega (sigle che iniziano con "ATXMega")
** 64-384 kB di memoria flash per il programma
** set di istruzioni esteso
** bus dati interno 16 bit
** periferiche disponibili ulteriormente aumentate rispetto ai Mega
** gestione DMA ed eventi
** clock fino a 32 MHz (48 MHz nei modelli con USB)
** nuove periferiche evolute (disponibili o no a seconda del modello), ad esempio unità di cifratura AES, USB high-speed, DAC
* AT90, MCU di questa serie sono state tipicamente studiate per applicazioni specifiche
Questi dispositivi sono concettualmente simili ai Mega, ma a seconda del modello contengono delle periferiche particolari pensate per un uso specifico. Ad esempio esistono versioni con a bordo controllore per display LCD, controllore per porta USB, per seriale CAN, ecc. Tuttavia, le periferiche specializzate degli AT90 sono oggi disponibili nella serie XMega oppure nella serie UC3 con architettura AVR32: di conseguenza per progetti di nuova concezione l'uso degli AT90 non è consigliabile.
* AVR 32-bit
Nel 2006 Atmel ha messo in commercio dei microcontrollori basati sull'architettura a 32-bit AVR32. Questa include istruzioni SIMD e DSP, assieme con altre caratteristiche di elaborazione audio e video. Questa famiglia a 32-bit di dispositivi è stata creata per competere con i processori basati su architettura ARM. L'insieme delle istruzioni è simile ad altri RISC, ma non è compatibile con gli originali AVR.