[Hwlibero] Clock AVR

Jumping Jack jumpingjack a jumpingjack.org
Ven 28 Apr 2017 17:22:29 CEST


Forse è presto, non so nemmeno quanti sono iscritti, ma ci sono cose che 
sarebbe utile sapere per evitare di perdere tanto tempo.
Gli AVR hanno una CPU RISC quindi la loro efficienza dipende totalmente 
dalla bontà del codice e del compilatore. Arduino va bene, ma fa un po' 
pena, se non ci si spinge sotto i millisecondi tutto può andare, ma 
mentre con un buon codice si può lavorare tranquillamente su operazioni 
nell'ordine di pochi nanosecondi, con le librerie standard Arduino non 
si può.

L'osillatore di un ATmega328p (Arduino UNO) è a 8MHz massimo, ma varia 
molto con la temperatura (anche 10%) ecco perché c'è un quarzo esterno.
Gli ATmega328p possono lavorare fino a 20MHz che equivalgono a 20MIPS 
(quasi tutte le operazioni, essendo un RISC, vengono eseguite in un 
colpo di clock).
Il clock di 16MHz di arduino è perfetto per vari tipi di comunicazioni, 
tranne per la comunicazione seriale. O si aggiunge un chip UART oppure è 
meglio usare frequenze non standard, se collegati ad un PC, non c'è 
alcun problema a lavorare 1.000.000 di baud con la UART di un PC. 
Altrimenti solo 9600baud (o divisione di essa) è l'unica utilizzabile 
senza errori. (qui vorrei sapere perché l'IDE di Arduino supporta solo 
le frequenze standard sul monitor seriale)
E' possibile mettere un qualsiasi cristallo su Arduino, 14.7456 MHz è la 
frequenza perfetta per utilizzare qualsiasi frequenza seraile standard, 
ovviamente vanno a ramengo tutti gli altri protocolli che usano 
frequenze decimali.

Insomma per farla breve, se avete bisogno di una seriale più veloce di 
9600, o andate su frequenze decimali, o aggiungete una UART o cambiate 
l'oscillatore.

Per l'I/O se avete necessità di velocità elevate, ci sono i comandi AVR 
che permettono un I/O parallelo di 1-2MHz




Maggiori informazioni sulla lista Hwlibero