DYI: MIDI Fußleiste selber bauen?!

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.867
Ja, Jojo übt auf mich einen sehr ermutigenden Flair aus .... es doch wirklich mal zu versuchen, aber zur Zeit lese ich mich noch ein ... muss noch abwägen, ob das überhaupt für mich machbar wäre ... als absolute Vollnull auf dem ganzen Gebiet. Elektronisch, wie Programmiertechnisch ....

Welche Schalter bräuchte ich? Müssen es 2PDT oder 3PDT sein? Oder langen 1PST? Kann mir wer da was zu sagen? Welchen von diesen hier nehmen? -> http://www.musikding.de/Fussschalter

LED`s würde man ja direkt vom Board (Outputs) aus steuern, bräuchten also keinen Anschluss am Schalter, oder? Glaube langsam auch, dass OSons Wahl mit dem Arduino Mega die bessere Wahl ist, als das Uno - wegen der Ausbaufähigkeit für vele Schalter ...
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
Der 1PST Fusstaster sollte der richtige sein.. Zumindest, was die nicht Multiplexer-Lösung angeht. Aber ich denke auch da dieser reichen. Auf jeden Fall Taster und nicht Schalter!
 

Jojolamenace

Member
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Apr 1, 2013
Beiträge
92
Achtung: das Datenblatt vom 74HC595 https://www.sparkfun.com/datasheets/IC/SN74HC595.pdf gibt einen max. Strom Vcc/GND Strom von 70mA und eine nominalen Strom pro Ausgang von 6mA an. Ich würde nicht über 6mA pro LED gehen (wir wollen ja keine unnötigen Rauchentwicklungen verursachen). Ich würde die Schaltung wie in http://arduino.cc/en/Tutorial/ShiftOut mit 220Ohm Widerständen nicht nachbauen, da: der Spannungsabfall an LED (rot) beträgt 1.6V (oder 2.1V) --> I = (5-1.6)/220 = 15.5mA (viel zu gross), besser R = (5-1.6)/0.006A = 566Ohm (560Ohm) oder (483Ohm, d.h. 470Ohm @ 2.1V) nehmen. Wenn du mehr Strom für die LED (d.h. grössere Leuchtkraft) brauchst, geht es wahrscheinlich nicht ohne Transistor (z.B. BC107 http://www.b-kainka.de/Daten/Transistor/BC108.pdf) vor der LED (Basiswiderstand 1kOhm und Kollektorwiderstand gemäss Formel R = (5-U_F-U_CEsat)/I_F, mit U_F LED Spannung (1.6 oder 2.1V), U_CE Transistor-Sättigungsspannung ca. 0.2V (für BC107) und I_F LED Strom).
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
Mein Arduino wurde gerade versendet! :) Jetzt fehlt mir nur noch eins... Zeit... Wo kann man die kaufen? Kennt da jemand eine gute Quelle? :cool:
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
So, mein Arduino ist da und ich habe am WE schon ein bisschen herumgespielt... Mit Erfolg! Meine Freundin konnte meine Begeisterung nicht ganz verstehen, als ich mich freute, dass sich die Programmnummern ändern, wenn ich auf einen Button drücke, aber ich hab mich gefreut! :) So, mal von vorne....

Ich habe vor, als erstes ein paar Tests zu machen um das Arduino und die MIDI-Kommunikation zu verstehen. Daher möchte ich das alles in kleine Teilschritte aufsplitten. Der Aufbau sollte möglichst einfach gehalten sein. Also nur 1 Button usw....


MIDI-BEFEHLE SENDEN

1. Per Schalter die Programme/Presets ändern --> Program Changes (PC) senden
2. Per Schalter Controller-Werte senden
3. Per Expression-Pedal Controller-Werte senden


EMPFANGEN (MIDI-Messages vom Axe-FX empfangen und auswerten)

3. Effekt-Block Status empfangen und per LED anzeigen (an/aus/nicht vorhanden)
4. TAB-Tempo Messages empfangen und per LED anzeigen
5. Tuner-Messages


ADD-ONs

Das macht alles dann Sinn für eine komplette MIDI-Leiste und umfangreicher Software.
6. Programm-Nummer anzeigen oder falls möglich auch größere Displays ansteuern
7. Programmieren des MIDI-Boards inkl. Speichern der Einstellungen


So der Plan.... :)



Und Punkt 1. ist erledigt! :) Punkt 2 im Grunde auch, aber dafür hab ich noch kein schönes Programm geschrieben. Ich habe bisher alles mit meinem alten Boss GX-700 getestet. Ich habe mich noch nicht ans Axe-FX getraut! ;-) Aber im Detail.... Ich habe diese Schaltung mit dem Arduino umgesetzt:

Steckplatine.jpg

Und folgendes Programm dazu geschrieben.

Code:
/*
  AxeFX.de DIY-MFC
  
  Test 1: Senden eines Program Change Befehls

*/


byte ledPin = 13;      // (OnBoard)-LED zur Kontrolle - leuchtet beim druecken
byte button = 42;      // Pin-Nummer des Test-Buttons

byte stdChannel = 10;   // MIDI-Kanal auf dem gesendet wird (in dem Fall Kanal 10)


byte buttonState = 0;
byte lastState = 0;
byte counter = 0;




void setup() {
  //  MIDI baud rate setzen:
  Serial.begin(31250);

  pinMode(button, INPUT);		// Button PIN
  pinMode(ledPin, OUTPUT);		// LED-Pin ist 13 => OnBoard LED
  digitalWrite(ledPin, LOW);		// LED ausschalten

  // Sende Test-Initial-PC
  sendProgramChange(stdChannel, 39);
}




void loop() {
  // Button auslesen
  int buttonState = digitalRead(button);
    
  // Ueberprüfen, ob der Status des Buttons sich geaendert hat
  // (von gedrueckt zu nicht gedrueckt oder umgekehrt)
  // Nur dann soll etwas passieren. Andernfalls werden staendig PCs gesendet
  // wenn der Button gedrueckt wird.
  if(buttonState != lastState) {
    // Aktueller Button-Status merken
    lastState = buttonState;

     
    if(buttonState == HIGH) {
       // Wenn der Button gedrueckt wurde...
      counter++;		// ... PC-Zaehler hochzaehlen!

      //  Vor einem Ueberlauf pruefen
     //  als  Beispiel: max. bis Programm 11
      if(counter > 10) {
        // ...dann Zaehler zuruecksetzen
        counter = 0;
       }
      
      // PC senden
      sendProgramChange(stdChannel, counter);


      // on-board LED einschalten
      digitalWrite(ledPin, HIGH);
      delay(200);	// kurze Pause zum entprellen des Tasters (manchmal sendet dieser falsche Daten)

    } else {

      // bei nicht gedruecktem Button LED deaktivieren!	
      digitalWrite(ledPin, LOW);
    }
    
  }
}



// ==== MIDI FUNCTIONS ====


/*
**	Sendet einen Program Change Befehl
**
**	Arguments:
** 	--------------
**	midiChannel		MIDI-Kanal-Nummer auf dem gesendet werden soll
**	prgNo			Programm zu welchem gewechselt werden soll
*/
void sendProgramChange(byte midiChannel, byte prgNo) {
  Serial.write(0xc0 + midiChannel - 1);		// Program-Change Befehl senden (verknuepft mit dem uebergebenen MIDI-Channel
  Serial.write(prgNo);					// Programm-Nummer senden
}

In der Schaltung ist ein zusätzlicher Widerstand (10kOhm) am Schalter. Darüber werden Einstreuungen eliminiert, die entstehen und so vorgaukeln, dass der Schalter gedrückt wurde. Das habe ich aus einem Arduino-Tuorial gelernt! ; -)

Im Loop wird immer auf den letzten Button-Status geprüft, damit hier nur ein Befehl gesendet wird, wenn der Button gedrückt wird. Andernfalls würde andauernd ein PC gesendet werden. Zusätzlich ist nach dem Senden des PC-Befehls noch ein Delay (200ms) eingefügt. Mein kleiner Test-Taster sendet ab und an mal kurzzeitig kein Signal, obwohl ich ihn gedrückt halte. Das Arduino-Programm würde das dann als kurz loslassen und wiederdrücken interpretieren und sendet zwei PCs ganz kurz hintereinander. Zum Entprellen des Schalters habe ich das Delay eingefügt.

Das empfinde ich aber nicht als besonders gute Lösung, da das Programm hier halt immer kurz angehalten wird und das System träger reagiert. Gibt es hier nicht evtl. eine Lösung mit einem Kondensator um diesem Verhalten entgegenzuwirken? Oder kommt dieses Verhalten tatsächlich nur, weil mein kleiner Taster so schlecht ist?



AUSBLICK

Zur Planung eines kompletten MIDI-Boards habe ich mich auch bereits ein paar Gedanken gemacht. Wenn das Ganze so umgesetzt werden sollte ählnich der MFC, sollte pro Taster eine LED vorhanden sein, die rot, grün und ausgeschaltet sein kann (Status-LEDs für AUS, EIN, NICHT VORHANDEN). Solche LEDs gibt es, das ist nicht das Problem. Allerdings haben diese LEDs 3 Beinchen und nicht nur 2 wie die normalen LEDs. Aktuell plane ich noch vollständig ohne Multiplexer zu arbeiten, einfach, weil das Arduino bereits eine Menge Anschlüsse besitzt, aber auch, weil ich (noch) keine Ahnung vom Multiplexing habe. Aber das kann sich ja noch ändern.

Daher die Frage: Gibt es eine Methode, wie mit nur einem PIN drei Zustände an einer LED darstellen kann? Das wäre dann perfekt. Ansonsten gehen recht viele PINs verloren allein für die Status-LEDs.

Zusätzlich gehen noch PINs verloren, wenn Displays eingebaut werden sollen, wie z.B. dieses hier. Das benötigt 4 PINs.


Zusammenfassend kann man sagen, dass man mit einem Arduino Mega 54 Digitale In oder Outs hat und 16 Analoge-Inputs.

Die 16 Analogen-Inputs würden (wenn ich das richtig verstehe!!) max. 16 Expression-Pedale ermöglichen.


Die 54 Digitalen In/Outs sind für MIDI-Transmissions, Switche und LEDs aufzuteilen.

Pin 0+1 fallen dort weg für die MIDI-Transmissions.
Pin 2-27 könnte man für die LEDs nutzen
Pin 28-53 könnte für die Switche genutzt werden.

Dies würde eine MIDI-Leiste mit 26-Buttons mit 26 (einfarbigen) LEDs bedeuten. Die LEDs könnten in diesem Beisiel nur ein oder ausgeschaltet sein. Hier können keine 3-Status wie bei der MFC angezeigt werden!!!

Soll noch ein kleines Display (s.o.) genutzt werden, dann gehen ein paar Pins verloren. In meinem Beispiel würde für eine 4-Stellige 7-Segment Anzeige 4 Pins (bedeutet 2 Buttons und 2 LEDs) benötigt werden.


Ich finde das schon krass gut, was mit diesen recht einfachen Mitteln möglich ist!!! :)

Bei Rot/Grün LEDs wäre folgende Kombination möglich:

Pin 0+1 fallen dort weg für die MIDI-Transmissions.
Pin 2-33 könnte man für die LEDs nutzen
Pin 34-49 könnte für die Switche genutzt werden.
Pin 50-53 wären dann sogar noch frei für ein Display

Dies würde eine MFC mit 16 Switche bedeuten.


Ich bin schwer begeistert!!! :) Falls ich irgendwelche Fehler gemacht haben sollte, korrigiert mich bitte! :) Ich halte euch hier auf dem laufenden.


Meine Fritzing-Files für das Arduino gibt es übrigens hier: http://cloud.axefx.de/public.php?service=files&t=863e5d41055241f029a323b4e3ca3454
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Hallo Oson,

habe mal schnell ein paar Dinge auf einen Zettel gekritzelt. Ich hoffe du kannst was damit anfangen. Wenn nicht, schick mir ne PN, dann können wir telefonieren. Alles ganz einfach...

entprellen.jpgdual leds.jpg

Ich persönlich würde über I2C Porterweiterungen nachdenken (siehe Link). Da kannst du bis zu 8 Porterweiterungs ICs mit jeweils 16 digitalen IOs dran hängen. Da benötifst du nur zwei Leitungen an deinem Mikrocontroller für. Das sollte reichen...

Links:
http://www.reichelt.de/DUO-LEDs-Blink-LEDs/LED-5-RG/3/index.html?&ACTION=3&LA=2&ARTICLE=10234&GROUPID=3022&artnr=LED+5+RG
http://www.reichelt.de/PCF-I-C-Bus-Controller/PCF-8575-T/3/index.html?ACTION=3&GROUPID=2942&ARTICLE=70030&SHOW=1&START=0&OFFSET=16&
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
Oh cool! Danke! Werde ich mir mal besorgen und auch mit herumspielen! :) Erscheint mir sehr logisch! :) Danke!
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
@wildlive: gibt es von dem PCF8575 evtl. auch einen vergleichbaren IC bei musikding.de? Ich wollte da eh Schalter bestellen, Widerstände und LEDs haben die auch. Da würde das eigentlich noch mit in die Bestellung passen! :)
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
@Oson

bei musikding.de habe ich keine Alternativen gefunden. Auch die dual color LEDs sind dort nur Dreibeiner. Aber dafür haben die schöne LED Fassungen.

Du wirst wahrscheinlich nicht umher kommen bei mehreren Anbietern zu bestellen.

Wenn du die Schaltung auf ein Prototypenboard aufbauen möchtest, dann brauchst du auch noch ein SSOP to DIP Adapter wie z.B. diesen hier
http://shop.anvilex.de/index.php?route=product/product&product_id=2547&gclid=CN6Dur7yu7oCFYVc3godtD4AUw
und die passenden Stiftleisten dazu
http://www.reichelt.de/Stiftleisten/SL-1X50G-2-54/3/index.html?&ACTION=3&LA=2&ARTICLE=19508&GROUPID=3220&artnr=SL+1X50G+2,54

Hast du schon mal SMD gelötet? Wenn nicht, auch ganz einfach, wenn man weiß wie ;) Kann ich dir wenn nötig dann erklären.



Als Unterstützung für deine Software würde ich z.B. die Bibliotheken von Peter Fleury verwenden.
http://homepage.hispeed.ch/peterfleury/avr-software.html
Dort gibt es eine I2C Bibliothek für die Porterweiterungen, eine LCD Bibliothek für ein evtl. Display und eine UART Bibliothek, die sich natürlich auch für MIDI eignet.

Wie die sich mit den Arduino Bibliotheken vertragen, kann ich dir allerdings nicht sagen. Ich arbeite wenn mit den AVRs pur. Das Arduino Zeugs hat für mich immer den Touch von Lego Mindstorms :eek: (duck und wech...)

Hinweis zu I2C:

Bitte nicht die zwei Pullup Widerstände vom Bus vergessen, denn dann geht da gar nix.



Hir noch zwei Links, um dich da ein wenig schlau zu machen...

Einiges Wissenswertes über den I2c Bus:
http://www.rn-wissen.de/index.php/I2C#Weblinks

Sammlung an I2C ICs:
http://www.rn-wissen.de/index.php/I2C_Chip-Übersicht
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
Ich danke Dir! Perfekt! :)

Naja, Arduino fühlt sich auch fast an wie Lego. ;-) Aber das ist für mich jedenfalls greifbar! hihi.... AVR kommt dann danach. ;-)
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.867
Wollte nur kurz sagen: Ich bin noch da und verfolge mit Spannung den thread! Besonderen Dank auch an OSon, wildlive und Jojolamenace und die große Bitte: Tauscht das Wissen nicht per PMs ... sondern hier öffentlich für alle. Danke im Voraus :) Ich darf ehrlich gestehen: OSon und wildlive sprechen zwar jetzt schon oft auf einem für mich nicht mehr nachvollziehbaren Niveau, aber ich werde euch in Zukunft wohl mit "Greenhorn"-Fragen löchern: Mein Arduino Einsteiger Set ist heute versendet worden :) OSon sein erster Erfolg hat mir den Rest gegeben auf den "Kaufen" Button zu drücken. Wildlive`s und Jojo`s offensichtlichem Fachwissen macht Mut, dass wir da was ordentliches hinbekommen ;) Und ganz ehrlich: Ich würde mich nicht wundern, wenn DIESE Teile auch auf Arduino aufbauen ... oder was meint Ihr? :devilish:
 
Zuletzt bearbeitet:

Andy

Well-known member
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Okt 21, 2012
Beiträge
8.738

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
Yeah! Cool! :)

Es gab noch keine PMs! Jede Kommunikation lief bisher über diesen Thread.
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Das Angebot Telefonseelsorge zu betreiben, hatte auch sicher nicht den Zweck euch Know How vorzuenthalten. Manchmal hängt es allerdings nur an ein paar Kleinigkeiten, die mündlich viel schneller auszuräumen sind, da die Durchlaufzeiten der Kommunikation im Sekundenbereich liegen:D. Das Ergebniss sollte hier natürlich wieder rein. Ich wollte dem OSon nur Frust vom Leib halten und etwas mehr Zeit mit seiner Holden verschaffen.

Das Ganze war allerdings gar nicht nötig, da der Oson das auch ohne meine Hilfe hinbekommt:rock:
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Zur Platinenherstellung:

Wenn es richtig günstig sein soll -> China...

Persönlich unterstütze ich gern auch mal die heimische Wirtschaft und bezahle auch einen Euro mehr dafür. Da habe ich sehr gute Erfahrung mit der Firma Richter aus Schmallenberg gemacht. Einfach die Eagle Board Datei hinschicken und den Rest machen die...
http://www.richter-elektronik.de/

Eine gute Übersicht über Anbieter findet man auch hier (mit Preisvergleich aus 2010)
http://www.mikrocontroller.net/articles/Platinenhersteller

Zu Eagle:

super Tutorial auf Youtube: http://www.youtube.com/watch?v=YoVen9os4Sk

Herstellerseite, auf der man auch weitere Bibliotheken für viele weitere Bauteile bekommt: www.cadsoft.de
Falls ein Bauteil nicht dabei ist oder man es in dem Wust von Bibliotheken nicht finden kann, einfach "Bauteilname+Eagle+Library" googeln. Da kommt man meist auf mikrotontroller.net, wo sehr viele Eagle Anwender unterwegs sind und selbst schon mal dieses Bauteil gesucht haben...
 

Andy

Well-known member
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Okt 21, 2012
Beiträge
8.738
Da habe ich sehr gute Erfahrung mit der Firma Richter aus Schmallenberg gemacht. Einfach die Eagle Board Datei hinschicken und den Rest machen die...
http://www.richter-elektronik.de/
.
Richtig, mit denen hab ich auch schon gute Erfahrungen gemacht. Ich bin mir nicht mehr ganz so sicher, ab welcher Stückzahl es sich dort "lohnt" anzufragen.
Ich ging jetzt her davon aus, dass am Anfang mal eine oder zwei Platinen anstehen und da "könnte" (muss nicht!) pcb-pool einfach sein.


Gruß

Andy
 

OSon

Administrator
Teammitglied
Axe-Fest 2023 Teilnehmer
Axe-Fest 2022 Teilnehmer
Axe-Fest 2020 Online Teilnehmer
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Sep 29, 2012
Beiträge
2.578
Wunderbare Tipps! Danke! Aber erstmal alles mit der Ruhe.. Ob wir überhaupt eine Platine herstellen lassen müssen oder ob das hier mehr eine Bauanleitung zum Selberbasteln wird... Wir werden sehen! :)
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.867
uiuiuiuiuiui .... nach ewigem hin und her hab ich das Ding zum laufen gebracht ;) Ich weiss zwar nicht, warum es geht, was die Schaltung zu bedeuten hat, und welche Widerstände ich da verbastelt habe (hust), geschweige warum. Weder ist mir klar, warum mein Schalter (mit 4 Pins) nicht das macht, was ich will, noch wie Basti`s Code funktioniert, aber .... TATAAAAAA ... irgendwas geht ;)

[video=youtube;dIs-Xt1zd-U]http://www.youtube.com/watch?v=dIs-Xt1zd-U&feature=youtu.be[/video]

Coole Sache! Aber ... noch nicht ganz ausgereift ... *grins. Danke euch allen. Vor allem Basti, dessen Schaltung ich 1:1 nachgebaut habe, dessen Code ich genutzt habe, dessen geistigen Eigentums ich mich ermächtigen musste, weil: Ich nickesse Plan habe von irgendwas .... :rolleyes:

Trotzdem: Coole Sache! Mal schauen, was noch kommt .... Nach diesem ersten kleinen Erfolg bin ich optimistisch!
 
Zuletzt bearbeitet:
Oben
mainframe-fourhanded
mainframe-fourhanded