La formula per impostare i divisori è piuttosto semplice:FVCO = [(P * B) + A] * FOSC/R
dove:FVCO = Frequenza in uscita al VCOP = prescalerB = contatore a 11 bitA = contatore swallow (A deve essere < o = B)FOSC = frequenza dell 'oscillatore di riferimentoR = contatore a 14 bit (step)Ma facciamo un esempio.
FVCO = 66MHz
FOSC = 1MHz
step = 25KHz
R = FOSC / step = 1MHz / 25KHz = 40 in binario 101000 (i 7 bit in rosso nel registro R_P nello sketch di Arduino)
Posso scegliere P tra due valori o 64 o 128 (posso decidere a caso e cambiare la scelta se risulta A < B)Per P = 64 il bit 15 nel registro R_P deve essere posto a 1 (in blu nel registro R_P nello sketch di Arduino)
[(P * B) + A] = FVCO / step = 66MHz / 25KHz = 2640
Frazionario = [(P * B) + A] / P = 2640 / 64 = 41.25
da cuiB = 41 in binario 101001 (gli 11 bit in verde nel registro N nello sketch di Arduino)
A
= [(P * B) + A] MOD P = 2640 MOD 64 = 16 in binario 10000
(i 7 bit in celeste nel registro N nello sketch di Arduino)
(A è il resto (o modulo) di una divisione) dato che A è minore di B la scelta del prescaler è giusta.Per
ultimo, il bit zero del registro R_P deve essere sempre a 1 (bit zero
in arancione nel registro R_P nello sketch di Arduino), il bit zero del
registro N deve essere sempre a zero (bit zero in viola nel registro N
nello sketch di Arduino).Per
il dimensionamento dei componenti che compongono il filtro consiglio,
per evitare mal di testa, di usare il seguente calcolatore on line:https://www.changpuak.ch/electronics/pll_loopfilter_calc.php#Qui il programma.Fabio