Go Down

Topic: Mode burst analogique (Read 6870 times) previous topic - next topic

Touf2638

Bonjour,
Quelqu'un aurait il un exemple à me passer pour utiliser le mode burst sur les entrées analogiques.
Je suis sur une arduino Due.
Cordialement

68tjs

Quelle signification donnes tu au mot "burst" ?

Pour moi le mode "burst" c'est un mode  "rafale". C'est à dire que l'information arrive par paquets et qu'entre deux paquets il ne se passe rien.
L'application que je connais concerne la transmission de données numériques où il faut récupérer une horloge à partir du seul train de données.
Deux techniques existent : le mode "burst" qui est très délicat et le mode classique où  quand aucune information n'est à transmettre on injecte des bits dits de bourrage, ce qui évite de désynchroniser les récepteurs : c'est le mode télécom.

Je ne vois pas en quoi consiste l'application en analogique.

Touf2638

En fait on m'a dit qu'il existait un mode qui lançait l'acquisition analogique sur une fréquence configurable et qui tournerait en parallèle du programme (indépendamment).
Il suffirait ensuite de lire un registre où se trouverait la dernière valeur lue analogique. Ceci pour optimiser le temps de traitement d'une interruption.

68tjs

Ok.
L'information dont tu as besoin se trouve dans la datasheet du micro-controleur.
Saches qu'une conversion Analogique/Digitale peut être déclenchée par plusieurs moyens dont par les "Timers" qui sont des blocs de logiques numériques câblés en dur dans la puce et indépendants des zones mémoires.

Ces "Timers" sont configurables et commandables par programmation.
Tant qu'ils ne reçoivent pas l'ordre de s'arrêter ils vivent leur vie indépendamment du programme et ne le ralentisse en rien.

Toutes les informations détaillées se trouve dans la datasheet. A ma connaissance, mais je ne sais pas tout, il n'existe pas de bibliothèque toute faite pour cet usage particulier. Mais peut-être d'autres t'en indiqueront.

haifger

Comme 68tjs, autant je vois à peu près bien à quoi correspond le « mode burst » dans le cas du numérique, autant en analogique j'ai un peu de mal à saisir le concept.

Peut-être est-ce juste un problème de vocabulaire, ne serait-ce pas le mode « free running » du convertisseur analogique-numérique qui t'intéresse ? Autrement dit, le mode dans lequel l'ADC fait des conversions les unes à la suite des autres en permanence et te préviens via une interruption que tu peux aller lire un résultat dans le registre idoine ?

68tjs

Quote
free run

Voila le mot que je cherchais et que je ne retrouvais pas.

Touf2638

Oui c'est bien ça que je cherchais. Donc pas de librairies. Je vais donc chercher dans la datasheet maintenant que j'ai le vrai nom.
Sinon si quelqu'un a un exemple entre temps je suis preneur.
Merci

Artouste


Oui c'est bien ça que je cherchais. Donc pas de librairies. Je vais donc chercher dans la datasheet maintenant que j'ai le vrai nom.
Sinon si quelqu'un a un exemple entre temps je suis preneur.
Merci

bonjour
un exemple d'application
ici
http://oscilloscopeexpress.blogspot.fr/
et un peu plus lumineux ici
http://fftarduino.blogspot.fr/2011/02/color-organ-spectrum-analyzer-on.html

Touf2638

Lorsque je tente de configurer les registres du genre "ADCMR=", il ne reconnait pas le registre (sketch_jun26a:4: error: 'ADC_MR' was not declared in this scope). Faut-il un include special ?

Touf2638

Oups post trop rapide j'ai trouvé il faut mettre "ADC->ADC_MR =".
Par contre je sais pas pourquoi ...

Touf2638

En lisant la datasheet et en regardant les registres page 1345, j'en comprends qu'une fois en mode FREERUN la convertisseur échantillonne à sa fréquence maximale. Dès qu'il a fini une conversion, il recommence soit environ 1Mhz à ce que j'ai vu dans d'autres forums. Je ne vois pas de registre pour mettre un PRESCALE. Existe t-il ? C'est juste pour info car de toute façon même s'il tourne à 1Mhz je récupère les valeurs sur une interruption.

Artouste


En lisant la datasheet et en regardant les registres page 1345, j'en comprends qu'une fois en mode FREERUN la convertisseur échantillonne à sa fréquence maximale. Dès qu'il a fini une conversion, il recommence soit environ 1Mhz à ce que j'ai vu dans d'autres forums. Je ne vois pas de registre pour mettre un PRESCALE. Existe t-il ? C'est juste pour info car de toute façon même s'il tourne à 1Mhz je récupère les valeurs sur une interruption.

pour le prog oscillo c'est là
Code: [Select]
ADCSRA = 0x87; //default
  if ( fast == 1 ) ADCSRA = 0x87;   // turn on adc, freq  = 1/128,  125 kHz.
  if ( fast == 2 ) ADCSRA = 0x87;   // turn on adc, freq  = 1/128,  125 kHz.
  if ( fast == 3 ) ADCSRA = 0x86;   // turn on adc, freq  = 1/64,   250 kHz.
  if ( fast == 4 ) ADCSRA = 0x85;   // turn on adc, freq  = 1/32,   500 kHz.
  if ( fast == 5 ) ADCSRA = 0x84;   // turn on adc, freq  = 1/16 ,    1 MHz.
  if ( fast == 6 ) ADCSRA = 0x83;   // turn on adc, freq  = 1/8,      2 MHz.
  if ( fast == 7 ) ADCSRA = 0x82;   // turn on adc, freq  = 1/4,      4 MHz.
  //  if ( fast == 8 ) ADCSRA = 0x81;   // turn on adc, freq  = 1/2,      8 MHz.
 


mais lire ça sur les perfs selon F° ech
http://www.openmusiclabs.com/learning/digital/atmega-adc/

Touf2638

Oui j'ai vu mais ce registre ADCSRA ca doit être pas être sur une Due. Je le trouve pas en tout cas sur la datasheet.
Ou alors ce serait le PRESCALE du ADC_MR mais je pense pas qu'il soit pris en compte en FREERUN

haifger

Quote
En lisant la datasheet et en regardant les registres page 1345, j'en comprends qu'une fois en mode FREERUN la convertisseur échantillonne à sa fréquence maximale. Dès qu'il a fini une conversion, il recommence soit environ 1Mhz à ce que j'ai vu dans d'autres forums. Je ne vois pas de registre pour mettre un PRESCALE. Existe t-il ?.


Euh, en regardant à nouveau cette page 1345 tu verra qu'il y a dans le registre ADC_MR un champ qui porte le doux nom de PRESCAL... je te laisse deviner à quoi il sert :)

Note que la fiche technique préconise de régler la fréquence d'horloge de l'ADC entre 1MHz et 20MHz (page 1414).

Artouste


Oui j'ai vu mais ce registre ADCSRA ca doit être pas être sur une Due. Je le trouve pas en tout cas sur la datasheet.
Ou alors ce serait le PRESCALE du ADC_MR mais je pense pas qu'il soit pris en compte en FREERUN

désolé , je n'avais pas tilté sur le fait que ce soit un DUE

Go Up