Se connecter
Se connecter

ou
Créer un compte

ou

Convertisseur Midi/CV

  • 45 réponses
  • 4 participants
  • 3 340 vues
  • 8 followers
Sujet de la discussion Convertisseur Midi/CV
est ce que certains auraient déja travailler sur un projet tel que celui-ci ?

faute d'avoir trouver quelque chose d'approchant (ou trop complexe) je me suis dis qu'il fallait que je me remonte les manches. Je veux vraiment le convertisseur le plus bete qui soit (dans un premiers temps du moins) qui convertit un message midi et une tension (cv).

L'idée étant d'utiliser un atmega et son périphérique UART. Il réceptionne les 3 bytes (channel, note, velocity) le dernier étant ignoré. Si le canal est bon, il décode le second byte et envois la valeur correspondante sur un DAC 8 bit (surement celui là).

parallèlement a ca, fait un circuit de gate qui doit rester a l'état haut tout le temps que la touche est maintenus.

déja est ce que 8bit serait suffisant ? ca fait une résolution de 19.5mV pour 1V/octave (j'ai pas poussé plus loins mais ca m'a l'air acceptable)

est ce que la méthode (interuption) vous semble logique ?

rumorofsmoke.github.io/

Afficher le sujet de la discussion
21
j'ai commencer a faire le début du code pour la premiere étape. Sans le UART pour l'instant (faut d'avoir recus les composants). Je voulais surtout tester l'opération binaire pour le cannal et le note_on et note_off. Le code (sans UART) fonctionne. Pour les intéressés :

https://github.com/ThebigDickhead/AVR_PROG/blob/master/midi_to_cv/midi_test.c

Faut que je regarde un peu plus le protocol midi (si il y a des bits "start/stop" ou de parité) ou seulement une donné 8 bits.

je dois ajouter une routine pour effacer le "noteOn/Off" lorsqu'il n'y a pas eu de commande depuis longtemps (histoire de pas piquer une crise pour rien).

Reste plus qu'a atteindre l'optocoupleur et la prise DIN.

rumorofsmoke.github.io/

22
premier test concluant ! OuOuuuuu (c'est le bruit que je fais quand ca marche)

je me suis pris la tete avec la prise midi et l'optocoupler mais ca fonctionne comme prévus. Le choix des cannaux et tout le tointoin. Chose agaçante par contre, l'indexation des cannaux commence a 00 dans la machine mais a 01 pour l'interface utilisateur.

edit : j'ai meme réussis a afficher la note sur le LCD. C'est en bonne route on dirait (jusqu'a ce que Murphy me balance des battons dans les roues :lol:)

rumorofsmoke.github.io/

[ Dernière édition du message le 16/10/2014 à 18:11:16 ]

23
bon ba je continue a poster tout seul. Je peux receptioner les trois bytes sans difficultés.

Le projet initiale était de se passer du byte de velocity et en fait il serait peut etre bon de le garder pour commander d'autres paramètres.

finalement ca se profile plutot pas mal, va rester ensuite l'écriture du DAC.

rumorofsmoke.github.io/

[ Dernière édition du message le 18/10/2014 à 15:01:11 ]

24
Le principal est que ça avance, peu importe le rythme.
Comme tu disposes d'une variable byte pour mémoriser l'octet de vélocité, autant le garder, on ne sait jamais.
Bon courage pour la suite, qui ne sera pas forcément plus difficile. Faut juste savoir quoi envoyer au DAC, et là ça dépend des références de DAC ;-)

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

25
ba en tout honneté ca me surprends moi meme que ca ai marché aussi facilement. Commencerais je a enfin capter quelques choses a tout ce bazar ? :-D

je pense que le plus compliqué va etre la valeur a sortir sur le DAC tout en conservant le 1V/octave avec une marge d'erreur la plus mimine. Et là effectivement va falloir une tension hyper propre et stable pour la référence du DAC.

Peut etre qu'un DAC integré serait l'idéale, va falloir que je regarde avec les contraintes de place.

Effectivement, j'y avais pas penser lors du design analogique du synthé mais la vélocitée pourrait etre un parametre interessant a conserver pour un éventuel ajout dans le futur.


rumorofsmoke.github.io/

26
Citation :
Peut etre qu'un DAC integré serait l'idéale

C'est la solution que je conseillerais... un DAC fait maison avec un réseau R/2R impose pour une précision équivalente à celle d'un DAC tout fait, des résistances de précisions qui coûtent au final plus cher. Un DAC externe qui se pilote en I2C, SPI ou même en parallèle, sera très bien pour ton usage. On en trouve en boîtier 8 broches (DIL ou CMS), facile à ajouter sans perdre trop de place.

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

27
j'avais l'idée d'utiliser ce réseau là : https://uk.farnell.com/bourns/4310r-r2r-103lf/resistor-ladder-n-w-10-10kohm-2/dp/2112797?Ntt=ladder+network

je voulais un circuit intégré plutot que de faire moi-meme avec un réséau pour les raisons que tu décris.

Mais effectivement je vais peut etre songer a mettre un DAC plus précis et avec une meilleur résolution, d'autan qu'on peut en trouver a deux cannaux (pour le CV note et la vélocité) comme le MCP4802 ou ceux que tu as mentionné plus haut il me semble.

cependant faut déja que je voille a transformer les notes midi en valeur binaire pour le DAC et là va falloir que je me casse un peu la tête.

rumorofsmoke.github.io/

28
Oui, quelque soit le DAC utilisé, tu devras adapter la valeur MIDI en une valeur qui correspond à la tension de sortie désirée. Mais tu verras, ce n'est pas très compliqué. Une formule simple, avec des opérateurs de base ;-)

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com

29
bon ba je l'avais pré-sentit j'ai un peu de mal a faire la conversion midi/cv. Si on fait un cv sur l'intégralité des notes, jusqu'a la note C127 (G9) il faut que C0 (12) soit 0V et G9(127) a 5V (a condition d'avoir un ampli x2 en sortie) mais alors la conversion a proprement parler icon_facepalm.gif

Dans un premier temps je vais tacher de le faire sur 8bit en attendant les Dac 12bits.

si quelqu'un a une idée.

rumorofsmoke.github.io/

30
Simple division et multiplication :D:

Pitch = 0 pour C0, 1 pour C0#, 2 pour D0, etc.
- pour DAC 12 bits, diviser Pitch par 128 et multiplier par 4095
- pour DAC 8 bits, diviser Pitch par 128 et multiplier par 255

function DAC_PitchToWord(Pitch: byte): word;
var
  iDacValue: word;
begin
  iDacValue := word(Pitch / 128 * 255);   // 8 bits
  iDacValue := word(Pitch / 128 * 4095);  // 12 bits
  result := iDacValue;
end;

Formateur en techniques sonores ; électronicien ; auteur @ sonelec-musique.com