[Autre] Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)
Répondre à la discussion
Affichage des résultats 1 à 28 sur 28

Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)



  1. #1
    invite7070fa42

    Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)


    ------

    Bonjour à tous,

    je m'amuse depuis peu avec l'Arduino et souhaiterai finaliser mon premier projet: j'ai programmé un petit synthé qui génère l'équivalent de 24 notes. C'est un clavier de 2 octaves qui lis des formes d'ondes préprogrammées (triangles, sinus, dent de scie, etc...), c'est assez sympa d'autant plus que j'ai placé des effets audio en sortie de l'instrument.
    Contrairement aux outils "musicaux" fournis avec l'Arduino j'ai réussi à faire en sorte que les écarts entre les notes soient absolument parfaits au centième de demi-ton près, en musique on ne peut pas faire mieux.

    Seulement il me manque un réglage primordial: la transposition fine. Celle-ci permet de transposer l'ensemble des notes afin d'accorder le synthétiseur avec un autre instrument, le rapport entre chaque note est préservé.
    Pour cela je ne peux pas compter sur une parade logicielle, le microcontrôleur, un ATMEGA 168 est déjà poussé dans ses retranchements et donne le meilleur de lui-même.

    Afin de rendre possible cette commande de transposition j'imagine donc faire varier la fréquence de l'horloge cadençant le micro-contrôleur :
    A l'aide d'un potentiomètre on fait varier la fréquence de l'horloge de 94% à 106% de la fréquence originale (16MHz).
    (6% représente l'écart entre deux notes consécutives d'un clavier, c'est la fenêtre minimum nécessaire à l'accordage)

    Plutôt qu'utiliser un quartz pour cadencer l'uC j'imagine donc utiliser un autre type d'oscillateur, un oscillateur à fréquence variable.
    Cependant je n'ai pas vraiment d'idées sur la topologie de l'oscillateur à mettre en oeuvre, je n'ai jamais travaillé à des fréquences aussi élevées.

    Mes questions sont donc les suivantes:

    1 - la démarche vous semble t'elle réaliste?
    2 - quelle topographie utiliser pour un oscillateur variables à des fréquences élevées(16MhZ+/-6%) ?
    3 - pour les connaisseurs d'Arduino: quelle commande employée pour changer le type d'horloge de l'Arduino? Peut-on vraiment effectuer ça depuis l'IDE?



    **Pour info, je souhaite faire ma propre carte arduino en suivant le tutoriel suivant, c'est ultra simple à réaliser et ça facilitera la mise en place de la nouvelle horloge:
    http://www.instructables.com/id/Buil...uino/?ALLSTEPS

    Merci à tous de vos réponses.

    -----

  2. #2
    jiherve

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Bonsoir,
    1: oui
    2: là est le problème
    Pour générer l'horloge il faudra passer par un montage classique de synthétiseur de fréquence donc utilisant une PLL et des diviseurs qui vont bien.
    Il existe plein de doc sur le sujet, attention c'est plus délicat que cela n'y parait, mais il existe des circuits tous faits:http://www.onsemi.com/pub_link/Colla...NBC12429-D.PDF.
    JR
    l'électronique c'est pas du vaudou!

  3. #3
    invitee05a3fcc

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    On doit pouvoir utiliser une horloge externe à la place du quartz.
    Et on utilise un VCO . par exemple : http://www.farnell.com/datasheets/1740905.pdf

  4. #4
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Salut à vous deux, d'après ce que vous me dites il me faudrait peut-être regarder vers ça:

    http://www.mouser.fr/ProductDetail/T...KhwuulpgnYg%3d

    C'est le seul que j'ai trouvé en "traversant" et compatible avec une fréquence de 16MHz. Par contre ils ne sont pas très bavard sur le circuit à mettre en place autour de l'IC.

    Ca vous semble bien ciblé?

  5. A voir en vidéo sur Futura
  6. #5
    invitee05a3fcc

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Oui, c'est un VCO du même style que celui que je te propose en #3
    Le synthé de fréquence que jiherve te propose en #2, c'est un VCO avec verrouillage de phase sur un quartz (donc stabilité du quartz)
    Par contre ils ne sont pas très bavard sur le circuit à mettre en place autour de l'IC.
    Normal ...
    Il faut toujours regarder la datasheet fabricant : http://www.mouser.com/ds/2/405/sn74ls624-405812.pdf

  7. #6
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    OK, super.

    Citation Envoyé par DAUDET78 Voir le message
    Oui, c'est un VCO du même style que celui que je te propose en #3
    Le synthé de fréquence que jiherve te propose en #2, c'est un VCO avec verrouillage de phase sur un quartz (donc stabilité du quartz)
    Il y aurait alors un avantage à utiliser le#2 pour la stabilité de l'instrument? la connexion se fait sur les mêmes pins que pour un quartz classique ou devrais-je programmer un changement de pin?

    Citation Envoyé par DAUDET78 Voir le message
    Normal ...
    Il faut toujours regarder la datasheet fabricant : http://www.mouser.com/ds/2/405/sn74ls624-405812.pdf
    Je n'avais pas manqué le datasheet mais justement je ne le trouve pas très causant, il n'y a aucun exemple de circuit...

  8. #7
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Bon Ok sur la page 9...je n'y comprends rien à leur schéma..

  9. #8
    invitee05a3fcc

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Teknic Voir le message
    Il y aurait alors un avantage à utiliser le#2 pour la stabilité de l'instrument?
    Oui
    la connexion se fait sur les mêmes pins que pour un quartz classique ou devrais-je programmer un changement de pin?
    J'en sais rien, faut regarder la datasheet de ton µC
    mais justement je ne le trouve pas très causant, il n'y a aucun exemple de circuit...
    Page 9 tu as un exemple d'asservissement d'un VCO sur un autre (ce qui n'a pas trop d’intérêt). Par contre, tu as l'utilisation du 74LS624 avec :
    - L'entrée Freq Contrl
    - L'entrée Range
    Et page 8, l'influence de ces deux entrées en fonction du condensateur sur la fréquence de sortie

  10. #9
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Bonsoir,

    Pour utiliser une horloge externe tu va devoir modifier les fusibles (je te joins un extrait de la datasheet). C'est une opération assez sensible qui, si elle est mal réalisée, peut rendre le microcontrôleur inutilisable. Je n'ai jamais modifié les fusibles, il me semble que cela peut se faire grâce au logiciel avrdude en ligne de commande. Il faut quand même un bon niveau de programmation microcontrôleur pour réussir.

    Quelques liens:
    http://notepad.xavierdetourbet.com/?p=377
    http://forum.arduino.cc/index.php?topic=64605.0
    http://heliosoph.mit-links.info/ardu...es-atmega328p/
    Nom : fusible.jpg
Affichages : 374
Taille : 122,6 Ko

  11. #10
    bobflux

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Tu devrais pouvoir le faire en soft...

    Comment génères-tu ta note?

    Perso j'utiliserais un DDS en soft. Mettons une interruption à 48 khz avec un accumulateur de phase sur 16 ou 24 bits, et une table de sinus. Pour modifier la hauteur de la note il suffit de changer l'incrément de phase...

  12. #11
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Ashura, j'étais en effet tombé sur certains de ces liens mais cela me paraissait nébuleux, d'autant plus que je ne comprenais pas cette histoire de "fusibles"... des fusibles sur la carte?? où ça??

    En effet la démarche semble assez complexe et nécessite bien un autre IDE que l'arduino.

  13. #12
    invitee05a3fcc

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Teknic Voir le message
    des fusibles sur la carte?? où ça??
    C'est des switchs internes au µC et positionnables lors de la programmation du µC .

  14. #13
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Ce ne sont pas des fusibles au sens stricte du terme. Je te joins un article qui explique ce que sont les fusibles d'un µC.
    Pour la programmation il me semble que tu peux t'en tirer avec l'IDE arduino. Il me semble qu'on peut récupérer un fichier après la compilation et utiliser avdude pour programmer le µC avec ledit fichier.
    https://skyduino.wordpress.com/2011/...e-de-commande/

    Ce serait sans doute plus simple de réaliser cette fonction de manière soft.
    Images attachées Images attachées

  15. #14
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par bobfuck Voir le message
    Tu devrais pouvoir le faire en soft...

    Comment génères-tu ta note?

    Perso j'utiliserais un DDS en soft. Mettons une interruption à 48 khz avec un accumulateur de phase sur 16 ou 24 bits, et une table de sinus. Pour modifier la hauteur de la note il suffit de changer l'incrément de phase...
    Je suis sur une Uno (16Mhz).

    J'utilise l'ISR pour lire les formes d'ondes. Cependant si on veut obtenir une justesse parfaite des notes (et non pas à 1/3 de demi-ton ) alors il faut inclure, lors de l'incrémentation, des opérations décimales qui ne sont pas bien digérées et ont pour effet de ralentir la vitesse de calcul ... d'où une réduction de la bande passante.

    J'ai donc décidé de ne pas trop chargé cette partie du programme en lisant des formes d'onde qui sont déjà accordées.

  16. #15
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Ashura33 Voir le message
    Ce ne sont pas des fusibles au sens stricte du terme. Je te joins un article qui explique ce que sont les fusibles d'un µC.
    Pour la programmation il me semble que tu peux t'en tirer avec l'IDE arduino. Il me semble qu'on peut récupérer un fichier après la compilation et utiliser avdude pour programmer le µC avec ledit fichier.
    https://skyduino.wordpress.com/2011/...e-de-commande/
    Oui, les fusibles ça fait froid dans le dos...


    Tu m'as l'air bien documenté sur le sujet.

  17. #16
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Je me suis documenté sur le sujet pour passer de la programmation Arduino à une programmation plus professionnelle (j'y travaille encore ). Le but étant d'utiliser les cartes Arduino et un IDE comme AtmelStudio.
    Tu as un Arduino Uno avec un Atmega168? Je croyais qu'ils n'étaient plus courant de nos jours.
    Quand tu dis que tu lis les formes d'ondes, qu'es que tu fais exactement? Tu analyse un signal en entrée? Tu viens lire la position de switchs?
    Comment génères-tu ton signal de sortie? L'arduino ne possède pas de DAC et ne peut générer que des PWM.

  18. #17
    antek

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Teknic Voir le message
    Oui, les fusibles ça fait froid dans le dos...
    En général, pour un µC, on appelle ça des bit de configuration.

  19. #18
    jiherve

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Bonjour
    Changer la conf d'horloge d'un Atmega est élémentaire à condition de passer par un programmateur ISP et pas par l'UART!
    Le seul bit à ne JAMAIS toucher est celui gérant le Reset sauf à vouloir vraiment s'em..er un max!
    La solution DDS préconisée par Bobfuck est sans doute la plus raisonnable.
    JR
    l'électronique c'est pas du vaudou!

  20. #19
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Re,

    je me suis trompé! il s'agit bien d'un 328!!
    Ashura, Je génère en amont des formes d'ondes grâce à un logiciel que j'ai écris en basic, les mathématiques musicales est un domaine où je suis à l'aise, les formes d'ondes créés sont directement insérées dans le programme (>progmem).

    La sortie est en effet du PWM filtré comme il se doit par un filtre passif passe-bas.

    Ah c'est aussi des connaissances que j'aimerai acquérir... je n'ai pas réussi à faire fonctionner l'Uno depuis l'Atmel studio pour le moment.


    Sinon à force de réfléchir à ça j'ai fini par imaginer une dernière solution logicielle , comme quoi discuter ici permet aussi d'exciter un peu les neurones...cette solution n'est pas parfaite( j'obtiens à présent des résolution de transposition d'à peu près 4centièmes de demi-tons) mais le résultat est respectable. Pour cela je joue directement avec les retards d'interruptions, la méthode est certes un peu grossière.


    Je pourrais donc éviter de toucher à l'horloge mais ça m'a permis d'apprendre des choses en posant cette question et lisant vos réponses.

  21. #20
    invite3c199cf9

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par jiherve Voir le message
    Bonjour
    Changer la conf d'horloge d'un Atmega est élémentaire à condition de passer par un programmateur ISP et pas par l'UART!
    Le seul bit à ne JAMAIS toucher est celui gérant le Reset sauf à vouloir vraiment s'em..er un max!
    JR
    Effectivement, la programmation ISP permet de modifier les « fuses »très facilement, généralement en cochant/décochant simplement une case du logiciel de programmation.
    Par ailleurs, les ATXmega n’ont pas le problème de verrouillage des ATmega si l’on modifie le bit de reset.

  22. #21
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Teknic Voir le message
    Ashura, Je génère en amont des formes d'ondes grâce à un logiciel que j'ai écris en basic, les mathématiques musicales est un domaine où je suis à l'aise, les formes d'ondes créés sont directement insérées dans le programme (>progmem).

    La sortie est en effet du PWM filtré comme il se doit par un filtre passif passe-bas.
    Si je comprends bien ton logiciel en basic calcule des valeurs que tu intègre dans ton programme sous forme de tableaux qui te permettent de modifier le rapport cyclique du PWM?
    Quelle quantité de données représentent ces valeurs?

    Citation Envoyé par lpt1com2 Voir le message
    Effectivement, la programmation ISP permet de modifier les « fuses »très facilement, généralement en cochant/décochant simplement une case du logiciel de programmation.
    Modifier les fusibles c'est une chose, rattraper une connerie ça en est une autre pas forcément accessible aux débutants.
    Quand tu dis logiciel de programmation tu parles de AtmelStudio? Il me semble avoir lu quelque part qu'on ne peut programmer en ISP depuis AtmelStudio qu'avec certains programmateurs et que les programmateurs de type USBasp ne le permettent pas.

  23. #22
    invite3c199cf9

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Ashura33 Voir le message
    Modifier les fusibles c'est une chose, rattraper une connerie ça en est une autre pas forcément accessible aux débutants.
    Quand tu dis logiciel de programmation tu parles de AtmelStudio? Il me semble avoir lu quelque part qu'on ne peut programmer en ISP depuis AtmelStudio qu'avec certains programmateurs et que les programmateurs de type USBasp ne le permettent pas.
    J’ai peut-être posté un peu vite parce que je ne connais pas Arduino et je ne sais pas s’il est équipé d’un connecteur pour la programmation ISP.

    Sinon la configuration des « fuses » est triviale :

    - Avec AVRStudio, il faut effectivement un programmateur reconnu. Par exemple avec un MKII, et cliquer sur Fuses à gauche dans la fenêtre de programmation.
    - Avec un USBASP et le logiciel AVRDUDESS, cliquer sur le lien « Fuse settings », ce qui ouvre un lien sur le web, et cocher les cases qui vont bien.

    Il doit aussi être possible de programmer les fuses par USB/RS232 avec le logiciel Flip d’Atmel (http://www.atmel.com/tools/FLIP.aspx), mais je ne l’ai jamais utilisé pour ça.
    Images attachées Images attachées

  24. #23
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Ashura33 Voir le message
    Si je comprends bien ton logiciel en basic calcule des valeurs que tu intègre dans ton programme sous forme de tableaux qui te permettent de modifier le rapport cyclique du PWM?
    Quelle quantité de données représentent ces valeurs?
    Oui, évidemment c'est du 8 bits. Pour l'instant la taille n'est pas arrêtée je ne me suis pas encore décidé sur les types de forme d'ondes que je vais retenir, la plage d'octave exacte... on peut aussi synthétiser des éléments rythmiques assez simplement. Je n'utilise pas de carte SD mais c'est assez répandu dans les applications de sampleur avec l'Arduino.

    A une époque ou la programmation de microcontrôleur me faisait peur j'avais programmé ça avec un éditeur graphique:
    https://www.youtube.com/watch?v=CilCI2kSXnA

    Même sans toucher aux ISP, un programmateur est nécessaire pour utiliser l'Arduino avec Atmel Studio? Ca mériterait un sujet à part entière.

  25. #24
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par lpt1com2 Voir le message
    J’ai peut-être posté un peu vite parce que je ne connais pas Arduino et je ne sais pas s’il est équipé d’un connecteur pour la programmation ISP.

    Sinon la configuration des « fuses » est triviale :

    - Avec AVRStudio, il faut effectivement un programmateur reconnu. Par exemple avec un MKII, et cliquer sur Fuses à gauche dans la fenêtre de programmation.
    - Avec un USBASP et le logiciel AVRDUDESS, cliquer sur le lien « Fuse settings », ce qui ouvre un lien sur le web, et cocher les cases qui vont bien.

    Il doit aussi être possible de programmer les fuses par USB/RS232 avec le logiciel Flip d’Atmel (http://www.atmel.com/tools/FLIP.aspx), mais je ne l’ai jamais utilisé pour ça.
    La plupart des arduino sont équipés d'un connecteur ISP. Le principal inconvénient vient du fais que la carte intègre un quartz CMS donc si on se plante en modifiant les fusibles et qu'on change la fréquence de l'horloge ça peut être problématique. Quand on a payé sa carte arduino 20 balles, ça peut refroidir
    J'avais lu quelque part qu'on peu modifier un USBasp en programmateur MKII du pauvre, faudra que je retrouve ça.
    Merci pour le lien vers le Flip d'Atmel, je connaissait pas faudra que je regarde ça.

  26. #25
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Teknic Voir le message
    Oui, évidemment c'est du 8 bits. Pour l'instant la taille n'est pas arrêtée je ne me suis pas encore décidé sur les types de forme d'ondes que je vais retenir, la plage d'octave exacte... on peut aussi synthétiser des éléments rythmiques assez simplement. Je n'utilise pas de carte SD mais c'est assez répandu dans les applications de sampleur avec l'Arduino.

    A une époque ou la programmation de microcontrôleur me faisait peur j'avais programmé ça avec un éditeur graphique:
    https://www.youtube.com/watch?v=CilCI2kSXnA

    Même sans toucher aux ISP, un programmateur est nécessaire pour utiliser l'Arduino avec Atmel Studio? Ca mériterait un sujet à part entière.
    Pour être honnête je comprends pas grand chose aux aspects musicaux. Si j'ai bien compris, ton problème était de faire des calculs en appliquant un coefficient issue d'un potentiomètre aux valeurs qui définissent les formes d'onde. Dans ce cas est-ce qu'il n'est pas possible de stocker toutes les valeurs possible en mémoire au lieu de faire des calculs à chaque fois? Je me rend pas compte du volume de données que ça représente donc c'est peut-être irréaliste.

    Arduino est de plus en plus intégré dans AtmelStudio, peut-être qu'avec la dernière version il est directement possible de programmer un arduino en USB, mais je n'en suis pas sûr. Si c'est impossible il faut un programmateur compatible.

  27. #26
    invite7070fa42

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Ashura33 Voir le message
    Pour être honnête je comprends pas grand chose aux aspects musicaux. Si j'ai bien compris, ton problème était de faire des calculs en appliquant un coefficient issue d'un potentiomètre aux valeurs qui définissent les formes d'onde. Dans ce cas est-ce qu'il n'est pas possible de stocker toutes les valeurs possible en mémoire au lieu de faire des calculs à chaque fois? Je me rend pas compte du volume de données que ça représente donc c'est peut-être irréaliste.
    Oui, dans mon cas j'insère 24 formes d'onde, chacune représentant une note du clavier, l'écart entre chaque note est d'un demi-ton. On commence à obtenir des résultats corrects avec 24K de données pour 24 notes.
    Si on veut pouvoir accorder correctement l'instrument il faut théoriquement pouvoir transposer au centième de demi-ton, dans ce cas il me faudrait alors intégrer 2400 formes d'ondes, ce qui n'est pas réaliste.

  28. #27
    invite69a0f08e

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Citation Envoyé par Teknic Voir le message
    Oui, dans mon cas j'insère 24 formes d'onde, chacune représentant une note du clavier, l'écart entre chaque note est d'un demi-ton. On commence à obtenir des résultats corrects avec 24K de données pour 24 notes.
    Si on veut pouvoir accorder correctement l'instrument il faut théoriquement pouvoir transposer au centième de demi-ton, dans ce cas il me faudrait alors intégrer 2400 formes d'ondes, ce qui n'est pas réaliste.
    Ah oui, 24K ça commence déjà à être serré sur un 328. Tu as pensé à prendre une carte plus puissante pour que les calculs ne soient plus un problème?

  29. #28
    bobflux

    Re : Faire varier la fréquence d'horloge d'un micro-contôleur. (Arduino)

    Un seul sample suffit, à condition de rééchantillonner comme je l'expliquais dans mon post plus haut. L'Atmega a largement assez de patate pour ça. Bien sûr un ARM en aurait plus, mais je suis sûr que l'atmega peut le faire, à priori c'est juste 2 MUL8 et deux ADD8, plus quelques autres ADD par cycle, donc no soussai.

    Sur un clavier MIDI on peut avoir un sample différent par note, mais c'est parce que toutes les touches d'un piano ne jouent pas exactement le même son décalé en fréquence. Ce n'est pas pour l'accord.

Discussions similaires

  1. Faire varier la fréquence d'une tension sinusoïdale
    Par invite4d50b61a dans le forum Électronique
    Réponses: 21
    Dernier message: 11/04/2013, 11h19
  2. faire varier la frequence
    Par invitedb8fb805 dans le forum Électronique
    Réponses: 10
    Dernier message: 05/01/2009, 11h52
  3. faire varier la frequence du courant
    Par adrienlucca dans le forum Électronique
    Réponses: 6
    Dernier message: 26/11/2008, 08h32
  4. faire varier la fréquence d'un buzzer
    Par invite6daca65d dans le forum Électronique
    Réponses: 9
    Dernier message: 02/06/2008, 18h22
  5. URGENT: faire varier une fréquence???
    Par invite24146db4 dans le forum Électronique
    Réponses: 16
    Dernier message: 06/08/2003, 22h54
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...