about " analogRead" et les TIMERS

slt mes amis , je veux mesurer les valeur d’un signal analogique et la stoquer dans un vecteur bien sur, on peux dire un échantillonnage de signal . a condition de utilisé les TIMER et analogRead , parceque je veux exploité les resultats pour faire le FFT de se signal ( alors avec des hauts fréquances) !!
quelqu’un me aidé SVP ?!
et MERCI

La vitesse d’échantillonage du CAN (ADC en angliche) des micros avr est assez limitée.
Ce que tu veux faire est sans doute possible (à vérifier pour les sauts de fréquence) mais à condition que la fréquence maximale du signal à analyser ne soit pas trop élevée pour les capacités du micro-controleur.
La limite à ne pas dépasser est donnée par le théorème de Shannon : on doit échantillonner au minimum avec une fréquence double de la plus haute fréquence du signal à analyser.

Note : analogRead() est une fonction “arduino”, en ce sens elle permet une utilisation aisée du micro sans prise de tête mais ne peut pas l’utiliser au maximum de ses possibilité.
Donc si ca passe avec analogRead tant mieux sinon, sinon il faudra intervenir sur les registres pour augmenter la fréquence d’échantillonage et pour cela une seule source de documentation : la datasheet du micro.

Pour commencer, quant à trouver des bouts de code qui remplissent la fonction, internet est ton copain.

ça veut dire il faut de configurer les registres de timers dans le micro controleur ?!

nasr-eddine: ça veut dire il faut de configurer les registres de timers dans le micro controleur ?!

NON Ca veut dire qu'il faut réfléchir à ce que tu as réellement besoin.

Tu pars bille en tête sans avoir qualifié correctement ton signal cela s'appelle mettre la charrue avant les boeufs. Je t'ai expliqué un certain nombre de choses et présenté une partie des possibilités du convertisseur analogique digital. La balle est maintenant dans ton camp. Connaît tu la plus haute fréquence à transmettre ? Je ne parle pas simplement des fréquences discrètes mais de la bande passante nécessaire pour les sauts de phase. Parce que la valeur de l'amplitude et de la fréquence des sauts de phase aura des conséquence sur la valeur de la fréquence max.

La FFT tu veux la faire avec le micro-controleur où le micro te sert juste à échantillonner ? Et dans ce cas les résultats d'échantillonage tu les stocke comment ? Tu les récupère comment ?

Tu as un gros travail de préparation à faire sur le papier avant d'écrire une ligne de code.

mrc mon pote je sais qu'il y'a bcp de travail mais pour le moment mon problème est: je veux crée un signal ( carré ou bien sinusoïdal ) puis je veux lire son valeur dans un temps très petit ( de l ordre de microseconde) et puis refaire la même chose dans un temps régulier a l aide des TIMER je suis un débutant au programmation généralement j'ai une idée mais je peux pas la réaliser sous arduino est ce que vous pouvez m'aider ( des conseilles un programme , ou bien la configuration des TIMERS )

nasr-eddine: mon pote

Si a l'avenir tu veux une réponse c'est un terme dont il vaudra mieux que tu te dispenses.

nasr-eddine: je veux crée un signal ( carré ou bien sinusoïdal )

Sinusoïdal avec un microcontroleur c'est impossible sans DAC. Carré -> C'est possible avec un timer en mode CTC de 0,119 Hz à 8MHz.

nasr-eddine: puis je veux lire son valeur dans un temps très petit ( de l ordre de microseconde)

1 µs correspond à une fréquence de 1 MHz , c'est rapé pour l'ATMega à 16 MHz. Le mieux que tu puisse faire, (ce serait d'abord de lire la datasheet du micro-controleur avant de poser des questions) je reprend, le mieux qu'on puisse faire avec l'ATMega c'est 615k échantillons par seconde , mais en mode dégradé. Ce qui correspond d'après Shanon à une fréquence sinusoïdale de 315 kHz.

La dedans où est la FFT ? où sont les sauts de phase ? La boule de cristal ?

Je m'étais intéressé à la question, et en lisant bien le datasheet, j'ai découvert que le CAN peut être configuré en freelance, avec une fréquence d'échantillonnage fixe (avec ou sans timer, côté un peu magique de la chose), le seul boulot du µC serait donc de répondre à une interruption et de copier/coller chaque échantillon dans un tableau et fuck analogRead(). Vu comme ça, c'est super facile, reste à écrire un peu de code. Se reporter au chapitre correspondant du datasheet.

68tjs:
Ce qui correspond d’après Shanon à une fréquence sinusoïdale de 315 kHz.

Mouais, si tu échantillonnes un signal à chaque fois qu’il est à 0, tu n’auras pas grand chose. heureusement, ce cas de figure est relativement rare. De là à pondre une FFT sur un signal à F=1/2F(éch), ça va pas être facile…

J’ai dans l’idée de faire un mini-oscillo pour regarder le 220V et ses parasites. Côté précision, je sais déjà que je ne serai pas au top avec un nono… OK, je passe par un isolateur limité à 5KHz, mais il faut un minimum d’échantillons pour afficher un sinus…

Je n’ai pas dit qu’avec la limite de Shanon on peut afficher le signal reconstitué, simplement on peut le “travailler” mathématiquement.
Et d’autre part, je reviens sur un vieux sujet anglais/français FFT veux dire Fast Fourier Transform et ne veut pas dire transformée de Fourier.
Le “Fast” est hyper important, la Transformée de Fourier Rapide ne peut se faire que si on entre dans des cas particuliers (dont j’ai oublié le détail) qui sont plus exigeants que la simple fréquence de Shannon.

Quant à afficher un signal échantillonné c’est sûr que sans disposer de moyens annexes des oscillo professionnels comme une grosse mémoire qui permet avec les bons algorithmes d’afficher en fait 10 ou 100 traces superposées, chaque trace ne représentant que quelques points, il faut se limiter à des fréquences bien inférieures à la fréquence d’échantillonage. Mais ce qui compte pour éviter les repliements de spectre c’est la fréquence de Shanon.