[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