Go Down

Topic: Dividere il segnale di Clock di Arduino (Read 940 times) previous topic - next topic

Claudio_FF

#15
Aug 06, 2019, 11:40 pm Last Edit: Aug 06, 2019, 11:43 pm by Claudio_FF
non riesco a capire perché un codice è più preciso dell'altro se in entrambi è presente l'istruzione if... dove sbaglio?
La valutazione dell'if può avvenire con un certo ritardo rispetto al momento esatto dello scadere del periodo, ipotizziamo 10µs per vari motivi, se noi facciamo partire un nuovo conteggio dal momento attuale (in ritardo di 10µs), abbiamo appena introdotto un errore che si accumula ad ogni scadenza aumentando sempre di più.

Se invece spostiamo solo il paletto di riconoscimento avanti di un periodo esatto, è vero che comunque possiamo riconoscere la scadenza con un certo ritardo, ma non lo accumuliamo, per cui il periodo rimane preciso. In ogni caso la precisione dell'oscillatore ceramico di Arduino comporta qualche secondo di errore all'ora... diverso sarebbe se avesse un vero quarzo.
* * * * Una domanda ben posta è già mezza risposta * * * *

gpb01

Caro Guglielmo, potresti farci un po' di lezioncine con esempi pratici ed esperimenti per imparare a usare i timer, cosa che si è sempre fatta con i PIC ma quasi nessuno ha mai usato con Arduino?
Intanto allego un bel documento che scrisse il nostro leo72 nel lontano 2013 in occasione di un incontro che si tenne a Bassano del Grappa.

Poi dai anche un'occhiata al buon "generatore di codice" che ha linkato brunello nel post #3.

Guglielmo
Search is Your friend ... or I am Your enemy !

zioetzi

C'è molta carne al fuoco. Grazie mille, mi avete dato vari spunti su cui lavorare.

Per lo OP
Bel lavoro, ma perché non hai pensato a una fonte di frequenza ultrastabile?
So di chi prende come riferimento la frequenza dei trasmettitori AM RAI
Molto stabili, quasi il massimo ottenibile
Oppure la portante del DCF77
Precisa come la media dei 5 orologi atomici più  precisi d'Europa
Questa soluzione sarebbe interessante, sicuramente eccessiva per la montatura piccola, ma forse ideale per la più grande. Ti confesso, però, che non avrei la minima idea su come fare...

Ezio

Datman

Eh, ma ottenere 24,14 Hz...
Con un modulo GPS, allora, che dalla Cina paghi meno di 10€ (ma che pazienza che ci vuole... 4 mesi ci ha messo!), puoi ottenere qualunque frequenza a passi di 1Hz da 1Hz a 15MHz! :-)
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

zioetzi

Non ho fretta per terminare la montatura più grande, ma questa cosa mi stuzzica.
Potresti indicarmi il tipo di scheda (anche tramite messaggio privato qualora fosse contro il regolamento postare link di prodotti) ed eventualmente qualche tutorial?
Nel caso della montatura maggiore cambiano completamente le riduzioni meccaniche, pertanto la frequenza sarà per forza diversa dai 24,14Hz.

Ezio

Datman

L'ho acquistato su ebay da chipworld
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

Maurotec

Quote
Intanto allego un bel documento che scrisse il nostro leo72 nel lontano 2013 in occasione di un incontro che si tenne a Bassano del Grappa.
Grazie, non l'avevo e non sapevo l'avesse scritto (o forse l'ho dimenticato).

Aggiungo che il 328 può essere cloccato da una generatore esterno magari compensato in temperatura e se fosse anche tarabile sarebbe il massimo. Ulteriore spunto circa l'istruzione _nop_ asm che viene eseguita in un ciclo di clock, cioè 1/16000000 = 62,5ns.

Ad esempio con la seguente formula puoi ricavare la frequenza,
1÷(0,041424+(0,0000000625×n_nop)),

dove n_nop sono il numero di istruzioni nop, ad esempio n_nop = 16,
1÷(0,041424+(0,0000000625×16)) = 24,14001207Hz

0,041424 è il periodo suggerito da Guglielmo.

PS: il problema rimane la stabilità

Ciao.
 

Datman

Avevo scritto:
Allora, con il software puoi anche fare aggiustamenti finissimi: se 99 li prendo e uno lo scarto, ottengo una riduzione dell'1%, cioè 0,24 Hz su 24 :-)
In questo modo devi, sì, avete una frequenza di clock stabile (un quarzo, possibilmente un OCXO o un TCXO se le variazioni di temperatura saranno notevoli), ma potrai fare la taratura fine tramite un encoder rotativo, impostando una frequenza appena più alta e regolando ogni quanti impulsi deve toglierne uno.
Hi,I'm Gianluca from Roma.I play&work with electronics since I was16(1984).
After 25yrs of maintenance on cameras&video mixers,since 2013myJob is HDTVstudios design.
Since Jan2015 IPlayWith Arduino:bit.ly/2F3LPWP
Thanks 4 a Karma if U like my answer

zioetzi

In questo modo devi, sì, avete una frequenza di clock stabile (un quarzo, possibilmente un OCXO o un TCXO se le variazioni di temperatura saranno notevoli), ma potrai fare la taratura fine tramite un encoder rotativo, impostando una frequenza appena più alta e regolando ogni quanti impulsi deve toglierne uno.
Chiarissimo.
Adesso vedo che soluzione prendere ed effettuare alcune prove per capire qual'è il margine d'errore accettabile.
Grazie mille
Ezio

Go Up