Archives mensuelles : juin 2013

Faire sortir du SON – part 2 le DAC (Convertisseur MIDI → CV/Gate Arduino)

Après les mauvais résultats du filtre RC, je me suis penché sur le DAC, qui a donné des résultats bien plus probants. Avec une liaison SPI, quelque calculs sur la valeurs à envoyer au DAC et un simple SPI.transfer(), on arrive à faire sortir une tension. Par exemple, ce code passe en revue toutes les valeurs possibles que le DAC peut accepter :

Plus d’infos sur le DAC et le SPI ici : http://tronixstuff.wordpress.com/2011/06/15/tutorial-arduino-and-the-spi-bus-part-ii/ (en anglais)

#include "SPI.h"

word outputValue = 0; // word = 16 bits

byte data = 0;

int a;

void setup()

{

//set pin(s) to input and output

pinMode(10, OUTPUT); //verrou du DAC

SPI.begin(); //démarrage de la liaison SPI

SPI.setBitOrder(MSBFIRST);

}

void dac(int a)

{

outputValue = a;

digitalWrite(10, LOW);

data = highByte(outputValue); //on enverra les données en 2 octets : selection du premier octet

data = 0b00001111 & data;

data = 0b00010000 | data; //on ajoute les paramètres du DAC à envoyer

SPI.transfer(data);

data = lowByte(outputValue);

SPI.transfer(data); //deuxième octet

digitalWrite(10, HIGH);

delay(100);

}

void loop()

{

for(int a=0; a<=3800; a++)

{

dac(a);

}

}

 

Pour accorder le DAC, j’ai fais le choix d’utiliser un tableau de valeurs, afin 1) d’éviter des calculs à l’Arduino et 2) une gestion plus facile de l’accordage (à mon sens). Pour cela, j’ai utilisé un bouton poussoir, un accordeur, et un peu de code. Chaque pression sur le bouton incrémentait ma variable a, et avec l’accordeur, je notais les valeurs où la note était juste. J’ai fait ça pour une dizaine de note, et en ai déduit les autres.

La partie MIDI est simple : un callback pour simplement le NoteOn et NoteOff, et une variable qui évite de couper la note en cours si on reçoit un message NoteOff d’une note différente. Plus d’info sur la librairie MIDI que j’ai utilisé ici : http://playground.arduino.cc/Main/MIDILibrary (en anglais)

Pour le montage de l’Arduino sur la breadboard, cette page http://arduino.cc/en/Main/Standalone (en anglais) vous ravira, et pour l’envoi des programmes sur l’ATMega dans le circuit, j’ai utilisé https://www.sparkfun.com/tutorials/200 (en anglais)

Le code « final » est là. Ce code permet, à l’heure actuelle :

  • L’accord note par note

  • la conversion de signaux MIDI de type NoteOn et NoteOff en signaux CV/Gate

 

#include <MIDI.h>

#include <SPI.h>

byte
Lire la suite