Faire sortir du SON – part 1 le filtre

J’avais deux solutions pour transformer l’impulsion en PWM sortant de l’ATMega en signal continu 0-5V pour contrôler le monotron :

N’ayant pour l’instant pas sous la main de DAC (qui va arriver dans la deuxième commande de matériel), j’ai déjà testé avec un filtre RC. Après avoir enlevé la résistance R11 (Beatnic explique tout ça ici), j’ai d’abord fait un petit montage à l’arrache sur ma breadboard histoire de voir ce que ça donnait :

Image

Le rendu était mauvais : j’avais une étendue de deux tons, environs. J’ai du adapter quelques résistances. J’ai également fImageait des soudures un peu plus propre derrières le monotron,celles que j’avais utilisés jusque là restaient des test que j’avais fais il y quelques mois. A gauche sur la breadboard, l’optocoupleur et la diode pour le MIDI (j’avais fais le montage mais ne m’en suis pas servi pour l’instant)

J’ai donc ajouté des résistances en sorties (2*10M, de mémoire), et ai programmé l’Arduino pour que sa sortie PWM prenne toutes les valeurs possibles. J’ai également programmé un genre de voltmètre, qui me renvoyait pour chaque valeur la tension de sortie du filtre. Le résultat en vidéo :

(sur l’écran de l’ordinateur, la valeur de gauche est la valeur du rapport PWM, et celui de droite la tension de sortie du filtre (en unité, entre 0 et 1023) (infos)

Néanmoins, ça ne me convenait pas. L’étendue du clavier n’est pas suffisante, à peine quelques octaves. La solution sera donc le DAC, qui sera plus souple et plus précis.

Le code de test, au cas où (attention, c’est brouillon) :

byte tensout=0;
int analogIn = 5;
int tensin=0;
int analogOut=5;
int c=1;
float valin=0;
int i=0;
const int gatePin=7;

/* Permet de faire un tableau, via SERIAL, de la correspondance entre le rapport du PWM et la tension en sortie. tension exprimée en unité, à multiplier par 0.0049 */

void setup() 
{
 Serial.begin(9600);
 Serial.println("Pret");
 int c=1;
 analogReference(DEFAULT);
 pinMode(gatePin, OUTPUT);
}

void tens() 
{
 analogWrite(analogOut,0);
 delay(500);
 Serial.print(i, DEC);
 Serial.print(" ");
 valin = analogRead(analogIn);
 Serial.println(valin,0);
 int i=1;
 while(i<=255)
 {
 analogWrite(analogOut, i);
 digitalWrite(gatePin, HIGH);
 Serial.print(i, DEC);
 Serial.print(" ");
 delay(500);
 digitalWrite(gatePin, LOW); //stop sending gate signal
 delay(500);
 valin = analogRead(analogIn);
 Serial.println(valin,0); 
 i++;

}

}

void loop(){
if (c==1){
 tens();
 c++;
 Serial.print("END");
}
}

IMG_20130501_155156 (Copier)Deutsches Qualität

Laisser un commentaire