Quelques questions pour un débutant (contrôleur midi)

Bonjour à tous,

J'ai décidé il y a peu de me lancer dans l'aventure Arduino dans le but final de construire des contrôleurs Midi et synthétiseurs. Pour commencer je me suis procuré la version Uno.
J'ai suivi quelques tutoriels et je me suis déjà renseigné sur pas mal de choses, mais il y a cependant certaines réponses que je ne trouve pas...

  • Communication MIDI. D'après ce que j'ai lu, la communication en Midi ne peut se faire que par la broche 1 (TX). Qu'est-ce qui différencie cette broche des autres, et pourquoi on ne pourrait pas envoyer ou recevoir des signaux MIDI via les autres broches ?

  • Admettons que une fois mon prototype créé sur breadboard, je voudrais le réaliser de façon définitive sur circuit imprimé. Si je comprends bien, la carte Arduino n'est qu'un assemblage de plusieurs composants électroniques qu'on peut trouver dans le commerce, et dont le composant principal est le microcontrôleur. Je pourrais donc souder tous ces composants moi-même sur un circuit imprimé que j'aurai fait faire sur mesure ?
    Comment se passe la programmation à ce moment là ? Est-ce qu'il faut un autre logiciel que celui d'Arduino ? Le langage de programmation est-il le même ?

Voilà, j'espère que j'ai été clair, merci d'avance pour votre aide :wink:

Bonjour et bienvenue dans le monde Arduino

  1. La liaison MIDI est basée sur une "liaison série asynchrone" c'est à dire qu'il s'agit de faire passer des octets formant des messages sur 1 seul fil.
    Pour cela est par défaut le signal à un niveau de repos "1" (==5V). Avant de transmette chaque octet on commence par marquer le début en plaçant le signal à 0 (=0V) pour un temps T. Puis on positionne le signal pour représenter chacun des bits de l'octet en commençant par le bit de poids faible. Chaque bit dure un temps T. On finit par un bit de stop c'est à dire qu'on laisse le signal dans sa position de repos "1" pour au moins 1 temps T avant de passer à l'octet suivant.
    Le temps T est déterminé par la vitesse de transmission en baud (équivalent dans ce cas au nombre de bits par seconde).
    Le MIDI utilise une transmission à 31250 bits par seconde.

On pourrait utiliser n'importe quelle broche de l'Arduino en utilisant du logiciel pour positionner le signal à 1 ou 1 comme il faut mais cela demanderais beaucoup de ressource du processeur, surtout à la vitesse de 31250 b/s.

Le processeur ATmega contient un fonction de gestion de liaison série câblée en matériel dans le processeur qui fait cela sans perturber l'exécution du code. Il faut quand même un tout petit peu de code pour enchaîner les octets les uns après les autres mais c'est minimum par rapport. De plus cette partie est déjà intégrée dans l'environnement Arduino donc tu n'a besoin que d’appeler des fonctions C de haut niveau facile à utiliser.

Cette fonction matérielle est disponible uniquement sur les broches TX (émission) et RX (réception) de l'Arduino.

Attention : cette liaison série est aussi utilisée pour la communication avec le PC pour le téléchargement du code et le debug par Serial.print()
Corollaire : quand tu t'en sert pour faire du MIDI, tu ne peut plus utiliser cette liaison série pour le debug.

Une Arduino Leonardo ou Mega aurait été plus pratique pour faire du MIDI car la Léonardo possède 1 liaison série en plus de la liaison PC et la Mega en possède 3 de plus.

ne pas oublier que la liaison MIDI nécessite un cablage spécial :

  • 2 résistance de 220 ohms pour l'émission
  • 1 optocoupleur et 1 résistance pour la réception
  1. Tu peux très bien faire ton propre circuit toi même. Dans un premier temps il est plus facile de faire un "shield" maison et de le brancher sur une Arduino toute prête, mais a terme rien n'empêche de faire soi même sa propre carte utilisant le processeur ATmega, les quelques composants indispensables qui vont avec et les composants dont tu as besoin pour ton application personnelle.

Il y à 2 façon de procéder :

a) Tu achètes un ATmega préprogrammé avec le bootloader Arduino. Sur ta carte, il faut que tu prévoit un connecteur pour relier la liaison série du controleur non seulement au MIDI mais aussi à ta UNO (ou un simple adaptateur série USB TTL) afin de pouvoir télécharger ton sketch dans le processeur.

b) Tu achètes un ATmega non pré-programmé et tu le pré-programme toi-même sur breadboard à partir de ta UNO

c) Tu achètes un ATmega non pré-programmé et tu prévoir sur ta carte le connecteur ICSP (+5V, GND, Reset + les 3 signaux du bus SPI) afin de flasher ta carte, soit à l'aide de ta UNO, soit par un programmateur USB (différent de l'adaptateur série USB/TTL)

Bref, plusieurs solutions, aucunes difficultés pour s'en sortir.

Tout est clair maintenant, merci beaucoup.

Les liaisons TX et RX sont l'équivalent de l'usb alors ? Les informations sont envoyées et reçues sous forme de trames, ce que les autres broches ne sont pas capables de traduire. Si j'ai bien compris :stuck_out_tongue:

Et au niveau de la programmation, la bibliothèque MIDI est directement reconnue par le Atmega ou bien justement c'est au niveau de la pré-programmation qu'il faut lui communiquer ça ?

Les TX et RX sont les broches dédiées à la liaison série asynchrone du ATmega
Sur la carte UNO, elles sont reliées à un composant (un autre ATmega) qui sert d'adaptateur USB/série.
On peut les utiliser aussi pour le MIDI si l'USB n'est pas branché.

Il y a en effet une lib MIDI qui n'est pas installée par défaut et qu'il faut télécharger : Arduino Playground - MIDILibrary
Je n'ai pas eu l'occasion de regarder ce qu'elle faisait.

Merci !