DYI: MIDI Fußleiste selber bauen?!

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
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...

CONFIRMED!!!!

// ==== Button-Array for iteration
(GELÖSCHT)Button *buttons[MAX_BUTTONS - 1];
(HINZUGEFÜGT)Button *buttons[MAX_BUTTONS]

Jetzt funktioniert es perfekt, ohne im setup.h die maximale Button Anzahl um eins mehr zu erhöhen, als im .ino - file angelegt ist!

(das war das, was ich im video gegen ende "vergessen hatte" umzuschreiben .... ist alsoschon wieder "Geschichte".... ;) )
 
Zuletzt bearbeitet:

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Zum ersten Schaltplan:

Die Taster sind so ok, wenn du sie richtig rum rein steckst, da ja jeweils zwei Anschlüsse der Taster miteinander verbunden sind.

Bei der Midi Out Buchse fehlt meines Wissens noch ein 220 Ohm Widerstand zwischen TxD des Arduino Boards und Pin 5 der Midi Out Buchse.

StandardMIDIInterface.jpg
 

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
Wie geil... Ich hab gerade das Video angesehen... Wie cool, dass das funktioniert! :)

Paco, der widerstand kann weggelassen werden? Sieht man aber auf diversen Plänen. Was macht der denn genau? Ist der auch zum entstören?
 

Jojolamenace

Member
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Apr 1, 2013
Beiträge
92
Wie geil... Ich hab gerade das Video angesehen... Wie cool, dass das funktioniert! :)

Paco, der widerstand kann weggelassen werden? Sieht man aber auf diversen Plänen. Was macht der denn genau? Ist der auch zum entstören?
Von mir aus gesehen, sind beide 220Ohm Widerstände als Kurzschlussschutz tätig. Kurzschlüsse in Midi-Kabel und Buchsen könnten zu grossen Strömen im 5V Netzteil führen und auch den Tx Pin zerstören.
 
P

Pacosipulami

Guest
Ja Jojo, dafür sind diese Widerstände - am Ausgang ist der Widerstand deswegen zwingend notwendig - nicht aber am Eingang (davon sprach Wildlife ja)! Denn da wirkt bereits der Ausgangskreis des angeschlossenen Gerätes. Und am offenen Eingang fliesst kein Strom, da der Optokoppler an seinem Eingang nicht an den internen Stromkreis angeschlossen ist

Wohl verstanden - wir sprechen einzig allein vom angeblich fehlendem Widerstand am Input an Pin 5 ( an Pin 4 braucht es ihn nach wie vor....)

Ich sehe auf dem von Widlife geposteten Bild auch kein Fehler.....hab gerade gelesen dass er sich auf den Output nicht auf den Input bezieht - aber auf dem Bild ist ja alles wie es sein muss....

sorry, verstehe nun gar nichts mehr! ich weiss exakt für was die Widerstände gut sind, es sind auch Vorwiderstände für die Daten-Input-Leitung am Optokoppler, dessen Übertragungs-Diode nicht auf 5V Input ausgelegt ist (sondern laut Datenblatt auf 1.75VDC Schwellenspannung)
 
Zuletzt bearbeitet:
P

Pacosipulami

Guest
Frage 5: Welchen Widerstand nehmen? Oft lese ich 220Ohm. Manchmal 1KOhm, manchmal gar 10KOhm.
Eigentlich könntest Du doch auch die Pull-Up Widerstände auch Ardunio-Chip-Intern aktivieren. Dazu dient die Syntax "digitalWrite(pin,value)" Pin = Pin-Nummer und Value setzst Du auf HIGH - kann das mal jemand probieren?
 
Zuletzt bearbeitet:

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Zum ersten Schaltplan:

Die Taster sind so ok, wenn du sie richtig rum rein steckst, da ja jeweils zwei Anschlüsse der Taster miteinander verbunden sind.
Japps, das habe ich mittlerweile "gerafft" ;)

Bei der Midi Out Buchse fehlt meines Wissens noch ein 220 Ohm Widerstand zwischen TxD des Arduino Boards und Pin 5 der Midi Out Buchse.
Von mir aus gesehen, sind beide 220Ohm Widerstände als Kurzschlussschutz tätig. Kurzschlüsse in Midi-Kabel und Buchsen könnten zu grossen Strömen im 5V Netzteil führen und auch den Tx Pin zerstören.
Also immer 220Ohm. Pro Taster, und 2x an die MIDI-Buchse (5V + TxD), so wie hier?!?!


So alles richtig???
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
sorry, verstehe nun gar nichts mehr!
Ich weiß nicht, ob ich deinen Einwand richtig interpretiere, korrigiere mich falls ich dich falsch verstanden habe.

Ich schreibe deshalb von Ausgang, da der TxD im AVR als Ausgang konfiguriert sein muss. Ja, beim senden von Daten fließt zwar ein Strom in die Ausgangsendstufe des Pins hinein, aber es ist trotzdem ein Ausgang für den AVR, der für einen Stromfluss auf GND geschaltet wird.
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
So alles richtig???
Aus meiner Sicht ja.

Paco hat natürlich absolut Recht, dass es einfacher ist die internen Pullups zu verwenden. Damit wollte ich dich aber jetzt nicht noch weiter verwirren und so bekommt man auch ein besseres Gefühl für die tatsächlichen elektrotechnischen Zusammenhänge.

Momentan hast du allerdings Pulldown Widerstände verdrahtet! D. h. du müsstest die Schaltung so abändern, dass der Taster auf der einen Seite mit dem Arduino Eingangspin und auf der anderen Seite mit GND verbunden ist. Dann können die Widerstände wegfallen. Die Interpretation des Tasterzustandes wäre dann auch umgekehrt! Das müsste in der Software berücksichtigt werden.
 
P

Pacosipulami

Guest
Ich weiß nicht, ob ich deinen Einwand richtig interpretiere, korrigiere mich falls ich dich falsch verstanden habe.

Ich schreibe deshalb von Ausgang, da der TxD im AVR als Ausgang konfiguriert sein muss. Ja, beim senden von Daten fließt zwar ein Strom in die Ausgangsendstufe des Pins hinein, aber es ist trotzdem ein Ausgang für den AVR, der für einen Stromfluss auf GND geschaltet wird.
Dann habe ich Dich falsch interpretiert - ich dachte es beziehe sich auf die von Dir gepostete Schaltung! Sorry....
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Aus meiner Sicht ja.
Uff ;) *schweiss von der Stirn wisch. Das klingt schonmal gut!

Paco hat natürlich absolut Recht, dass es einfacher ist die internen Pullups zu verwenden. Damit wollte ich dich aber jetzt nicht noch weiter verwirren und so bekommt man auch ein besseres Gefühl für die tatsächlichen elektrotechnischen Zusammenhänge.
Ja ... interne Pullups? Kapier ich (noch) nicht. Geschweige denn könnte ich die programmtechnisch aktivieren. Da bin ich ja nur "Mitesser" an Basti`s Programmiertopf ... ganz ehrlich ... ;(

Momentan hast du allerdings Pulldown Widerstände verdrahtet! D. h. du müsstest die Schaltung so abändern, dass der Taster auf der einen Seite mit dem Arduino Eingangspin und auf der anderen Seite mit GND verbunden ist.
Also gar nicht mehr am 5V hängt?
Dann können die Widerstände wegfallen.
??? Ich denke, die brauchen wir? Oh mei, ich nix kapier ... :cry:

Die Interpretation des Tasterzustandes wäre dann auch umgekehrt! Das müsste in der Software berücksichtigt werden.
Würde bedeuten: Value 0 wäre 127 und value 127 wäre 0?

MIDI OUT ist jetzt aber so genau richtig verkabelt incl. der beiden 220 Ohm Widerstände?

Ich versuche mal meine klägliche Interpretation Deiner Worte in einem neuen Schaubild abzubilden ... ;)
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Momentan hast du allerdings Pulldown Widerstände verdrahtet! D. h. du müsstest die Schaltung so abändern, dass der Taster auf der einen Seite mit dem Arduino Eingangspin und auf der anderen Seite mit GND verbunden ist. Dann können die Widerstände wegfallen. Die Interpretation des Tasterzustandes wäre dann auch umgekehrt! Das müsste in der Software berücksichtigt werden.
So, jetzt hängen die Taster auf der einen Seite am GND, an der anderen Seite am PIN:


Meintest Du das so? Also auch OHNE interne Pullups(!) - da wüsste ich nicht, wie das zu machen wäre ... keine 5V, keine Widerstände ... hmm ...
 
Zuletzt bearbeitet:

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Uff ;) *schweiss von der Stirn wisch. Das klingt schonmal gut!


Ja ... interne Pullups? Kapier ich (noch) nicht. Geschweige denn könnte ich die programmtechnisch aktivieren. Da bin ich ja nur "Mitesser" an Basti`s Programmiertopf ... ganz ehrlich ... ;(


Also gar nicht mehr am 5V hängt?
??? Ich denke, die brauchen wir? Oh mei, ich nix kapier ... :cry:
Die Schaltung für die Taster , die du hier so wunderschön aufgebaut hast, existiert als Pullup Variante bereits schlummernd im Arduino. Die muss nur noch geweckt werden. Dann kann man sich das extern sparen.

Würde bedeuten: Value 0 wäre 127 und value 127 wäre 0?

MIDI OUT ist jetzt aber so genau richtig verkabelt incl. der beiden 220 Ohm Widerstände?
Nein, das hat mit den Midi Werten nichts zu tun. Der Wert für den Taster selbst wäre umgekehrt.

Bei deiner Pulldown Variante:
Nicht gedrückter Taster -> 0V am Eingang
Gedrückter Taster -> 5V am Eingang

Bei einer Pullup Variante (wie bei der intern schon vorhanden und bei dir schlafenden Variante):
Nicht gedrückter Taster -> 5V am Eingang
Gedrückter Taster -> 0V am Eingang
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Zur Schaltung: PERFEKT !!

Jetzt muss dann nur noch die Software angepasst werden:

1. interne Pullups einschalten
2. Werte anders interpretieren
 

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
Zur Schaltung: PERFEKT !!
Das klingt schön ;)

Jetzt muss dann nur noch die Software angepasst werden:

1. interne Pullups einschalten
2. Werte anders interpretieren
Das klingt ... ähhhh .... wie mache ich das? Basti`s Code liegt hier: https://github.com/oson/midi_board_ONE ...

Also wäre ja so schon schicker, könnte man sich eine Menge Lötarbeit und Widerstände sparen .... ich versuche mal zu googlen und herauszufinden, ob ich das mit den internern Pullups verstehen könnte ....

[Edit] .... weiter geht`s mit dem studieren ... http://arduino.cc/en/Tutorial/DigitalPins ;)
 
Zuletzt bearbeitet:
P

Pacosipulami

Guest
Das klingt ... ähhhh .... wie mache ich das? Basti`s Code liegt hier: https://github.com/oson/midi_board_ONE ...
So wie ich das sehe hat Basti diese Lösung auch schon eingebaut....

// Set initial LED-State
if(_btnFunction == "PC") {
// Program Change
if(_ctrlNo == Button::pRGNO) {
digitalWrite(_ledPin, HIGH);

// Send PC
MIDI.sendProgramChange(_ctrlNo, MIDI_CHANNEL);

// Save Program-Number to Class-Variable
Button::pRGNO = _ctrlNo;

// Save LED-Pin to Class-Variable
Button::pRGNO_LED = _ledPin;

}
else {
digitalWrite(_ledPin, LOW);
}
}
Die Syntax "digitalWrite (_ledPin, High)" definiert die internen PullUps bereits.....
 

wildlive

Active member
Mitglied seit
Okt 6, 2012
Beiträge
167
Dieser Arduino Code ist doch zum kotzen, die abstrahieren von allem mit eigenen Funktionen. Damit kann ich mich nicht anfreunden...

Jedenfalls geht das so:
Code:
pinMode(pin,INPUT);
digitalWrite(pin,HIGH);
Die 1. Zeile bedeuten, dass ein Pin als Eingang definiert ist (DDR Register auf 0)
Die 2. Zeite schreibt in das PORT Register eine 1. Da der Pin als Eingang definiert wurde, schaltet hier das Port Register den Pullup.
 

Jojolamenace

Member
Axe-Fest 2019 Teilnehmer
Axe-Fest 2018 Teilnehmer
Axe-Fest 2017 Teilnehmer
Mitglied seit
Apr 1, 2013
Beiträge
92
So, jetzt hängen die Taster auf der einen Seite am GND, an der anderen Seite am PIN:


Meintest Du das so? Also auch OHNE interne Pullups(!) - da wüsste ich nicht, wie das zu machen wäre ... keine 5V, keine Widerstände ... hmm ...
Perfekt! So würde ich es machen. Aber OHNE interne Pullup-Widerstände wird es nicht gehen. Die werden mit dem Befehl pinMode() eingeschaltet. Mit diesem Befehl kannst du bestimmen, ob der Pin als Ausgang (OUTPUT), als Eingang (INPUT) oder als Eingang mit Pullup (INPUT_PULLUP) funktionieren soll.

Konkret:

pinMode(Pin-Nr, INPUT_PULLUP);

Pin-Nr ist der Eingangs-Pin (Pin mit Schalter), INPUT_PULLUP ist eine bereits vordefinierte Konstante (irgend eine ganze Zahl, den Wert kenne ich nicht und ist auch nicht wichtig)
Für jeden Eingang (mit Schalter) musst du diesen pinMode() Befehl in deinen Code einfügen, am besten in der void setup() Funktion. Die setup() Funktion wird nach dem Einschalten oder nach einem Reset des UNOs einmal ausgeführt, danach wird nur noch die void loop() Funktion ausgeführt (d.h. bis zum nächsten Reset oder Aus/Einschalten).

Der Midi-Teil ist auch richtig.

wildlife war da wohl schneller
 
Zuletzt bearbeitet:

axefx

Administrator
Teammitglied
Axe-Fest 2019 Teilnehmer
Mitglied seit
Sep 28, 2012
Beiträge
5.871
So wie ich das sehe hat Basti diese Lösung auch schon eingebaut....



Die Syntax "digitalWrite (_ledPin, High)" definiert die internen PullUps bereits.....
Ja? digitalWrite(_ledPin, HIGH); -> gilt das nicht nur für den Output der LEDs (diewir noch gar nicht verbastelt haben?
In welcher Datei hast du den Code gefunden?

Dieser Arduino Code ist doch zum kotzen, die abstrahieren von allem mit eigenen Funktionen. Damit kann ich mich nicht anfreunden...

Jedenfalls geht das so:
Code:
pinMode(pin,INPUT);
digitalWrite(pin,HIGH);
Die 1. Zeile bedeuten, dass ein Pin als Eingang definiert ist (DDR Register auf 0)
Die 2. Zeite schreibt in das PORT Register eine 1. Da der Pin als Eingang definiert wurde, schaltet hier das Port Register den Pullup.
Goodie, ich suche also jetzt im Code die ersteZeile (die ja irgendwo sein muss?!) und setze dann einfach die zweite Zeile drunter?! Gilt das dann für einen bestimmten INPUT pin (sprich einen schalter) oder gleich automatisch für alle?!

Langsam komme ich mir echt schön blöd vor, aber wie heisst es in der Sesamstrasse? Wer nicht fragt bleibt dumm ... aber ihr könnt immer besser erkennen, wie unterirdisch wenig (sprich: Gar nicht! Null! Nickesse!) Ahnung ich von alldem habe ... ich sollte wieder Axe-Fx routings machen ... da bin ich wenigstens gut drin ... :cry:
 
Oben
mainframe-fourhanded
mainframe-fourhanded