Se connecter
Se connecter

ou
Créer un compte

ou
FR
EN
Behringer B-Control Rotary BCR2000
(39)
Déposer un avis
Où acheter B-Control Rotary BCR2000 ?
Moins
Aucun revendeur ne propose ce produit pour le moment.
Alerte disponibilité
Il n’y a pas de petite annonce pour ce produit.
Alerte nouvelle annonce

Firmware BCR2000

  • 17 réponses
  • 2 participants
  • 2 647 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
2
...c'est très intéressant comme idée, mais comment faire un dump d'une EEPROM de BCR 2000 et quels en sont les risques?
Autrement j'ai trouvé 2 adresses où trouver des EEPROM neuves, en les remplaçant tu pourrais ainsi garder l'originale.
https://cgi.ebay.com/Lot-of-2-Used-BIOS-Chips-Model-SST-39SF040_W0QQitemZ350283369643QQcmdZViewItemQQptZMotherboards?hash=item518e840cab
https://cgi.ebay.com/Bios-Chip-SST-39SF040-Laptop-HP-Compaq-Presari-Pavilion_W0QQitemZ170409802629QQcmdZViewItemQQptZMotherboards?hash=item27ad373b85

Quel est l'objectif, si ça n'est pas trop indiscret?
3
Alors ce n'est pas ce format d'EEPROM, même si il est possible de faire des adaptateurs.

Mon composant fonctionne, j'ai fait un lecteur/programmeur avec mon arduino (https://www.arduino.cc) et deux composants (registres à décalage). Si j'avais su que j'aurai pu le vider comme ça, j'aurai évidemment fait une copie sur un autre. Mais maintenant c'est trop tard.

Du coup je n'ai pas le programme (le dump) à mettre dessus.

Pour faire un dump, il faut (pour le moment, j'aurai peut être plus d'informations bientôt) démonter le boîtier, sortir le composant, l'insérer dans un lecteur et réaliser un dump.

Les risques :
1) Perte de la garantie à cause de l'ouverture
2) Casser le composant (faut vraiment être un bourrin)
3) Griller le composant (faut vraiment en vouloir)


Si jamais je trouve un moyen non-physique de faire ce dump (méthode logicielle, je posterai ça).

L'objectif  c'est de pouvoir permettre de continuer à faire évoluer ce produit alors que le fabricant ne le fait plus. C'est à dire corriger les bugs, ajouter de nouvelles fonctionnalités, permettre l'adaptation de nouveaux modules, ...



Merci de t'intéresser à tout ça
4
Ouè, ouè, oué...Monsieur fait de l'arduino...
Alors, je pense qu'on est copains !

Quel lecteur d'EEPROM utilises-tu?

1) Perte de la garantie à cause de l'ouverture
_c'est bon pour ça, je l'ai déjà ouverte, pour lui faire des bords en bois.
2) Casser le composant (faut vraiment être un bourrin)
_ça n'est pas le style de la maison.
3) Griller le composant (faut vraiment en vouloir)
_il faut faire attention.

Citation :
L'objectif  c'est de pouvoir permettre de continuer à faire évoluer ce produit alors que le fabricant ne le fait plus. C'est à dire corriger les bugs, ajouter de nouvelles fonctionnalités, permettre l'adaptation de nouveaux modules, ...



Tu ne compte pas rajouter de fonctions?
Genre...séquenceur...par hasard?

Je m'explique...Je me suis aussi lancé dans arduino...pour bidouiller du séquenceur midi et /ou CV, et je ne suis pas encore un as de la programmation en C. Alors je cherche des arduinistes afin d'échanger des tuyaux.
Au départ je comptais faire une interface midi in/midi out afin d'utiliser les boutons de la BCR 2000, pour séquencer. Mais de fil en aiguille et afin de rentrer un peu plus dans l'arduino, j'ai fabriqué une interface midi avec 4 potars / 4 leds / 6 switchs /1 midi out / un trig in.
Et ça marche presque comme je veux.



5
En fait le lecteur je me le suis fabriqué moi même avec l'arduino

http://www.bjonnh.net/share/eeprom_arduino.jpg



Ingrédients:

Une plaque d'expérimentation
Une nappe IDE pour relier l'arduino à la plaque (étamer chaque fil)
Des picots pour bloquer les fils de la nappe
2 registres à décalage de type 74HC595
du fil encore du fil


Et c'est tout. Après il ne manque plus que le petit programme qui va avec.

Je suis en train de préparer un petit document avec tous les détails.

Sinon pour le séquencage j'y ai pensé ça serait tout à fait faisable, mais je préférais l'idée de faire rentrer un arduino (ou autre) dans la boîte pour qu'elle reste telle qu'elle (en plus il y a bien la place dedans) et pour des raisons de temps-réel.
Et quand j'ai besoin de ça, j'avoue que j'utilise PureData, je n'ai pas encore eu la nécessité d'un séquenceur matériel.

Mais bon l'idée de faire un firmware libre pour cet appareil c'est que ça permet toutes les folies (et le microcontrolleur dedans est une belle bête).
6
7
Pure datiste avec ça,!!! Trop beau!
J'ai abandonné l'option soft...Après le taf se remettre derrière un ordi...je préfère le hardware!

Bien frappée ton idée de faire un lecteur d'EEPROM avec arduino, j'avais vu des trucs là dessus, mais de la à le faire, je dis bravo!

Et ça programme en quoi une EEPROM?
8
Elle te sert à quoi cette bête ?
9
En fait ce genre d'EEPROMS, tu as
19 lignes d'adresse pour indiquer quelle case tu souhaite lire/écrire
8 lignes de données
1 ligne pour dire au composant "debout, je te demande un truc"
1 ligne pour activer la sortie
1 ligne pour activer l'écriture (juste besoin de 5V sur celui-là)

D'où la nécessité des registres à décalage (2 pour faire 16 lignes les 3 dernières de poids fort sont données par l'arduino), vu que l'arduino (hormis le méga) n'a pas assez de lignes de sortie.

L'EEPROM, c'est juste une mémoire (flash réinscriptible dans ce cas). Elle contient le programme que va lire le microprocesseur du BCR2000 (un machin OKI compatible avec les ARM7TDMI qu'on trouve dans les consoles de jeux portables genre DS,... ).  Donc ici ça peut se programmer en C ou en assembleur. Mais vu que le code source n'est pas disponible, il va falloir désassembler le programme. Donc au début ça sera de l'assembleur et des petites portions pourront être petit à petit réécrites en C (pour la lisibilité).

Du coup sans programme à lire, rien à lancer. Donc la boîte reste muette, rien sur l'écran, aucune leds, rien ... Et vu que la mise à jour est faite depuis le logiciel, ...

Ce principe est le même que celui des cartes mères de PC (d'ailleurs c'est souvent le même genre de composant, voir même exactement la même référence).

[ Dernière édition du message le 04/01/2010 à 00:48:42 ]

10
Elle doit servir à changer de fonction.
Pour l'instant les 4 potards font 4 pas sur 2 octaves chacun et un off en bout de course.
Les 2 switchs en bas à gauches (3 positions) et celui à leur droite (2 pos) sont quotients multiplicateurs (pot1 x1,/x2/x3, pot2 x1,/x2/x3, et pot3 x1x2 = max 1 octave
)
et le dernier switch fait un reverse.
les 2 en haut ne servent à rien pour l'instant.
Le tout sert, tu l'auras sans compris à piloter un synthé midi.

Malheureusement, je bloque sur un problème...Je voudrais envoyer le beat par un trig, et impossible de trouver la bonne syntaxe pour le réaliser, c'est très frustrant!
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!