Généralités

L'AT Tiny 85 est un petit microcontrôleur de la famille Atmel. Il dispose de 8 broches, dont 2 d'alimentation, et 6 pouvant être utilisées en entrée sortie. Il dispose d'I2C, de SPI, de convertisseurs analogiques, de PWM. Malheureusement, il ne dispose pas de sortie série. Mais la possibilité d'en émuler une par logiciel sur une entrée / sortie digitale devrait combler ce manque. Il y a donc donc bien plus de ce qu'il faut pour fabriquer le contrôleur midi qui ne nécessite que 2 entrées analogiques et d'une sortie numérique.

Plateforme matérielle

Après quelques recherches, j'ai trouvé plusieurs plateformes matérielles à base d'AT Tiny 85:

Attiny85-Micro-USB-Development-Board-01.jpg

Ces 4 plateformes ont un brochage compatible. Ils sont donc relativement interchangeables. Disposant d'un clone de Digistump, j'ai choisi cette dernière.

La précédente version ayant été développée sur environnement de développement Arduino, il m'a paru naturel de tenter d'en faire de même. Mais programmer une carte dans un environnement Arduino nécessite que celle-ci soit équipée d'un bootloader, qui permette le téléchargement du code vers la cible ou d'un programmateur. Le soucis est qu'll faut un programmateur dans tous les cas, au moins pour installer le bootloader.

Adafruit Industries a réglé le problème de façon très élégante,

  • En développant un bootloader qui émule de l'USB 1.1, soit reconnu par l'environnement Arduino et simplifier la programmation
  • En développant un programme pour Arduino Uno qui permette de programmer le bootloader dans l'AT Tiny 85.

Le bootloader est lui même basé sur une implémentation pour Tiny85 du programmateur maison de Lady Ada : USBTinyISP. Il a été modifié notamment pour supporter la led sur le port 1 afin de pulser durant la période ou la carte est programmable, et de gérer un timeout de 10 secondes après lequel si aucune demande de programmation n'est faite la carte part sur le dernier code programmé dans la carte..

A noter qu'un choix a été ait par Adafruit sur l'usage de P5 (ou PB5, ou la broche 1 de l'AT Tiny 85). Bien que cette broche puisse être une entrée sortie, elle a été utilisée en entrée Reset, afin de pouvoir y connecter un bouton poussoir pour faire revenir l'AT Tiny en mode programmation. Cela fait perdre une e/s digitale ou une entrée analogique, mais simplifier grandement la programmation et évite d'avoir à déconnecter périodiquement de l'USB.

Par ailleurs, les broches P3(pin 2) et P4 (pin3) sont utilisées pour gérer l'USB pendant la phase de programmation. Ensuite elles sont librement utilisables. Il vaut toutefois mieux prendre soin de les déconnecter du montage pendant la phase de programmation.

Brochage du Digistump :

*  P0 (pin5) = D0    PB0 AREF/SDA/RX
*  P1 (pin6) = D1    PB1 PWM/MISO et LED
*  P2 (pin7) = D2/A1 PB2 ADC1/SCK/SCL
*  P3 (pin2) = D3/A3 PB3 ADC3 USB+
*  P4 (pin3) = D4/A2 PB4 ADC2 USB- 
*  P5 (pin1) = D5/A0 PB5 Reset

pinout.jpeg

A noter que les 3 autres cartes ont des brochages identiques, que ce soit sur l'USB ou la Led. Les Digistump ou copie de Digistump n'ont pas de bouton reset qu'il conviendra de raccorder en externe entre l'entrée P5 et la masse.

Programmation du bootloader

Le bootloader est assez simple à programmer, comme décrit dans https://learn.adafruit.com/introducing-trinket/repairing-bootloader.

Il faut disposer d'une carte Arduino Uno, et raccorder la Digistump à l'Arduino comme suit :

  • Digistump +5V sur arduino +5V
  • Digistump GND pin to Arduino GND
  • Digistump P5 vers Arduino #10
  • Digistump P0 vers Arduino #11[
  • Digistump P1 vers Arduino #12
  • Digistump P2 vers Arduino #13

Il faut ensuite programmer sur l'Arduino Uno le code suivant, ouvrir une laison série à 9600 bauds via l'environnement Arduino, faire 'G' et entrée pour programmer le bootloader. Il ne faut que 2 secondes pour effectuer la manip.

Le bootloader est alors programmé dans la carte et un compte rendu est affiché. Le Digistump peut alors être déconnecté de l'Arduino.

Pour que le Digistump ainsi programmé soit reconnu par l'environnement Arduino, il faut ensuite :

A noter que j'ai effectué ces manipulations sans encombre sur l'environnement Arduino 1.9 Beta sous Windows 10 64 bits, sans soucis particulier.

Utilisation de la Digistump avec le bootloader Trinket dans l'environnement Arduino

Dès lors, il suffit de raccorder la carte sur un port USB, et d'envoyer le code durant les 10 premières secondes (tant que la led pulse). En raccordant un bouton entre P5 et la masse, on peut remettre à zero le Digistump et disposer à nouveau de 10 secondes pour programmer le code.

Réalisation du montage

Tout comme dans la réalisation précédente, le Joystick sera utlisé sur ses 4 axes :

  • Gauche / Droite pour le pitch bend
  • Vers le haut pour déclencher la modulation
  • Vers le bas pour déclencher l'aftertouch.

A chaque envoi de code midi, la led interne raccordée au port P1 clignote.

En position centrale (repos), aucun code midi n'est envoyé la led est continuellement allumée, afin de montrer qu'il est en position de repos. Il faut passer un seuil mécanique pour déclencher l'envoi de code.

Le câblage est simplissible puisqu'il suffit de raccorder P2 sur le point milieu du potentiomètre de l'axe X du Joystick, P4 au point milieu du potentiomètre de l'axe Y, et pour chaque potentiomètre, le coté gauche au 0V et droit au 5V.

Coté sortie midi, P5 doit être relié à une résistance de 220 ohms, l'autre coté de la résistance devant être raccordé à la broche 5 de la DIN 5 broches, tandis que la broche 4 doit être mise au 5V via une autre résistance de 220 ohms. La broche 2 de la prise DIN peut être reliée à la masse.

Le serial RX (P0) est inutilisé.

Le Digistump et autres clones disposant d'un régulateur 5V intégré, il est possible de les alimenter en 9V sur l'entrée Vin afin par exemple de les rendre compatible avec l'alimentation d'un pedal board.

Une autre solution d'alimentation serait de l'alimenter par un accu lipo. A ce jeu, l'Adafruit Trinket est beaucoup mieux conçue, puisqu'elle dispose d'une version 3.3V, d'une entrée spécifique et même d'une shiled dédiée qui conditionne et charge un lipo 3.3V. Voir la shield : https://learn.adafruit.com/adafruit-pro-trinket-lipoly-slash-liion-backpack/overview

Le programme

Cette version du programme implémente un algorithme de gestion du point milieu du potentiomètre de chaque axe. Il faut ajuster quelques valeurs pour l'adapter à votre joystick. Pour ce faire :

  • Décommenter le #DEFINE DEBUG true et flasher le code
  • Ouvrir une console sur la liaison série à 9600 bauds
  • Lire les valeurs des points de repos de vx et vy et les reporter dans Xidle et Yidle
  • Manipuler le joystick aux mini et maxi de chaque axes et relever les valeurs pour les reporter dans Xmini, Xmaxi, Ymini, Ymaxi.
  • Recommenter la ligne DEBUG, recompiler et flasher le code
  • Vérifier qu'au repos la led est bien allumée.
  • Vérifier que les contrôles transmis en midi atteignent bien le maximum pour chaque axe (Bend de -63 à +64, Aftertouche et modulation de 0 à +128.

Voici le sketch Arduino correspondant : midibend85.ino

Bonne réalisation!