Show Posts
Pages: [1] 2 3
1  Using Arduino / Programming Questions / Re: Use Timer instead of Delay on: January 14, 2012, 06:40:10 am
Thank you for your fast answer
i will try to replace Delay with millis function

2  Community / Exhibition / Gallery / Re: Finished Arduinoboy THX trash80 on: January 14, 2012, 06:34:50 am
Here some like to understand a little bit more what does this machines.

http://code.google.com/p/arduinoboy/

3  Using Arduino / Programming Questions / Use Timer instead of Delay on: January 09, 2012, 01:39:29 pm
Dear Diyers,

I'm trying to make a ADSR (envelop generator for synthesizer ) with arduino
i use a 7HC595 with a 2R ladder to make a DAC to generate envelop
A input Multiplexer 4051 scan 8 potentiometers. Only Four potentiometers  Attack, Decay, Sustain, Release are used.
I would like to replace this part of code because i couldn 't use Delay function in my program
How can  i modify my code to use a Timer ?
thank you for your help


Code:
void loop()
{

  //scanner les entrées du 4051
  for (count=0; count<=7; count++)
  {
    InitialiseShift();
    ValuePotScan();

  }
  oldgate = stategate;  
  stategate = digitalRead (gate);
  if (stategate == HIGH && oldgate != stategate){
    for (int i =0; i<255 ; i++){    
      digitalWrite (latchPin, 0);
      shiftOut (dataPin,clockPin,i );
      digitalWrite (latchPin, 1);
      delayMicroseconds ( valuepot[0] +1);
    }
    for (int j=255; j> valuepot[2]; j--){
      digitalWrite (latchPin, 0);
      shiftOut (dataPin,clockPin,j );
      digitalWrite (latchPin, 1);
      delayMicroseconds ( valuepot[1] +1);
    }
  }
  if (stategate ==LOW && oldgate == HIGH){
    for (int k = valuepot[2] ; k>0; k--){
      digitalWrite (latchPin, 0);
      shiftOut (dataPin,clockPin,k );
      digitalWrite (latchPin, 1);
      delayMicroseconds (  valuepot[3] +1);
    }      
  }
}
4  Using Arduino / Audio / Re: MIDI Control Change Messages not working on: November 18, 2011, 05:06:35 pm
Dear Userman123,

Can you please put the rest of the code
and could you show a diagram connection of your Pot
it would be easier to help you

Best Regard,

Xarolium
5  Using Arduino / Audio / Re: Midi JUNO 60 (DCB to MIDI converter) need help on: November 18, 2011, 11:19:12 am
thank you
the last link is very useful
on this page he said:

Definitions Needed:

#define bit9600Delay 84  
#define halfBit9600Delay 42
#define bit4800Delay 188
#define halfBit4800Delay 94


But how he can find 84 microseconds to generate 9600baud
f=1/T       F= 1/0,000084 = 11905 hz approximately

How can i find the right frequency to generate 31250baud ?
Maybe he add the time of each action on his fonction , i'm right??

Now, with your help i know what i need to do to send data in my JUNO60
Arduino must generate a clock at 31250hz on one PIN
a second PIN must send DATA (Start bit, Data Bits,Parity Bit and Stop Bit) in Serial at the same frequency and synhcro with the clock
And a third PIN to latch the hardwareflow control.
Then i could use this part of code to generate the right "polarity" of my bit

Code:
void SWprint(int data)
{
  byte mask;
  //startbit
  digitalWrite(tx,LOW);
  delayMicroseconds(bit9600Delay);
  for (mask = 0x01; mask>0; mask <<= 1) {
    if (data & mask){ // choose bit
     digitalWrite(tx,HIGH); // send 1
    }
    else{
     digitalWrite(tx,LOW); // send 0
    }
    delayMicroseconds(bit9600Delay);
  }
  //stop bit
  digitalWrite(tx, HIGH);
  delayMicroseconds(bit9600Delay);
}


6  Using Arduino / Audio / Re: Midi JUNO 60 (DCB to MIDI converter) need help on: November 17, 2011, 07:32:29 am
thank you for your help Xray303

I learned a little bit more of the UART protocol
and it work like that.
A byte is composing with:
-first one start bit = 0
-after Data bits between 5 and 9
-then a parity bit
-finaly one stop bit = 1

the different between  the DCB protocol and UART is that the start in DCB is 1 and stop Bit is 0
Do you think it's possible to change this on the Arduino UART.
7  Using Arduino / Audio / Midi JUNO 60 (DCB to MIDI converter) need help on: November 13, 2011, 11:32:42 am
Dear Diyers,

I would like to control the JUNO60 in MIDI
This old syntheziser use DCB protocol
http://en.wikipedia.org/wiki/Digital_Control_Bus

i connect the arduino like this
-DCB Tx Data -----> Arduino Rx
 -DCB ground ------> Arduion Ground

I use this program to read the data who send the juno 60
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;
    }
  }
}
That what i read on the serial monitor



I don't understand this data because at the beginning the data seem to ok and when i try to push a key the datra change and never be the same as the beginning
Is there anybody who are "friendly" with the type of protocol or maybe i dont interface it correctly

Thank you for your help
Xarolium
8  International / Français / Re: Arduino comme DCB to MIDI converter (pour controler JUNO60) on: November 12, 2011, 04:53:53 am
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
9  International / Français / Re: Arduino comme DCB to MIDI converter (pour controler JUNO60) on: November 12, 2011, 02:39:46 am
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
10  International / Français / Arduino comme DCB to MIDI converter (pour controler JUNO60) on: November 11, 2011, 08:19:56 am
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
11  International / Français / Re: Manipulation de bit dans un octet ?? on: May 31, 2011, 11:53:27 am
Merci Skywodd pour ton aide

J'ai trouvé une autre solution que d'utiliser un délai
en fait ce que je voulais c'est que le changement s'effectue a chaque passage de l 'état 0 a l’état 1 ou 2 boutons appuyer et je me suis débrouillé  avec ça

La fonction délai me posait quelques problèmes car mon projet est un séquenceur et que je ne maitrise pas le trop le temps
12  International / Français / Re: Manipulation de bit dans un octet ?? on: May 30, 2011, 01:52:02 am
En fait le schéma est super simple:

J'ai 8 boutons relier a un Shift register 4021  => forme mon octet de donnée d’entrée
et 8 led relier a un shift register hc595 => forme mon octet de donnee de sortie

voila un bout de mon programme qui fonctionne tres bien sauf que quand je relache les deux boutons si je ne le fais pas simultanement je repasse en sorti automatiquement sur le valeur du dernier bouton apuyer

Code:
//Checker l'octet en entree
   PreValeurOctet = ValeurOctet;
   
   
   digitalWrite(latchPinIn,1);// On met le 4021 en mode lecture
   delayMicroseconds(20);
   digitalWrite(latchPinIn,0); 
   ValeurOctet= shiftIn(dataPinIn, clockPinIn);// on stock l octet dans une variable
 
 
   // si il y a eu un changement
     if (PreValeurOctet != ValeurOctet || PreValeurOctet1 != ValeurOctet1){
     
     byte nombreOfOne = 0; // variable contenant le nombre de bit à 1
     byte i; // variable d'itération (byte pour economie de ram)
         
      for(i=0;i<8;i++){ // on scan tout les bits
        nombreOfOne += bitRead(ValeurOctet,i); // si bit à on incrémente la variable nombreOfOne
      }
      switch(nombreOfOne){ // selon le nombre de bit à 1 on fait ...

        case 1: // si 1 bit à 1
         StateValeurOctet = ValeurOctet; // on renvoie telle quel le byte
         break; // et on sort du switch
     
        case 2: // si 2 bit à 1
          for(i=0;i<8;i++){ // on scan tout les bits
            if(bitRead(ValeurOctet,i)){ // si le bit est à 1
              break; // on sort de la boucle -> i contient l'emplacement du 1er "1"
            }
          }
          for(i++;i<8;i++){ // on scan les bit aprés le 1er "1"
            if(!bitRead(ValeurOctet,i)){ // si le bit est à 0
              bitSet(ValeurOctet,i); // on le met à 1
            }
            else // sinon
            break; // on sort de la boucle
          }
       StateValeurOctet = ValeurOctet  ; // on renvoie le byte modifié
       break; // et on sort du switch
      } // si plus de 2 bit à 1 on fait rien
    }
 SendToLed (StateValeurOctet);
13  International / Français / Re: Manipulation de bit dans un octet ?? on: May 29, 2011, 11:01:25 am
Merci Beaucoup Skywodd
tu mas permis de beaucoup mieux assimile les fonctions bitread and bitset que je n utilisais pas jusque la

merci encore

mais j ai encore un petit problème. Mes Bits sont en fait s des boutons ce qui fait que quand je relâche les deux boutons je repasse instanement a la valeur du dernier boutons que j'aurai relâche ou alors il faut que je les relâche  simultanément ce qui est quasi impossible
14  International / Français / Re: Montage minimaliste pour ATMEGA 328 avec bootloader ARDUINO on: May 29, 2011, 09:37:47 am
http://www.arduino.cc/en/Main/Standalone
15  International / Français / Manipulation de bit dans un octet ?? on: May 29, 2011, 09:26:17 am
Bonjour,

Je recherche un fonction qui me permettrai de faire ce qui suit:

Je test un octet:
  *si un seul Bit  de l octet est a 1
      j envoie la valeur de l'octet
  * si deux Bit de l octet sont a 1
      jenvoi la valeur de l'octet modifier comme suit : si octet = B00100100 jenvoi => B00111100
                                                                       ou si octet = B00010100 j'envoi => B00011100 ...
                                                                      (en fait je veux "combler" les Bits a 0 qui sont entre
                                                                      les deux Bits a 1 de loctet par des 1
 * si trois ou plus de bits sont a 1
     ne rien faire



Je sais pas si cela est possible en tout cas j'ai cherche pendant quelque heure et le je suis a bout d'idee
dnoc je fais appelle a vous

merci
Pages: [1] 2 3