Pages: [1] 2 3   Go Down
Author Topic: Ajouter un quartz à une arduino mega  (Read 2847 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4170
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ? 




Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 10
Posts: 1294
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: January 12, 2012, 08:39:03 am by Super_Cinci » Logged

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4170
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset


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  smiley
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



Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 961
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 .
« Last Edit: January 12, 2012, 09:17:16 am by al1fch » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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  smiley
Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 961
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

@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)
Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink
Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

Offline Offline
Faraday Member
**
Karma: 19
Posts: 4170
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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 ?




Logged

France
Offline Offline
God Member
*****
Karma: 4
Posts: 961
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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.)

« Last Edit: January 12, 2012, 10:08:04 am by al1fch » Logged

Bretagne
Offline Offline
Edison Member
*
Karma: 10
Posts: 1294
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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...
« Last Edit: January 12, 2012, 10:09:07 am by Super_Cinci » Logged

France
Offline Offline
Faraday Member
**
Karma: 52
Posts: 5341
Arduino Hacker
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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 smiley-wink 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.
« Last Edit: January 12, 2012, 10:35:17 am by skywodd » Logged

Des news, des tuto et plein de bonne chose sur http://skyduino.wordpress.com !

France
Offline Offline
God Member
*****
Karma: 4
Posts: 961
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
« Last Edit: January 12, 2012, 10:44:22 am by al1fch » Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 79
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

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
Logged

Forum Moderator
Geneva
Offline Offline
Faraday Member
*****
Karma: 24
Posts: 3171
Yoplait... le pt'it suisse
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

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.
Logged

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

Pages: [1] 2 3   Go Up
Jump to: