Go Down

Topic: Ajouter un quartz à une arduino mega (Read 3 times) previous topic - next topic

neoirto

Bonjour à tous,

Je cherche a gérer le temps de la façon la plus précise possible sur une arduino mega. D'après ce que j'ai lu, il faut ajouter un quartz au resonateur ceramic de l'arduino qui n'est pas assez precis pour ce que je veux faire. Il existe donc des modules RTC externes pour le faire, mais j'aimerai votre avis sur une idée différente.

Je cherche a compter le temps sur plusieurs heures avec une precision diabolique (avec le timer0 à un prescaler de 64, cela me fait un increment de TCNT0 toutes les 4us, ce qui est pas mal), mais il y a une derive importante du resonateur sur plusieurs heures, et je voudrai recaller mon compteur periodiquement pour eviter cette derive.

Je precise que je n'en ai besoin que lorsque l'arduino est alimentée, il ne s'agit donc pas d'une horloge.

Alors pensez-vous qu'il soit possible d'imaginer un montage géré par un quartz haute précision, qui génère un PULSE à intervalle régulié, que je récupère sur un vecteur d'interruption externe pour recaller mon horloge précisemment (TCNT0).

De cette façon je conserve la precision de la resolution du timer interne au MCU tout en évitant la dérive non ?

Merci d'avance pour vos réponses

Artouste


Bonjour à tous,

Je cherche a gérer le temps de la façon la plus précise possible sur une arduino mega. D'après ce que j'ai lu, il faut ajouter un quartz au resonateur ceramic de l'arduino qui n'est pas assez precis pour ce que je veux faire. Il existe donc des modules RTC externes pour le faire, mais j'aimerai votre avis sur une idée différente.

Je cherche a compter le temps sur plusieurs heures avec une precision diabolique (avec le timer0 à un prescaler de 64, cela me fait un increment de TCNT0 toutes les 4us, ce qui est pas mal), mais il y a une derive importante du resonateur sur plusieurs heures, et je voudrai recaller mon compteur periodiquement pour eviter cette derive.

Je precise que je n'en ai besoin que lorsque l'arduino est alimentée, il ne s'agit donc pas d'une horloge.

Alors pensez-vous qu'il soit possible d'imaginer un montage géré par un quartz haute précision, qui génère un PULSE à intervalle régulié, que je récupère sur un vecteur d'interruption externe pour recaller mon horloge précisemment (TCNT0).

De cette façon je conserve la precision de la resolution du timer interne au MCU tout en évitant la dérive non ?

Merci d'avance pour vos réponses

bonjour
Je suppose que des BdT cesium ou rubidium sont hors budget ?  :smiley-mr-green:

Un bon compromis pour la génération d'un pulse "bien en forme et calibré" est aujourd'hui d'utiliser la sortie 1PPS de module GPS (il en existe même  des prévus pour cette application à poste fixe pour faire de l'asservissement/secours de BdT en metrologie) le flanc raide de la sortie 1PPS permet aussi le datum "top" de la trame temps.

il y a plusieurs méthode enisageable selon la precision demandée
Mais si c'est juste pour avoir une (relative) bonne precision entre 2 pulses successifs l'utilisation directes des sorties 1PPS est souvent très suffisante.
C'est comme en tout, il déjà dimensionner les contraintes et faire un début de cahier des charges.
Quelle tolérance maxi sur la gigue du 1PPS ? 





Super_Cinci

#2
Jan 12, 2012, 02:36 pm Last Edit: Jan 12, 2012, 02:39 pm by Super_Cinci Reason: 1
je prendrais le timer2, il propose les pins TOSC1 et TOSC2 pour y coller un quartz de 32,768 par exemple. bien qu'en 8 bits, mais avec un prescaler de 128, alors tu te retrouves avec ton timer qui fera un tour toutes les secondes (de là, tu incrémentes un compteur word interne : tu pourras compter jusqu'à plus de 18 heures). (presc à 256, un tour toutes les 2 secondes, presc à 1024, un tour toutes les 8 secondes...)

Vois page 174 (chapitre 20) du datasheet du mega 2560 pour les détails de ce timer.

Edit : pourquoi acheter un GPS uniquement pour avoir un signal 1PPS? ça fait lourd l'investissement...

Artouste



Edit : pourquoi acheter un GPS uniquement pour avoir un signal 1PPS? ça fait lourd l'investissement...


bonjour Super_Cinci
investissement lourd , peut être ou pas  :)
Tout dépend du taux de criticité de l'info delta T souhaitée
entre le QZ horloger qui dérive de plusieurs secondes par jour mais qui coute 0.05 '€ en industrie (celui sur ta cible)
et les horloges cesium ou rubidium qualifiée spatiales à xK€ , il reste de la marge pour discuter.

par principe,  j'essaie toujours de savoir où se situe la(les)  contrainte impérative d'un projet, après et après seulement ensuite tout se discute.

:smiley-mr-green:




al1fch

#4
Jan 12, 2012, 03:04 pm Last Edit: Jan 12, 2012, 03:17 pm by al1fch Reason: 1
Le PCF8583, ci RTC  moins connu que le DS1307 dans l'univers Arduino a quelques avantages
L'un de ses points forts se situe dans les fonctions d'alarme variées liées à sa sortie INT.
http://www.nxp.com/products/interface_and_connectivity/i2c/rtcs_with_i2c_interface/PCF8583.html

==> Sans programmation, sorti d'usine, config par défaut, sans batterie de sauvegarde ...un PCF8583 avec son quartz horloger donne un beau signal carré à 1 Hz sur sa sortie INT. On peut même ajuster la fréquence avec un petit condensateur ajustable.  

(La précision après ajustage sera-t-elle suffisement diabolique ? C'est à voir !!)
+ Rien n'empèche par la suite de l'utiliser pleinement en RTC / RAM avec une des librairies Arduino disponibles .

neoirto

Vos 2 réponses me semblent interessantes, merci !

Je comprends qu'un bete GPS est capable (sous reserve d'acquisition d'un signal tout de meme), d'une precision egale ou superieur à un quartz composé d'elements au nom aussi imprononçable que leur tarif est prohibitif ?
C'est bon à savoir.

Bon sinon, je note que le timer2 est deja prevu pour ce que je souhaite faire (et donc inutile de passer par des interruptions externes), la encore, c'est une bonne nouvelle ! Mais alors du coup, il me faudrait une précision de l'ordre de la usec (au niveau de TCNT2). Avec un multiple de la seconde ce serait encore plus pratique, et donc avec une dérive très faible, sans aller jusqu'à des sommes folles si possible.

Pensez-vous que ce soit réalisable et surtout avez-vous un lien sur la façon de procéder pour relier à TOSC1 et TOSC2, quel schéma électronique, quel type de condo tout ça... J'ai encore jamais bidouillé de quartz.

@al1fch : j'aurai plutot besoin de usec (je pense pas que ce soit si diabolique que ca... c'est sur), mais merci pour la ref

Merci en tout cas  :)

al1fch

@neoirto
pour avancer vers un choix de solution et de composants il faudra nécessairement fixer une exigeance chiffrée en ppm. C'est sous cette forme que sont spécifiées les erreurs, dérives..... des quartz.

1µS pour 1s ça fait  1ppm 

Pour garantir +/- 1ppm dans le temps (viellissement) et avec des variations de température ambiante il faut déjà très bon oscillateur compensé en température (TCXO)

skywodd

Bonjour,


Sans programmation, sorti d'usine, config par défaut, sans batterie de sauvegarde ...un PCF8583 avec son quartz horloger donne un beau signal carré à 1 Hz sur sa sortie INT. On peut même ajuster la fréquence avec un petit condensateur ajustable.

T'est sur de ton coup ? Mes PCF8583 sortis d'usines donne pas de signal sur INT, il faut que je les reconfigurent moi même pour qu'ils sortent le signal 1Hz sur INT ...


(La précision après ajustage sera-t-elle suffisement diabolique ? C'est à voir !!)
+ Rien n'empèche par la suite de l'utiliser pleinement en RTC / RAM avec une des librairies Arduino disponibles .

Je pense pas que la précision du PCF8583 soit suffisante pour son application, il lui faudrait presque un micro-contrôleur avec PLL/RTC intégré (genre PIC32, STM32, LPCx, etc ...) ou alors un circuit oscillateur de trés grande qualité/précision ...

Ps: Je suis en train d'écrire un article/tutoriel au sujet du PCF8583 (utilisation en horloge, avec/sans alarme, + ram) en extension de mon article sur le DS1307 ;)
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Artouste


Le PCF8583, ci RTC  moins connu que le DS1307 dans l'univers Arduino a quelques avantages
L'un de ses points forts se situe dans les fonctions d'alarme variées liées à sa sortie INT.
http://www.nxp.com/products/interface_and_connectivity/i2c/rtcs_with_i2c_interface/PCF8583.html

==> Sans programmation, sorti d'usine, config par défaut, sans batterie de sauvegarde ...un PCF8583 avec son quartz horloger donne un beau signal carré à 1 Hz sur sa sortie INT. On peut même ajuster la fréquence avec un petit condensateur ajustable.  

(La précision après ajustage sera-t-elle suffisement diabolique ? C'est à voir !!)
+ Rien n'empèche par la suite de l'utiliser pleinement en RTC / RAM avec une des librairies Arduino disponibles .



bonjour Al1
compo intéressant mais il faut cibler sa catégorie de precision et savoir à quoi et dans quelles conditions il peut être employé.

déjà :
Quote
The frequency tolerance depends on the quartz
crystal tolerance, the capacitor tolerance and the device-to-device tolerance. Average
deviations of ±5 minutes per year are possible.


Il faut savoir ce qui est important :
en métrologie temporelle il est très différent de savoir/connaitre si un signal apparait du mieux possible tous les débuts (ou fin) de période  (là la  seconde)  ou s'il apparait reparti dans l'intervalle.
pour résumer, c'est très différent selon si l'on souhaite compter les secondes ou si l'on souhaite s'assurer de la durée reproductible d'une seconde. (seconde prise la pour demo) .

dans le premier cas la gigue n'est pas très importante, et peut être même  être ignorée .
dans le second sa prise en compte elle est très importante.

Neoirto :  si vous exposiez un peu plus ce que vous voulez réaliser ?  où se situe exactement la contrainte temporelle ?





al1fch

#9
Jan 12, 2012, 04:00 pm Last Edit: Jan 12, 2012, 04:08 pm by al1fch Reason: 1
Quote
T'est sur de ton coup ? Mes PCF8583 sortis d'usines donne pas de signal sur INT, il faut que je les reconfigurent moi même pour qu'ils sortent le signal 1Hz sur INT ...


Sur de mon coup ? pas à 100% vu que mes manips remontent à presque 2 ans. J'avais été surpris de constater le signal 1Hz avant programmation dès la mise sous tension. Tout à l'heure avant de poster j'ai juste jeté un coup d'peuil à la doc et au §7.9 de la doc NXP j'ai eu l'impression de voir la confirmation.
Je veux bien revérifier.
Bonne idée de faire un tuto sur ce composant trop méconnu içi vu ses points forts.
Outre les alarmes variées (alarmes Timer et alarmes Calendrier) il y a la possibilité de fonctionner sous un Vcc 3,3V . J'avais gardé l'idée qu'il n'y a rien à faire pour avoir un carré d 1Hz sur INT mais que par contre il fallait se coltiner attentivement la doc pour obtenir volontairement autre cette sortie (programmation pas évidente.)


Super_Cinci

#10
Jan 12, 2012, 04:01 pm Last Edit: Jan 12, 2012, 04:09 pm by Super_Cinci Reason: 1
Il faut voir ce que tu attends réellement d'une base de temps dans ton projet.

Tu veux une résolution ou une précision à la µs ? la résolution c'est que tu auras accès à une valeur représentant le nombre de µs, la précision, c'est qu'au bout de 1 million de secondes (temps officiel), ton compteur affichera entre 999 999 et 1 000 001 secondes... (+/- 1 ppm quoi).

Dois-tu connaître l'heure réelle (UTC) ou l'heure relative (h = 0:00:00 au démarrage de l'arduino)?

combien de temps ton montage restera-t-il allumé, et au bout de ce temps, quelle tolérance de dérive autorises-tu?

En gros, pour avoir des idées cohérentes, il nous faudrait les réponses à ces questions, voire d'autres...

Au pire, on peut utiliser le 50Hz du secteur sur l'entrée T5 (timer5) (ce que font les radio-réveils u supermarché), qui peut produire (une fois redressé en double alternance) un signal carré de 100Hz relativement précis, soit une résolution de 10 ms...

skywodd

#11
Jan 12, 2012, 04:28 pm Last Edit: Jan 12, 2012, 04:35 pm by skywodd Reason: 1

Sur de mon coup ? pas à 100% vu que mes manips remontent à presque 2 ans. J'avais été surpris de constater le signal 1Hz avant programmation dès la mise sous tension. Tout à l'heure avant de poster j'ai juste jeté un coup d'peuil à la doc et au §7.9 de la doc NXP j'ai eu l'impression de voir la confirmation.
Je veux bien revérifier.

Je vais faire le test, mais il me semble bien que je n'avais pas 1Hz sur INT, mais avec ma mémoire de poisson rouge ...
J'ai rien dit, t'as raison ya bien 1Hz sur INT avec un PCF8583 vierge ... comment j'avais bien pu fait pour pas l'avoir l'autre fois ...


Bonne idée de faire un tuto sur ce composant trop méconnu içi vu ses points forts.
Outre les alarmes variées (alarmes Timer et alarmes Calendrier) il y a la possibilité de fonctionner sous un Vcc 3,3V . J'avais gardé l'idée qu'il n'y a rien à faire pour avoir un carré d 1Hz sur INT mais que par contre il fallait se coltiner attentivement la doc pour obtenir volontairement autre cette sortie (programmation pas évidente.)

Il peut servir de compteur aussi ;) pour mon tuto je ferai : mode horloge, avec et sans alarme, génération de fréquence, utilisation comme ram "tout usage".
Je ferais peut être une parenthèse sur le mode compteur et le mode "synchro 50Hz" mais dans ce cas juste un truc en passant.
Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

al1fch

#12
Jan 12, 2012, 04:41 pm Last Edit: Jan 12, 2012, 04:44 pm by al1fch Reason: 1
Testé à l'instant sur plaque d'essai : 1Hz avec juste le quartz, un petit condensateur de qq pF, le pull up pour INT  et les broches I2C en l'air => 1Hz

neoirto

Woussssch, merci pour toutes vos réponses :

Alors bien sur, c'est plus compliqué et couteux que ce que j'imaginai, mais ça doit être jouable. Voila le but :
Je cherche à synchroniser precisemment :
- des mesures de capteurs divers enregistrés par l'arduino embarqué dans un parapente (notamment accelerometre), avec
- les images d'une video NTSC 29,97 Hz, dont je crois que la precision est très élevée (les standards ne rigolent pas avec le timing si j'ai bien compris)

J'ai donc besoin qu'après 1 heure d'enregistrement, la precision soit encore globalement bonne (environ 1us), c'est donc la derive dans le temps qui compte pour moi, en heure relative.

Voila, et donc pas de secteur sur le parapente !

Merci encore à tous

Jean-François

Pour refaire une horloge de voiture j'avais besoins d'un signal de 2 Hz que j'ai obtenu en utilisant un DS32KHz dont la fréquence était ensuite "découpée" par un CD4060.

De la même manière 1Hz est possible.
MacBook intel core 2 duo  os X snow Leopard 10.6<br/> eMac PPc G4  os X Leopard 10.5<br/>powerbook G4 os X Leopard 10.5
imac PPC G3 os X Pa

Go Up