DYI: MIDI Fußleiste selber bauen?!

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Da ich mit dem Sketch-Code derzeit null weiterkomme und nun wohl geduldig auf OSons Software-Entwicklung warte, die laut seiner Vorhaben-Beschreibung nahezu perfekt meine Bedürfnisse decken würde, wende ich mich mal dem Schaltungslayout zu, bei dem ich noch ein paar Fragen an euch hätte:

Soweit ich das verstanden habe hängen alle Schalter und die Midi Buchse IMMER an GND und 5V und einem dedizierten I/O PIN auf dem Board. Ein Widerstand verhindert "Kleinstströme", die ungewünschte Schaltvorgänge auslösen könnten.

In OSons Schaltungsplan hängt dabei der Widerstand für die MIDI Buchse am GND, für den Schalter am 5V.
Frage 1: Ist das prinzipiell egal, wo der Widerstand greift? Oder hat das was damit zu tun, dass die MIDI Buchse eben am Ausgang hängt, der Schalter aber am Eingang?

Am Poti hängt in OSons Beispiel KEIN Widerstand. Ich hatte mal Spaßeshalber einen drangehängt mit dem Ergebnis, dass das Poti nicht mehr Werte von 0 bis 1023 aussendete, sondern der Wertebereich stark eingeschränkt wurde. Das habe ich dann folgend interpretiert: Das Poti ist nix anderes, als ein regulierbarer Widerstand. Hängt man noch zusätzlich einen Widerstand (mit festem Wert) dazu, verringert sich die Werteskala um den Bereich, den der feste Widerstand "blockiert".
Frage 2: Habe ich das richtig verstanden?
Frage 3: Am Poti ist also kein zusätzlicher Widerstand vonnöten, da es ja selber einen darstellt? Oder weil er an einem analogen Input hängt?

Erweitere ich OSon Schaltung um weitere Schalter, würde das ganze folgend aussehen:

Schaubild 1
Frage 4: Da alle Widerstände je Schalter am selben GND hängen: Könnte man sich diese nicht einfach alle sparen und hängt stattdessen einfach nur EINEN Widerstand in die GND-Leitung?!:

Schaubild 2
Frage 5: Welchen Widerstand nehmen? Oft lese ich 220Ohm. Manchmal 1KOhm, manchmal gar 10KOhm.

Wenn die Widerstände "Kriechströme" verhindern ( = Entprellen?!), addieren sich diese pro Schalter, der am selben GND hängen?
Frage 6: Sprich: Müsste Schaubild 2 einen Widerstandswert haben, der dem Gesamtwiderstand aller zuvor verwendeten Einzelwiderstände (Schaubild 1) haben? Ich denke NEIN, denn dann wäre der vielleicht so hoch, dass selbst der Stromdurchfluss bei gebrücktem Schalter zu niedrig wäre, um den Widerstand zu überwinden?

Soweit erst einmal ... :rolleyes:
Euer Mega-Greenhorn
 
Zuletzt bearbeitet:

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.586
Ich kann da kaum eine Frage von sicher beantworten... Nur, dass ein Poti halt nichts anderes ist als ein regelbarer Widerstand. Wenn Du dann noch einen Widerstand davor schaltest, muss kriegst du nie den vollen ausschlag. Aber vermutlich können das unsere Experten das genauer erklären! :)

Wegen Schaltung: Ich hätte es aber genauso wie Du in Schaubild 1 gemacht. Habe es aber noch nicht gemacht, weil ich noch auf meine Schalter warte... achja und die Zeit....


Und da Du so ungeduldig wartest, poste ich mal einen Link zum Repository. Für Dein Vorhaben (nur CCs vermutlich) wird das wohl reichen. Ob der Code allerdings tatsächlich funktioniert, kann ich noch gar nicht sagen. Ich habe ihn bisher nur runtergeschrieben. Er wird normal kompliliert, aber ob er das tut, was er tun soll konnte ich noch nicht testen! ;-) Naja, jedenfalls kriegst Du alles hier: https://github.com/oson/midi_board_ONE
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Und da Du so ungeduldig wartest, poste ich mal einen Link zum Repository. Für Dein Vorhaben (nur CCs vermutlich) wird das wohl reichen. (...) Naja, jedenfalls kriegst Du alles hier: https://github.com/oson/midi_board_ONE
uiuiuiui :) Danke Basti! In der Tat, ich bin derzeit eigentlich nur auf CCs scharf ;)

Über diese Midi Library bin ich auch schon gestolpert, aber ich verstehe nch nicht ganz, wie das zu laden ist?

Die "links" im eigentlich Sketch:

// ==== 3rd Party Libraries
#include <MIDI.h> // Arduino-MIDI-Library




// ==== Button-Class
#include "Button.h"


// ==== Setup-File: Edit for you own MIDI-Board
#include "setup.h"

müsste ich ja irgendwie einladen und beim Sketch rüberschicken zum Board den Inhalt der drei Librarys mitschicken, korrekt?
Aber wie???? Macht dass die Arduino Software von alleine?


[EDIT] ... hmmm ... aha ... ok ... hmmm .... also es müssen irgendwie ALLE diese files auf das Arduino Board? ... OK, ich versuche mich mal einzulesen und starte mit der README :applause:...

 
Zuletzt bearbeitet:

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.586
uiuiuiui :) Danke Basti! In der Tat, ich bin derzeit eigentlich nur auf CCs scharf ;)

Über diese Midi Library bin ich auch schon gestolpert, aber ich verstehe nch nicht ganz, wie das zu laden ist?

Die "links" im eigentlich Sketch:

// ==== 3rd Party Libraries
#include <MIDI.h> // Arduino-MIDI-Library




// ==== Button-Class
#include "Button.h"


// ==== Setup-File: Edit for you own MIDI-Board
#include "setup.h"

müsste ich ja irgendwie einladen und beim Sketch rüberschicken zum Board den Inhalt der drei Librarys mitschicken, korrekt?

Aber wie???? Macht dass die Arduino Software von alleine?

Du musst dir die MIDI-Library runterladen. Und wenn du das entpackst, bekommst du ein Verzeichnis "MIDI". Das musst Du in Dein Library Verzeichnis kopieren. Das liegt unter Windows unter C:\Programme_x32\Arduino\libraries\

Dann Arduino-IDE neustarten und schon klappt das!
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Du musst dir die MIDI-Library runterladen. Und wenn du das entpackst, bekommst du ein Verzeichnis "MIDI". Das musst Du in Dein Library Verzeichnis kopieren. Das liegt unter Windows unter C:\Programme_x32\Arduino\libraries\

Dann Arduino-IDE neustarten und schon klappt das!
Ja, das hatte ich gestern mal gemacht. Das scheint da zu sein. Nur: Wenn ich dann Deinen Sketch rüberschicke, in dem ja auf die Library verwiesen wird, zieht sich dann der Sketch auch gleich die MIDI Library, die ich nun ja als Library in die PC Software eingespiest habe mit rüber auf das Board???? Ich kann ja immer nur EINEN SKETCH auf das Board senden, was dann alles vorherige im Speicher des Arduino-Boards überschreibt, korrekt?

Muss also diese Librarys (rot gekringelt)


in die PC Software als Library einspeisen, Software neu starten und dann den Sketch "midi_board_ONE.ino" aufs Board schicken, und dabei werden dann auch dir entsprechenden Librarys Informationen mit auf das Board "gezogen" ? Ist das richtig?

Was ist diese Button.cpp Datei? Sind "Classes" immer Librarys? Muss das auch "rüber" ?
 
Zuletzt bearbeitet:

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.586
Korrekt. Dadurch, dass Du die Lib in Deiner Arduino-Umgebung installiert hast, findet sie Arduino, kompiliert (übersetzt) den Code und nutzt alles, was er aus der Library benötigt. Und das wird dann ans Arduino gesendet! :)
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
OK, dann versuche ich mich mal daran: Erstmal Testaufbau mit zwei Schaltern, konfiguriere dann die files entsprechend und dann schaun mer mal, ob ich da was zum laufen bekomme ;)
 

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.586
Huaaa!!! HALT!!! Hast Du Deinen Post editiert????

Die MIDI-Library muss ins Arduino libraries Verzeichnis! MEHR NICHT!!!

Alle anderen Dateien sind von mir und (noch) keine Libraries. Die einfach in einem Verzeichnis lassen, midi_board_ONE.ino im Arduino-Editor öffnen und übertragen... Du kannst auch links oben auf den Haken klicken und schauen, ob er alles (ohne es aufs Arduino zu übertragen) bei Dir kompilieren kann. Wenn dem so ist, kann der Compiler alles finden! Dann kannst Du es auch übertragen! :)

Bin ja mal gespannt, ob das klappt, was ich da ohne Arduino zusammengeschnippselt habe! hihi...
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
jajajaja ..... hmmm .... ich gugg mal, wie weit ich komme ;)
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
OK, im PC Ordner "midi_board_ONE_mh_v1" liegt nun:

- midi_board_ONE_mh_v1.ino
- Button.h
- setup.h

Änderungen setup.h :

/** Numbers of Buttons of the MIDI-Board. If you change this value, you have to put more/less lines
* of the Button-Definitions in the seup-function. */
#define MAX_BUTTONS 2 // Numbers of Buttons of the board

Änderungen midi_board_ONE_mh_v1.ino :

// Button-Definitions:
// Button-Pin LED-Pin Funkt. CC/PC High Low, init. Ctrl. State
buttons[0] = new Button( 2, 13, "CC", 7, 127, 0, LOW );
buttons[1] = new Button( 3, 13, "CC", 9, 127, 0, HIGH );


//alle anderen Button-lines habe ich gelöscht. LED wäre bei beiden 13 (Board LED), sollte ja egal sein, oder?

Kompile ich nun per überprüfen (Haken klicken) erhalte ich folgende Fehlermeldungen:



Was mache ich falsch? MIDI Library ist vorhanden ...
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
OK OK OK, habs: Button.cpp musste auch noch in den Ordner. Jetzt geht es (FAST):

// Button-Definitions:
// Button-Pin LED-Pin Funkt. CC/PC High Low, init. Ctrl. State
buttons[0] = new Button( 2, 13, "CC", 7, 127, 0, LOW ); // Chorus bei Programmstart AUS
buttons[1] = new Button( 3, 14, "CC", 9, 127, 0, HIGH ); // Delay bei Programmstart AN


Die LED vom Chorus läuft syncron zum aktuellen Schaltzustand! Wenn Chorus an leuchtet auch die LED dauerhaft. wenn Chorus aus: LED erlischt. GEIL!

Der Button in der ersten Reihe (hier Chorus) geht wie gewünscht!

BUG:
Der Button in der zweiten Reihe verliert nach dem ERSTEN Schaltvorgang, nachdem die Software auf das Board überspielt wurde seine Wirkung.

Bsp 1:
buttons[1] wird als allererstes gedrückt: Schaltvorgang (anschalten oder ausschalten, je nach init. Ctrl. State) wird vollzogen. Wiederholtes draufdrücken macht genau NIX mehr (kein MIDI IN Signal mehr am G-Major).

buttons[0] verrichtet seinen Dienst, wie programmiert.

Bsp 2:
buttons[0] wird als allererstes gedrückt: Schaltvorgang (anschalten oder ausschalten, je nach init. Ctrl. State) wird vollzogen.
Wird anschliessend buttons[1] passiert schon nichts mehr.

Sprich: nachdem der erste MIDI befehl gesendet wird erlischt die Funktion von buttons[1].

Trotzdem: Hut ab Basti! Wieder ein riesen Schritt nach vorne! Es wird ... ;) Vor allem brennt das Lämpchen jetzt dauerhaft syncron, das war in den ersten testbeispielen noch nicht so, da brannte die Led immer nur solange der Schalter gedrückt und gehalten wurde ;)

Bug 2:
Egal welche Programmnummer hier rot markiert im setup.h eingegeben wird: Mein G-Major geht immer auf PC 003 ....

#define START_PROGRAM_NO 0 // Start Program-Preset-No at initialization


---------------

Versuche jetzt mal einen CC# Button und ein PC Button gleichzeitig ...
 
Zuletzt bearbeitet:

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.586
Ah... OK... Ja, ALLE Dateien müssen vorhanden sein! Ich dachte, das hättest Du auch so gemacht...

Aber wow, dass das schon so weit funktioniert! Ohne Test! :) Ich scha mal... Kann das gerade nicht wirklich erklären...
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Ah... OK... Ja, ALLE Dateien müssen vorhanden sein! Ich dachte, das hättest Du auch so gemacht...

Aber wow, dass das schon so weit funktioniert! Ohne Test! :) Ich scha mal... Kann das gerade nicht wirklich erklären...
Du bist der geilste! :applause:
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Zu deinen Fragen 1-6:

eigentlich müssten wir uns mal mit einem Blatt Papier und einem Fläschchen Bier zusammen setzen...

Also die 220 Ohm Widerstände von der MIDI Beschaltung haben nichts mit den Widerständen der Taster zu tun.
siehe z.B.

http://www.wiesolator.de/index.php?area=Musik&topic=MIDI-Einstieg&stopic=MIDI und AVR


Bei den Tastern braucht jeder Taster seinen eigenen Widerstand, da ja auch jeder Taster einen unterschiedlichen Zustand haben soll. Ein gemeinsamer PullUp oder Pulldown würde alle Taster "Oder" Verknüpfen. D.h. du drückst einen und alle werden als gedrückt erkannt.

Deine zweite Schaltung solltest du so nicht aufbauen, da du beim Drücken eines Tasters einen Kurzschluss zwischen 5V und Masse erzeugst. Je nach Art der Spannungsversorgung kann das ungesund für deinen Aufbau werden:D
 

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.586
Ich vermute, ich habe einen Denkfehler in der setup.h

#define MAX_BUTTONS 2 // Numbers of Buttons of the board


Ich glaube, hier läuft was nicht ganz sauber... :) Das muss ich nochmal fixen! ;-)
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Zu den Fehlermeldungen:

In .h Dateien stehen nur Definitionen für den Compiler, das da etwas existiert was du so und so benutzen kannst.

Die Umsetzung selbst steht in den .cpp Dateien.

Der Compiler übersetzt alle .cpp Dateien einzeln und der Linker fügt dann diese Übersetzungen zusammen. Wenn jetzt für die Umsetzung einer Funktion eine .cpp Datei nicht übersetzt wurde, findet der Linker nichts auf das er referenzieren könnte.

Also zu jeder .h Datei gibt es auch eine .cpp Datei.

Ausnahmen sind hier nur die in der Umgebung schon vorkompilierten Standardbibliotheken.
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Danke wildlive! Und OSon erst !!!!! Et läuuuuft!!!!! Man, ich lerne immer mehr! Eben mit OSon in der shoutbox gechattet und Probleme gelöst ... wir bekommen nun im Test 2 Schalter gleichzeitig an den Start! 2 CCs oder 2 PCs oder 1 CC und 1 PC ... und es funktioniert alles ziemlich gut!!!!! Das wird langsam echt ernst ;) Leute, mir kamen eben fast die Tränen ... das ist der Hammer!


@wildlive: OK, alle Schalter über einen GND Widerstand ist also gestorben. Schaltbild 1 ok???? Das mit dem Bier machen wir sowieso! Incl. Block und Stift .... schade, dass es noch so lange hin ist bis in den April ;) Vielleicht gibts da dann aber schon erste Prototypen unserer eigenen DYI Midi-Controller zu bestaunen :) Ich bin schwer begeistert!
 

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.586
Ich habe mal im GitHub den Fehler gefixed.... glaube ich... ;-) Sitze im Zug und hab es noch nicht getestet... :) Aber ich denke mal, das sollte es gewesen sein...
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
So, hier der derzeitige Stand dank Basti`s Software, die ich nur entsprechend an mein Setup angepasst habe:


Geil, oder? Basti ist der geilste :rolleyes:
 
P

Pacosipulami

Guest
Sitze im Zug und hab es noch nicht getestet... :)
..und ich sitze immer noch in der Werkstatt und darf die Probleme lösen, die sich in meinen Ferien angestaut haben, weil niemand während meiner Abwesenheit funktioniert hatte, wie immer. Und bei den Kunden bin natürlich auch ich der Depp.....toll, @ Axefx - hast Du noch einen Blödelkopp-Award? Den hätte ich verdient für meine Annahme mir mal etwas Ferien zu gönnen. Wenn ich sehe, wie ihr da den ganzen Tag durch produktiv und kreativ sein könnt, kommen mir die Tränen. :(

Sorry...OT.....:cry:
 
Oben
mainframe-fourhanded
mainframe-fourhanded