cristallo esterno arduino nano

Ciao ragazzi,
avrei intenzione di collegare un cristallo esterno ad un arduino nano per migliorare la precisione per quanto riguarda la scansione del tempo, in quanto sto realizzando una specie di cronometro con precisione al centesimo di secondo.
Per tempi brevi (dell'ordine della decina di secondi) potrebbe andarmi bene il cristallo a bordo della scheda, ma per tempi dell'ordine dei minuti ho già un errore non trascurabile.
Quindi mi chiedevo se:

  1. esiste uno schema che mi consenta di collegare un cristallo esterno che mi consenta maggiore precisione.
  2. (se la "1)" è fattibile) se posso continuare ad usare la funzione "millis()" che tutt'ora uso per lo skecth. Insomma vorrei evitare di cambiare il cuore dello sketch stesso (se possibile).

Grazie a tutti.

Ma il Tuo NANO ha un quarzo o un risonatore?

Ciao Uwe

ciao uwe,
non saprei, cmq è la versione 3.0

Secondo me ha già il quarzo ... almeno vedendo lo schema e le foto :slight_smile:

Guglielmo

Sicuramente non é un Arduino NANO originale. Percui la copia potrebbe avere qualsiasi cosa.

@domix1684
Ci dai il link al prodotto?

Ciao Uwe

In allegato la foto del nano che sto usando.
Mi pare di capire che a seconda della versione, cambia quindi il componente in questione, di conseguenza la precisione per la mia applicazione...

domix1684:
In allegato la foto del nano che sto usando.

... emmm ... dove è la foto ? Ma è un Arduino Nano originale o clone ?

Guglielmo

non so perche ma non mi permette di allegarla (riprovo tra 5 minuti), comunque dovrebbe essere un clone

Mmm ... vicino a D4/D5 ... sembrerebbe esserci un quarzo ... quindi, se così è, hai poco da fare ...

Però mi fai vedere il codice (... mi raccomando, in conformità al regolamento, punto 7, racchiuso tra i tag CODE che, in fase di edit, ti inserisce il bottone </> ... primo a sinistra) ? ... perché magari il problema è li dentro ... ::slight_smile:

Guglielmo

Ok Guglielmo grazie, stasera tornato da lavoro te lo posto.
Comunque il discorso "poco preciso per tempi lunghi" pensavo fosse una peculiarità delle schede arduino, ragion per cui si usano gli rtc esterni per applicazioni su misura del tempo.
Prima di scrivere ho letto diversi post sul fatto che la precisione del quarzo è influenzata da vari fattori quali temperatura, umidità ecc, non so a questo punto se magari mi sono creato problemi che in realtà non ci sono o che posso trascurare.

Inoltre a dire il vero non ho provato sperimentalmente la precisione per diversi valori temporali, se il problema dovesse essere l'hardware sono disposto a cambiare scheda pur di non stravolgere il software.
Saluti

domix1684:
Comunque il discorso "poco preciso per tempi lunghi" pensavo fosse una peculiarità delle schede arduino, ragion per cui si usano gli rtc esterni per applicazioni su misura del tempo.

Il problema di fondo non è solo la precisione/stabilità del clock, che si può anche compensare facilmente, è che la stessa millis() non è precisa sul lungo periodo perché per come è strutturata può introdurre degli errori periodici, anche di qualche ms a volta, a seconda del software che stai facendo girare.

ho trovato per caso il codice (santo cloud) potete visionarlo.
ho sottolineato in rosso i punti in cui uso la funzione millis().
Vi anticipo che tale funzione la resetto ogni volta che inizio un conteggio dei secondi.

qualcuno ha avuto modo di visionare lo sketch?

... gli ho dato un'occhiata (... data l'estrema SCOMODITA' di visionare codice su jpg), ma non mi sembra di aver visto assegnazioni con millis() migliorabili ... ::slight_smile:

Se hai modo di meterlo come "text" così uno se lo carica in un editor e riesce a guardarlo meglio ... magari si scopre qualche cosa di più !

Guglielmo

domix1684:
qualcuno ha avuto modo di visionare lo sketch?

Un quarzo ha una precisione (o errore come lo vuoi vedere) di circa cinque/dieci minuti all'anno. Se millis viene lasciata conteggiare "in pace", quindi niente reset, ne blocchi nel funzionamento degli interrupt, allora il suo conteggio avrà quella precisione.

Il modo in cui viene usato il conteggio però può di nuovo essere impreciso (enormemente impreciso), se ne parlava qua.

IL tuo codice soffre non solo dell'accumulo continuo dell' errore δ, più probabilmente un ulteriore errore dovuto al reset, ma anche dell'overflow del contatore dopo due alla trentaduesima millisecondi (che blocca completamente l'avanzare dei secondi).

La soluzione è lasciare conteggiare "in pace" millis e usarla come da link indicato.