Se connecter
Se connecter

ou
Créer un compte

ou
Agrandir
Ajouter ce produit à
  • Mon ancien matos
  • Mon matos actuel
  • Mon futur matos
Behringer B-Control Rotary BCR2000
Photos
1/786
Behringer B-Control Rotary BCR2000

Autre surface de contrôle de la marque Behringer appartenant à la série B-Control

Sujet Firmware BCR2000

  • 17 réponses
  • 2 participants
  • 2 548 vues
  • 2 followers
Sujet de la discussion Firmware BCR2000
Je recherche quelqu'un qui pourrait me faire un dump de l'EEPROM d'un BCR2000 (en indiquant le numéro de version svp).

Je suis en train de bosser sur une méthode pour faire de nouveaux firmwares pour le BCR2000 (et le BCF du même coup). Mais j'ai besoin impérativement d'un dump pour sauver mon EEPROM. Ou alors, si quelqu'un à un BCR qui ne fonctionne plus, il est aussi possible de m'envoyer l'EEPROM (que je peux renvoyer par la suite, l'ensemble étant évidemment à mes frais).

Le composant est un 39SF040, c'est celui qui est monté sur un support à l'intérieur de la bête.





Merci d'avance.




PS1: Non, la mise à jour sur le site de Behringer n'est pas le firmware, mais seulement des bouts de celui-ci
PS2: Non, la mise à jour par midi ne fonctionne pas
Afficher le sujet de la discussion
11
le prog ça donne ça :

// Variables:
byte notea = 0;
byte noteb = 0;
byte notec = 0;
byte noted = 0;
byte vit = 160;
byte tunea = 0;
byte tuna = 0;
byte tuneb = 0;
byte tunb = 0;
byte octa =0;
int AnalogValuea = 0;        // value from the analog input
int AnalogValueb = 0;
int AnalogValuec = 0;
int AnalogValued = 0;
int rvs = 3;
int oct = 4;
int switcha = 0;
int switchb = 0;
int led1 = 2;
int led2 = 13;
int led3 = 12;
int led4 = 11;

void setup() {
//  Set MIDI baud rate:
Serial.begin(31250);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
}

void loop() {
switcha = analogRead(5);
tunea = switcha/113;
tuna = tunea-3;
switchb = analogRead(4);
tuneb = switchb/113;
tunb = tuneb-3;
AnalogValuea = analogRead(0);
//  convert to a range from 0 to 127 = 1023/8 :
notea = AnalogValuea/8;
AnalogValueb = analogRead(1);
noteb = AnalogValueb/8;
AnalogValuec = analogRead(2);
notec = AnalogValuec/8;
AnalogValued = analogRead(3);
noted = AnalogValued/8;
{
if (digitalRead(oct) == HIGH)
octa = 1;
if (digitalRead(oct) == LOW)
octa = 2;
}
{
if (digitalRead(rvs) == HIGH) // >>>000
{

noteOn(0x90, notea+octa*tuna*tunb, 0x45);
digitalWrite(led1, HIGH);
delay(vit);
digitalWrite(led1, LOW);

noteOn(0x90, noteb+octa*tuna*tunb, 0x45);
digitalWrite(led2, HIGH);   
delay(vit);
digitalWrite(led2, LOW);

noteOn(0x90, notec+octa*tuna*tunb, 0x45);
digitalWrite(led3, HIGH);
delay(vit);
digitalWrite(led3, LOW);

noteOn(0x90, noted+octa*tuna*tunb, 0x45);
digitalWrite(led4, HIGH);  
delay(vit);
digitalWrite(led4, LOW);
}
{
if (digitalRead(rvs) == LOW)  // <<<000
{
noteOn(0x90, noted+octa*tuna*tunb, 0x45);
digitalWrite(led4, HIGH);
delay(vit);
digitalWrite(led4, LOW);

noteOn(0x90, notec+octa*tuna*tunb, 0x45);
digitalWrite(led3, HIGH);   
delay(vit);
digitalWrite(led3, LOW);

noteOn(0x90, noteb+octa*tuna*tunb, 0x45);
digitalWrite(led2, HIGH);
delay(vit);
digitalWrite(led2, LOW);

noteOn(0x90, notea+octa*tuna*tunb, 0x45);
digitalWrite(led1, HIGH);
delay(vit);
digitalWrite(led1, LOW);
}
}
}
}
//  plays a MIDI note.  Doesn't check to see that
//  cmd is greater than 127, or that data values are  less than 127:
void noteOn(byte cmd, byte data1, byte data2) {
Serial.print(cmd, BYTE);
Serial.print(data1, BYTE);
Serial.print(data2, BYTE);
}

Je sais pas si c'est très clair (je ne suis pas un accro des lignes d'explications), mais en gros à chaque "if" tu changes de boucle avec une lecture des switch pour pitcher le tout.

PS : il n'y a pas d'article sur arduino sur AF ce qui va vite devenir un manque.
12
je comprends pas trop ton système ni ton problème...
13
Pas grave, moi aussi j'ai du mal à savoir comment t'aider.^^
Je tacherais de faire une vidéo plus parlante.

[ Dernière édition du message le 04/01/2010 à 01:09:43 ]

14
Citation :
tunea = switcha/113;
tuna = tunea-3;



J'aurai direct écrit ça :

tuna = switcha/113 - 3


ça fait gagner du temps et de la mémoire

Citation :

if (digitalRead(oct) == HIGH)
octa = 1;
if (digitalRead(oct) == LOW)
octa = 2;



j'aurai mis un octa = 1+ (digitalRead(oct) == LOW)

comme ça tu ne fais qu'une lecture du port (et ça prends tu temps une lecture) et tu fait des opérations sur bits qui vont bien plus vite.

Essaye quand même mais normalement LOW vaut 0 et HIGH vaut 1 de toute façon.



Ensuite pour ça :
Citation :
noteOn(0x90, noted+octa*tuna*tunb, 0x45);
digitalWrite(led4, HIGH);
delay(vit);
digitalWrite(led4, LOW);

noteOn(0x90, notec+octa*tuna*tunb, 0x45);
digitalWrite(led3, HIGH);   
delay(vit);
digitalWrite(led3, LOW);

noteOn(0x90, noteb+octa*tuna*tunb, 0x45);
digitalWrite(led2, HIGH);
delay(vit);
digitalWrite(led2, LOW);

noteOn(0x90, notea+octa*tuna*tunb, 0x45);
digitalWrite(led1, HIGH);
delay(vit);
digitalWrite(led1, LOW);

Peut être qu'il vaudrait mieux faire un noteOff (velocité à 0 là où tu a mis 0x45). Sauf si tu veux que le son continue.




15
En fait j'avais pas vu ton code juste après.

Juste ton histoire de trig qui m'in-trig. (ok je sors)
16
Merci pour le debuging.
C'est là que je vois que je suis encore une bonne grosse buse en prog!
ça va m'être bien utile!
Pour le trig...j'ai quelques synthés analo du type MS20 korg, et donc pour déclencher une note ils utilisent un système de trig 0/+5v en mode pulse. Je récupère donc l'info sur l'arduino. Mon souci est  de faire l'action suivante:
_quand l'entrée x HIGH
_joue bouton 1
_quand l'entrée x HIGH une 2nde fois
_joue bouton 2
_quand l'entrée x HIGH une 3eme fois
_joue bouton 3
_quand l'entrée x HIGH une 4eme fois
_joue bouton 4
_retour au début de la loop
Je suis sûr que c'est stupide à faire, mais rien à faire...je bloque et je débloque!

Pour ton promer, tu penses que ça pourrais burner des EEPROM de boite à rythme genre drumtracks au hasard? C'est le genre de truc qui pourrais me motiver  à commander un autre arduino pour fabriquer un prommer....même si aux vues de tes explications, je sens que je ne suis pas au niveau!

17
Pour le programmeur d'EEPROM, je pense que oui ça devrait marcher pour tous les types d'EEPROMS parallèles. Après pour les EEPROM série (I2C,SPI, ...) c'est encore plus simple, on a juste à le brancher direct sur l'arduino vu qu'il faut moins de 4-5 fils (alimentation comprise). Après il est aussi possible de se faire un programmeur "universel" et de sortir le microcontrolleur de l'arduino pour le mettre seul sur un circuit. Ca permet de seulement utiliser l'arduino pour programmer (et donc d'avoir à en acheter un par projet).

Pour ton histoire, tu as juste à traduire ton algorithme en code C :

int position = 1;
int trigBounce = 0;
int trigPin = 2;

if (digitalRead(trigPin) == HIGH and trigBounce==0) {
trigBounce = 1; // Pour déclencher qu'une seule fois par impulsion
switch (position) {
case 1:
// Mettre ici ce que tu veux faire quand position = 1
break;
case 2:
// Etc...
break;
case 3:
// Etc...
break;
case 4:
position = 0;  // Je mets à 0 car on incrémente après d'une unité
// Le truc à faire en position 4
break;
}
position++;
}

if (digitalRead(trigPin) == LOW) {
trigBounce = 0 ; // On remet à 0 pour repermettre le déclenchement
}


Il y a plus simple. On peut directement faire faire le travail de debounce par le microcontrolleur si je me souviens bien et utiliser des interruptions (comme ça il déclenche le bout de code de l'interruption à n'importe quel moment). Mais ça devient de la programmation un peu plus complexe.

J'ai pas mon arduino sous la main, donc si tu peux essayer le bout de code.
18
Merci, je vais faire ça ce soir, je n'en peux plus d'attendre!