Pages: [1]   Go Down
Author Topic: Arduino comme DCB to MIDI converter (pour controler JUNO60)  (Read 554 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Bonjour,

Je viens de faire l' acquisition d'un Juno 60 qui est un synthétiseur analogiques de marque Rolanb.
Ce synthétiseur a la particularité d'utiliser un système de communication exclusif a Roland qui est le DCB (Digital Control Bus). Un ancêtre du MIDI (Musical interface digital instrument).
Voici le protocole du DCB http://en.wikipedia.org/wiki/Digital_Control_Bus

Comme on peut le voir dans le document wikipedia pour envoyer un message équivalent au message Note ON en midi il faut 0xfe,data....,0xff. la fréquence de communication est la même que le midi 31250 Hz.
Donc j'ai fait un essai de communication avec le juno60 via le Arduino .
Connection:
   -Arduino TX ---> DCB Rx Data (Pin 2 du connecteur)
   -Arduino GND ---> DCB ground (Pin 4 du connecteur)

J'ai envoyé ce petit programme:

Code:
void setup() {
  pinMode (Led, OUTPUT);
  Serial.begin(31250);
}
////////////////////////////////////////////////////////////////
///////////////////////debut de la boucle///////////////////////
void loop() {
  Serial.print(0xfe,BYTE); //message KEYcode
  Serial.print(0xa4,BYTE); /* donne en binaire B10100100 , le 1er bit sert au Gate (1= gate ON, 0 = gate  OFF) et les 7 bit restant donne la note (en Hex --->24 = note C2) */
  Serial.print(0xff,BYTE);
  delay(100);

}
 

En envoyant ce programme je pensais que mon JUNO60 allait me joué en continu la note C2 mais rien ne se passe et je ne voit pas ce qui ne va pas, donc je fais appelle a votre aide pour essayer de faire marché ce petit programme.

Musicalement,

Xarolium
Logged

Tallinn, Estonia
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Salut xarolium,

Je connais pas ce protocol mais peut etre que ces idées peuvent t'aider:
Au lieu d'essayer d'envoyer un message a ton controller, j'essaierais plutot de recevoir des données et de les afficher avec le serial port d'arduino.

Aussi, vérifie que les 2 protocols correspondent (arduino serial et DCB).
Quote from: wikipedia
LSB first, 8 data bits, 2 stop bits, odd parity
Logged

Tallinn, Estonia
Offline Offline
Newbie
*
Karma: 0
Posts: 6
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

re!

En fait je pense avoir compris:
Tu as connecté ton synthé a l'arduino TX mais dans ton code tu ne l'assigne nul part (le pin TX).
Aussi, quand tu utilise serial.begin et apres serial.print: ca envoie les donnés a ton PC (ouvre le serial port et regarde si tu recois
FE A4 FF).

Je pense qu'il te faut que t'utilise une autre librarie pour utiliser un nouveau port serie avec les IO Rx et TX de l'arduino.
Logged

Made in Belgium
Offline Offline
God Member
*****
Karma: 1
Posts: 756
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Aussi, vérifie que les 2 protocols correspondent (arduino serial et DCB).
Quote from: wikipedia
LSB first, 8 data bits, 2 stop bits, odd parity

Je pense aussi qu'il faudrait regardé de ce côté là surtout la parité impaire, par contre je viens de remarqué que dans la lib HardWareSerial qu'on ne configure pas le registre UCSRnC (initialisé par défaut ?)

Code:
Serial.print(0xfe,BYTE)

Ici tu envoie la correspondance ascii pour un affichage binaire de 0xfe donc 8 char de ( '0' = 0x30 = 00110000 ) ou ('1' =0x31 = 00110001 )
« Last Edit: November 11, 2011, 10:12:35 am by osaka » Logged


0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Merci de l'interet que vous portez à mon projet  smiley-wink

Je vais essayer de faire ce que Meach_lala a dit, c'est à dire recevoir le message qu'envoi la sortie DCB et le "lire" avec arduino.
Par contre je ne comprends pas pourquoi je dois faire attention a la parité?

Normalement si je connecte comme suit:

 -DCB Tx Data -----> Arduino Rx
 -DCB ground ------> Arduion Ground

et que je fais un programme comme cela:
Code:
////////////////////////////////////////////////////////////////
///////////////////////debut de la boucle///////////////////////
void loop() {
  Serial.begin(31250);
  if(Serial.available() > 0){// un info est elle presente en Rx
    data = Serial.read();// enregistrer cette info dans la variable Data
    Serial.begin (9600);
    Serial.print (data, BYTE);
  }
}

Cela devrai fonctionner ?

Merci

Xarolium
Logged

0
Offline Offline
Newbie
*
Karma: 0
Posts: 31
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Donc je viens de faire le test expliquer precedement mais j'ai du changer un peu le programme pour pouvoir essayer d’interpréter les info que je recevais.

Code:
int Led = 13;
int data = 0;
int count=0;


///////////////////////////////////////////////////////////////
//Initialisation de la sorite de la Led et du port Rx en Midi//
void setup() {

}
////////////////////////////////////////////////////////////////
///////////////////////debut de la boucle///////////////////////
void loop() {
  Serial.begin(31250);
  delay(100);
  if(Serial.available() > 0){// un info est elle presente en Rx
    data = Serial.read();// enregistrer cette info dans la variable Data
   
    Serial.begin (9600);
   
    Serial.print (data, HEX);
    Serial.println (" ");
    count ++;
    if (count == 7){
      Serial.print("/n");
      count =0;
    }
  }
}

le Juno 60 envoi en permanence des infos, on voit que les premiers lignes sont identiques mais des que j'appuie sur une touche du clavier les infos change et ne revienne jamais comme celle du début
Pourquoi cela ?
Je n'arrive pas a comprendre le protocol Peut être quelqu’un pourrai m'éclairer ?
Et voila ce que je lie sur le Serial monitor


Merci
Logged

Pages: [1]   Go Up
Jump to: