Archives mensuelles : Mai 2013

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

Présentation du projet et gestion du clavier (part 1)

L’idée est d’ajouter un clavier, un moyen de communiquer avec l’extérieur (du MIDI, donc), d’améliorer les contrôles, et de rajouter deux-trois fonctionnalités, comme la distortion, le mute du VCO, la mod de l’attaque, le tout dans le budget le plus réduit possible. Pour ça, donc, on recycle ce qu’on peut .. Le clavier vient d’un jouet Hello Kitty :

Image

Image

Image

des touches en bloc …(avec une clé USB pour l’échelle)

IMG_20130401_003404 (Copier)

… et une matrice codée bizarrement (37 touches pour 13 i/o ?!)

Au début, je pensais gérer le clavier avec un réseau de résistances, comme ici (http://generaledefoutre.wordpress.com/2012/05/29/korg-monotron-mods-et-travaux-part-1/), mais souhaitant pouvoir transposer, etc, j’avais besoin de quelque chose de plus souple. La gestion sera numérique ! On va passer par des puces programmables ATmega 328, et, ô surprise, la même puce qu’on retrouve dans l’Arduino Uno .. Il me sera bien utile pour le développement. J’aurai en fait besoin de deux puces ATmega : la première se chargera de décoder le clavier et d’envoyer des signaux midi, la deuxième décodera ces signaux midi (ou ceux provenant de l’entrée MIDI pour contrôleur externe) et les convertiras en signaux CV/gate, pour attaquer le monotron, en prenant en compte la transposition demandée, en gérant l’affichage, etc ..

Image

Le clavier est codé comme ça :Image

Je pensais pouvoir m’en sortir juste en envoyer tour à tour 5V sur les entrées BP00 à BP04, en lisant à chaque fois l’état de BP20 à BP27. Mais de gros problèmes de parasites sont apparus, j’avais des 0 et des 1 en pagaille, rien de bien concluant. Et je suis tombé sur http://www.codetinkerhack.com/2012/11/how-to-turn-piano-toy-into-midi.html et sur http://electroniqueamateur.blogspot.fr/2012/05/decodage-dun-clavier-dorgue-par-un.html (que je n’avais pas trouvé lors de mes nombreuses recherches sur internet 😦 ), qui utilisent tous les deux un registre à décalage .. Je vais donc me pencher là dessus.