Clone DIY d’un sharp CE-125

Mon fils, pour qui j’avais construit un petit tank lorsqu’il avait 5 ans pour apprendre à programmer des séquences de déplacement, a bien grandi 😉 Maintenant du haut des ses 11 ans, il souhaite apprendre à programmer en BASIC sur mes vieux pocket-pc Sharp des années 80. Pour éviter de tripoter mes précieuses vieilleries, je lui ai trouvé sur ebay un pc-1262 ainsi que son périphérique « tout en un » un superbe ce-125 qui à l’époque était une sorte de mini rolls-royce avec son lecteur/enregistreur de microcassettes pour charger/sauvegarder les programmes et cerise sur le gâteau: son imprimante thermique non graphique affichant 24 caractères par ligne (la classe !!).
Toutefois, si le CE-125 est une belle petite bête qui vieilli bien, il souffre de plusieurs petits soucis: la sauvegarde magnétique peut rapidement devenir inopérante (courroies des vieux lecteurs de cassette, encrassement,) et surtout aucune conversion vers un format textuel quelconque pour modifier (sur un mac ou un pc) puis pour ré-injecter dans la pocket pc. Idem pour l’imprimante dont il est quasi impossible de trouver des pièces, sauf à en vampiriser une autre… mais bon les prix commencent à grimper….

L’idée a donc germé de pouvoir réaliser un clone maison pour a minima imprimer et sauvegarder les programmes en wave ou mp3.
Après de longues recherches, car il y a peu de prose sur le sujet,  j’ai pu trouver de concevoir et mettre en oeuvre mon projet. En l’occurence il s’agit du site http://pocket.free.fr qui m’a permis de découvrir la suite d’outils PocketTools (avec les sources) qui sont désormais maintenu sur une site allemand https://www.peil-partner.de/ifhe.de/sharp/. Cette suite est totalement bluffante, puisque qu’elle permet via un ensemble de binaires et de scripts d’enregistrer via le port Sharp pour magneto-cassette en format wav puis de convertir le fichier en texte. Elle permet également de faire l’inverse et de diffuser toujours via ce port d’interface sharp un fichier texte convertit en wav. Donc bien au delà de mes espérances !!! Et comme les sources sont en C Ansi, il est possible de tout compiler sous linux, donc sur un raspberry PI,en y ajoutant une carte carte son usb à pas cher 😉
En ajoutant un petit shield LCD 2×16 caractères comme celui-ci, il y a de quoi réfléchir une IHM minimaliste en python ….
La partie sauvegarde/chargement des programmes étant faite, il ne restait plus qu’à trouver comment imprimer….. J’ai pu trouver mon bonheur sur le site de Walter Fischer et en l’occurence de quoi connecter un Arduino, toujours à ce même port Sharp à 11 pins, afin sortir le le port USB/série de l’arduino. A partir de là rien de plus simple que d’utiliser une petite imprimante thermique comme celle d’adafruit qui fournit une bibliothèque simple d’emploi.

donc si l’on résume voila ce que cela donne sur le papier:

 

 

 

 

 

 

 

Pour l’arduino, je suis reparti du code de Walter Fischer en l’adaptant à mes besoins. C’est à dire, de faire en sorte que quelque soit le modele le pocket pc (hors série PC-1500 et hors série 1211) l’arduino puisque interpréter correctement la trame de synchro d’avant impression (de plus les pin utilisés diffèrent selon le modèle de pocket-pc) puis celle d’impression (qui utilise toujours les deux mêmes pin Dout pour la réception et ACK qui acquitte chaque bit reçu)

le code est dispo sur github comme à l’accoutumée:
https://github.com/Chnalex/arduino/blob/master/sharp_imp.ino

voici un premier test sans imprimante avec un script python coté raspberry pour écouter la sortie série de l’arduino:

Pour réaliser quelque chose de correct, j’ai fait l’acquisition d’un câble Sharp EA-129C (câble avec deux connecteur mâle 11-pin Sharp) et j’ai bricolé une plaque de test pour à la  fois sortir vers la carte son du raspberry (mic et ligne) et vers les pins de l’arduino. Pour la partie son je me suis inspiré de ce schéma

Voici l’ensemble, dans un boitier que j’ai fait découper au laser dans de l’acrylique comme j’en ai l’habitude chez formulor.de.
On y retrouve donc, la plaque « à trous », l’imprimante, l’arduino et le rasberry pi muni de son shield lcd (mais que l’on ne voit pas, car il est face contre terre

Le programme en python est plutôt simple, il ne sert qu’à gérer la sauvegarde et le chargement via le truchement de deux scripts mis en oeuvre lors de la compilation de PicketTools (csave et cload -> à l’identique des commendes lancées sur le pocket pc) et qui sont appelés par la commande python os.system(commande).
L’ihm permet de naviguer entre les menu, choisir le modèle de pocket pc, saisir un nom pour le fichier au sauvegardé ou lister les fichiers présents sur la clé usb montée sur /media/usb0. Afin d’éviter d’avoir à gérer le montage démontage des clés depuis le scripts python, j’ai installé usbmount qui gère cela très et de manière automatique

le code du script:
https://github.com/Chnalex/arduino/blob/master/sharp_lcd.py

et hop, une petite video de sauvegarde

une autre d’un chargement

et une petite dernière de l’impression

Pedalboard midi avec un arduino Uno

Ayant investi dans un soft de modélisation d’amplis et d’effets sur mon mac pour ma guitare (Bias FX2 <- que je recommande vivement), je me suis vite confronté à un problème… comment, sans me faire greffer une troisième main, pour activer un effet ou interagir avec (comme avec une wahwah par exemple) ? Avec un pédalier d’effet, on ne se pose pas la question, puisque l’on se sert des ses pieds!!

Et bien, c’est simple, une seule réponse le protocole MIDI ! Ce protocole inventé au mitan des années 80 a permis de décorréler l’instrument sur lequel on joue, du son qui est produit (Cf clavier/séquenceur). Pour les pédaliers des guitares le même principe s’applique. Celui-ci devient une sorte l’élément passif qui envoie des commandes d’activation/désactivation ou de modulation à l’équipement qui peut les traiter (ampli à modélisation avec entrée midi, soft).
Après avoir fait le tour des produits du marché j’ai considéré que le cout d’un pédalier MIDI était plutôt disproportionné par rapport au prix de mon soft (plus de 300 euros le pédalier contre un peu moins de 100 pour mon soft….). Et puis, j’avais dans mes cartons une pédale wahwah Jim Dunlop JH-1 dont j’avais fait l’acquisition vers 1994 (hum hum cela ne me rajeuni pas) et dont le son (même après changement du potentiomètre interne)  était un peu cracra (trop de souffle et crachoteuse -> bof). Donc pourquoi ne pas tenter l’aventure avec un arduino, en partant du postulat qu’il y avait bien un fêlé quelque part sur cette terre qui avait eu l’idée de créer un bibliothèque midi pour cette plateforme (j’y reviendrai après). La réponse est oui, c’est possible !!! 

 

 

J’ai donc désossé le contenu de la wah pour ne garder que le potentiomètre et interrupteur on/off.

 

 

 

 

 

Et puis quitte à faire un truc sympa, j’ai voulu accoupler à la pédale un boitier pour y accueillir des boutons poussoirs robustes (j’ai des gros pieds) et quelques leds. Le tout m’est revenu à moins de 40 euros en comptant l’arduino (un vrai pas une copie). Comme la place à l’intérieur de la pédale est relativement comptée, j’ai choisi de placer l’arduino dans le boitier alu.

 

 

 

 

fixation à l’allemande ! 🙂

comme ça je peu appuyer bien fort avec les pieds !

 

 

 

 

 

 

 

 

Oh le beau paquet de nouilles 🙂

bon ok, j’aurai pu faire plus esthétique. Mais au final c’est fonctionnel et robuste 

 

 

 


De manière schématique, voila ce que cela donne

Sur le fond, la programmation est plutôt simple. On capte chaque appui sur un bouton poussoir pour changer l’état d’une variable de 0 vers 1 ou de 1 vers 0. En fonction de l’état de cette variable on allume ou non la led correspondante. Dans la pratique : j’appuie sur un bouton poussoir, la led s’allume, je ré-appuie, la led s’éteint. Du point de vue du potentiomètre, le principe est simple également. On l’utilise comme pont diviseur de tension et on capte la valeur de la tension correspondant à la position de celui-ci.
Dans la foulée, on envoie un signal midi sur le port usb pour indiquer le changement d’état.
Du point de vue du protocole midi, il y a en gros deux grandes catégories: les notes et les commandes (control change). Dans le cas d’un pédalier pour guitare, le plus logique est d’envoyer une commande. Celle-ci fait référence à un canal (un par appareil midi pour faire très simple), un contrôleur (un bouton, un switch, un potentiomètre) et une valeur (0=off, 127=on ou toute valeur entre 0 et 127 pour moduler la valeur -> volume, pitch, wah, etc).
Pour ce pédalier il y a donc 6 contrôleurs (4 boutons poussoirs mais vu comme des inters -> Cf plus haut, 1 inter-> celui d’origine de la wah et le potentiomètre de position de pédale). 

Pour la bibliothèque  midi, le mieux est d’utiliser celle-ci qui est plutôt récente.

Jusque là tout va bien…. mais c’était trop beau 🙂 

Sorti de l’ombre, arrive le problème du port USB….
Et oui sur un arduino Uno récent, le port USB se comporte comme une émulation de port série grâce au chip annexe fourni par ATMEL -> microcontroleur atmega16u2. Les plus vieux modèles, équipés de ftdi ou les copies chinois sur base CH340G, ne peuvent d’ailleurs pas faire autre chose que du serie sur USB hardware, alors que le 16u2 possède un firmware (donc reflashable) pour faire le job. Sur les Arduino micro et le léonardo, c’est different, mais le principe reste le même : c’est le microcontroleur principal (ATmega32u4) qui gère le port USB.
Bref, tout cela pour dire qu’il faut sortir du mode « port série » sur l’USB pour passer en mode HID (human inerface device) pour faire de l’USB-MIDI.
Si sur le micro ou leonardo, il n’y a rien à faire que d’utiliser la bibliothèque USB-MIDI qui va bien. Pour le Uno l’opération est un peu plus compliquée….. il va falloir flasher le 16u2 avec un firmware qui permet ce mode. 

Dans les faits ce n’est pas très compliqué, il suffit sur le port ISCP2 du Uno de mettre le pin RST à la masse puis d’utiliser un programme comme dfu-programmer pour pousser le nouveau firmware (d’abord erase puis ensuite flash).

Le firmware HIDUINO est le plus connu, mais il à un gros défaut… il ne sait gérer que le mode HID et ne possède pas de double boot pour passer en mode série. Résultat des courses : s’il l’on souhaite modifier son code sur l’arduino, il faut reseter le16u2, effacer le firmware, reflasher le firmware port série, pousser le programme corrigé avec l’IDE, reseter le 16u2, refsher le firmware HIDUINO et finalement tester les modifs…. de quoi devenir fou rapidement…….
Le plus simple a été de compiler un firmware avec double boot via le site « pimp my mocoLUFA » (le firmware est dispo sur mon espace github). Avec ce firmware, il suffit de mettre le pin4 de l’ISCP2 à la masse pour que le 16u2 boot en mode série et d’enlever cette mise à la masse pour qu’il boot en mode HID 🙂

Le code Arduino est dispo comme toujours sur github, il est très compact et tient en moins de 180 lignes:

https://github.com/Chnalex/arduino/blob/master/pedalboard_alex.ino

Voila ce que la donne dans la vraie vie (bon avec les mains pour la video, mais en principe c’est aux pieds…)