Proto de pédale numérique lo-fi : Le Phaseur

jzu
  • jzu
  • Custom Méga utilisateur
  • MP
  • #1
  • Publié par
    jzu
    le 03 Apr 09, 16:07
Il y a quelque temps déjà qu'est sorti l'Arduino, une plaque basée sur un micro-contrôleur Atmel ATmega168 avec, entre autres, une prise USB permettant l'upload des programmes et quelques entrées-sorties numériques et analogiques. On arrive à le trouver en France dans quelques boutiques mais j'ai commandé le mien aux USA pour moins cher, 30 euros fdpin. On écrit un programme en C, on le cross-compile sur un PC sous Windows ou Linux (mon cas) ou encore sur un Mac, on l'upoade sur le contrôleur et on teste, ça ne marche pas, on recommence....

Je m'y suis vraiment intéressé à cause d'un article sur Instructables où l'auteur en faisait une pédale pour guitare. Les effets étaient très moyens, il y avait deux ou trois erreurs et le truc n'était vraiment pas utilisable tel quel, mais je sentais qu'on pouvait en faire quelque chose. Ça tombait bien parce que comme on a pu le lire ici, j'ai utilisé longtemps un Alesis airFX pour un seul effet, une sorte de modulateur dont le flange variait avec la position de mon pied au lieu d'être commandé par un oscillateur. Je l'ai laissé tomber plus ou moins pour des raisons de place.

J'ai donc commencé à expérimenter, ce même avant de commander l'Arduino, en testant mes idées de flanging variable avec Audacity où je décalais deux pistes du même signal de quelques millisecondes. Une fois sûr que je pouvais obtenir une bonne approximation de l'effet d'origine avec une pédale genre wah, j'ai commandé et reçu le petit circuit, connecté d'abord en entrée par un préampli micro et quelques composants pour polariser le signal, et en sortie par deux résistances et un condo. Le code était déjà presque écrit avec gestion d'un buffer circulaire pour stocker temporairement les samples à réutiliser.


Il faut savoir qu'on dispose là d'un pauvre processeur à 16 MHz avec quelques kilo-octets pour le programme et 1 kilo-octet pour les données, y compris la stack. Oui, 1024 octets. Ça change des environnements à fenêtres habituels, moi j'aime bien. Et les entrées analogiques sont 10 bits, lo-fi garanti. J'aime bien aussi.


Les premiers tests étaient évidemment pathétiques et puis j'ai commencé à avoir du son. Il a alors fallu remplacer le préampli micro pas adapté du tout par quelque chose de plus spécifique aux besoins, c'est-à-dire arriver à un signal polarisé oscillant entre 0 et +5V. J'ai commencé par y mettre un transistor mais un signe indien me poursuit : je n'ai jamais réussi à bien faire fonctionner un circuit à transistors DIY. C'est comme ça.


Avec un ampli op, aucun problème en revanche, mais je voulais l'alimenter depuis l'Arduino (il y a une sortie 5V). Un 714 ou compatible ne convenait donc pas et c'est pour ça que j'ai pris un LT1006 qu'on peut alimenter en mono-tension sous 5V. La sortie est restée la même, 2 registres de 8 bits qui commandent deux sorties PWM (pulse width modulation), mélangées par deux groupes de résistances dont la valeur de l'un est 256 fois supérieure à l'autre.


Le schéma ci-dessus comporte des ajouts éventuels, surtout des filtres passe-bas de 3dB/octave à 8 kHz en entrée et en sortie et peut-être un trimpot pour ajuster le niveau de sortie. Les valeurs des condos sont approximatives ; il faut surtout faire gaffe à ne pas filtrer trop de fréquences utiles.

Une vieille Wah/Fuzz italienne traînait dans un coin, hop, on connecte le potard sur une autre entrée analogique et roule. On voit au fond la pédale, à droite l'Arduino, au milieu l'électronique d'interfaçage et à gauche un simple boîtier de raccordement. L'oscilloscope a surtout été utile pour régler le gain à la limite de la saturation. Le réglage de l'offset du point de repos (2,5V ) s'est fait au multimètre par association de résistances, à remplacer par un trimpot.


Le résultat n'était absolument pas ce que je cherchais (http://jzu.free.fr/Phaseur/Phaseur2.mp3) mais j'aime bien. Craspec, voire hideux, mais ça sonnait. En fait, je m'étais planté dans la référence de voltage à utiliser, l'initialisation des registres, bref, un peu tout...

Ensuite, il y a eu un effet ressemblant à un sample & hold sur un VCF de synthé qui n'avait rien à voir non plus avec ce que je voulais obtenir. Je viens en fait de comprendre et de corriger : il ne faut pas acquérir le signal trop vite et donc ne pas pousser le prescaler de la fonction de lecture analogique sous peine de subir des interférences entre les deux entrées. Je pense que le potard de 100 Kohms sur la wah a en fait une valeur un peu élevée et que le condensateur du multiplexeur d'entrées sur le micro-contrôleur a du mal à se décharger assez vite.

http://jzu.free.fr/Phaseur/Phaseur6.mp3 est le résultat (temporairement) final. Disons-le, dans l'absolu, c'est merdique. Il y a surtout un souffle énorme sûrement dû à l'absence de blindage. La première partie est jouée en clean et la deuxième avec un peu de graou en amont pour qu'on entende bien le déphasage. C'est en fait moins rigolo que les samples précédents mais ça se rapproche de ce que je veux faire. Et je pourrai toujours changer d'effets avec des switchs branchés sur des entrées digitales de l'Arduino puisque seules quelques instructions du programme changent, à incorporer donc le cas échéant dans des blocs conditionnels basés sur l'état de ces entrées.

Le code actuel se trouve ici, tout tient sur 2 pages de listing et si certains se sentent l'âme aventureuse, ils peuvent s'en inspirer comme je me suis inspiré des URL mises en référence dans le source. J'ai mis le code sous une licence très permissive, la Artistic Licence 2.0, qui permet d'en faire un peu ce qu'on veut.

Étape suivante, ce qui est planté sur la plaque blanche doit être soudé sur une plaque de prototypage. Il sera alors possible d'intégrer le tout dans cette wah-fuzz ce qui devrait faire baisser le bruit de fond actuel... Une de ces atroces Daphon qu'on trouve pour 17 euros sur eBay pourrait aussi faire l'affaire, probablement avec un blindage supplémentaire en feuille d'alu.
Franky47
Héhé, pas con, j'avais vu un type qui avait fait plein d'effets LoFi comme ça, un delay, une disto ect..

C'est une sacrée bestiole l'Arduino... Mais c'est encore plus puissant quand un utilise des plus grosses pupuces, genre ça:
http://sanguino.cc/


Matos DIY: Forty Seven Effects - Synthé DIY: Le Slidophone
Think different. - 42
jzu
  • jzu
  • Custom Méga utilisateur
  • MP
  • #3
  • Publié par
    jzu
    le 11 Apr 09, 23:54
Il y a 4 Ko de RAM pour les données sur cet ATmega644P, trop facile.

La taille de la mémoire permet d'aborder des projets avec du vrai delay mais on ne dépasse pas les 20 MHz (16 sur l'ATmega168 ) et les opérations en virgule flottante se traînent toujours comme des limaces. Quand j'aurai terminé cette pédale, je passerai probablement à une architecture vraiment plus costaud du type Linux embarqué.
Franky47
Vouais, le DSP y'a que ça de vrai pour le son numérique... Et les FPGA pour les courageux (ou les suicidaires)...


M'enfin perso je préfère utiliser le mien pour les IHM (les écrans tactiles c'est cool.. )
Matos DIY: Forty Seven Effects - Synthé DIY: Le Slidophone
Think different. - 42
jzu
  • jzu
  • Custom Méga utilisateur
  • MP
  • #5
  • Publié par
    jzu
    le 23 Apr 09, 22:48
Nouvelle étape, tout est maintenant intégré dans le boîtier de la Wah-Fuzz. Sans regret : le son de la fuzz était vraiment inintéressant et la wah restait toujours enclenchée.

Avant :


Après :

Le régulateur 5 V n'est pas encore mis d'où l'alim branchée à l'intérieur de la pédale. Je pourrais y mettre du 9 V en direct car l'Arduino dispose de son propre régulateur, mais je préfère que ça chauffe en dehors du circuit plutôt que dessus.
Il y a 3 plaques en tout : l'Arduino lui-même en dessous à droite, une plaque de connexion au dessus pour raccorder à peu près proprement l'électronique d'interfaçage analogique que l'on voit à sa gauche.

On ne le voit pas, mais un trou a été percé au niveau de la prise USB pour brancher de quoi uploader en direct.

Et le son ? Je suis revenu au réglage « épouvantable » avec une fuzz maximaliste. C'est simple, il suffit de dérégler les trimpots de manière à cracher le plus de gain possible en polarisant à côté de la plaque pour que l'entrée analogique du micro-contrôleur sature, à sa manière. Un petit sample pour montrer de quoi il s'agit... Il y a surtout des accords lents car c'est là qu'on entend le mieux le balayage avec la pédale. L'effet ne marche pas très bien sur des notes seules, surtout sur des accords.

À un moment, on entend aussi une sorte de vibrato qui arrive quand j'enfonce la pédale vers l'avant, à fond, qui doit être provoqué par un wraparound dans le buffer circulaire (je dépasse le début et mon accesseur me fait automatiquement revenir à la fin). Peut-être.

Très bien pour du post-rock. Dommage, je ne joue pas de post-rock.

La dernière étape consistera à tirer de l'ensemble un son correct en clean. C'est pas gagné... Si ça ne marche pas, je passerai à un système du type routeur réseau sous OpenWrt, la difficulté etant de trouver un matériel avec un port USB pour y ajouter un dongle audio. Peut-être qu'avec un NAS... on verra.
Franky47
C'est sympa, ça donne un son compètement barré, j'aime bien

Un truc dommage par contre, c'est d'utiliser un Diecimila (qui est pas le board le plus adapté au prototypage)...
Matos DIY: Forty Seven Effects - Synthé DIY: Le Slidophone
Think different. - 42
jzu
  • jzu
  • Custom Méga utilisateur
  • MP
  • #7
  • Publié par
    jzu
    le 26 Apr 09, 17:43
Bah, ça me va même si l'ensemble prend de la place. Le gros intérêt de l'Arduino est sa popularité : plein de monde travaille là-dessus et en cas de problème, on trouve immédiatement une réponse, même sur des points de détails. C'est important pour moi qui débute dans le monde des micro-contrôleurs. Et puis, si j'en ai marre de cette pédale, je pourrai recycler le board pour en faire ce qui m'amusera à ce moment-là : un séquenceur de potentiomètres motorisés, une commande de chatière à détection de tag RFID...

En ce moment sur effets...