Midifizierung einer Johannus-Orgel mittels Arduinos

    • Offizieller Beitrag

    Ich muss noch als Nachtrag etwas einwerfen. Doch es gibt einen Zeitvorteil. Die Matrix ist langsamer. Beim durchgehen dieser müssen Pins umgeschaltet werden und das benötigt eine gewisse Zeit bevor man zuverlässig nach dem Verändern des Pins prüfen kann. Bedeutet also die Matrix ist tatsächlich langsamer

    Das müsstest du mir bitte ganz genau erklären.

    Ein Taktgeber schaltet bei 64 Kontakten von Taste zu Taste.

    Bei der Matrix jeweils wiederholt von Taste 1 bis 8. Gleichzeitig bei jeweils Taste 1 auch von Sammelkontakt 1 bis 8.

    Zähler 1 für die Tasten steht auf 1 und

    Zähler 2 der Sammelkontakte steht auf 1

    Zähler 1 zählt hoch bis 8

    Dann wird er mit der negativen Flanke vom 8. Impuls auf 1 zurückgesetzt und Zähler 2 auf 2 gestellt

    Auf dem nächsten Zählimpuls folgt die gleichzeitige Abfrage Taste 1 und Sammelkontakt 2 usw

    Da sich die negative Flanke zum Zurücksetzen des Zählers 1 und Weiterschalten des Zählers 2 auf der halben Periode des Impulses befindet geht keine Zählzeit verloren. Also auch keine Abfragezeit.

    Der Zähler zählt bei 64 Einzelkontakten von Impuls zu Impuls durch.

    Und auch bei der Matrix bei 8 x 8 von Impuls zu Impuls durch.

    Wenn es sich wie von dir beschrieben verhält würde in der Digitalverarbeitung jeder Zähler zwischen 9 und 10 (0) holpern.

    Ich kann gerne mal die Impulsfolge mit den Schaltpunkten aufzeichnen

    Durch das Umsteuern der Zähler über die negative Flanke zur halben Impulsperiode ist die Abfrage zum nächsten Impuls garantiert.

    Ich hab das an meinem selbstgebauten Scanner mit dem Oszilloskop überprüft. Auch die Scanner von WIRA arbeiten mit diesem Zählbetrieb

    Ausnahme: Die Taktfrequenz ist für die zu verarbeitende Logik zu schnell.

    Das ist aber auszuschließen.

    Wie gesagt, beim programmierten Arduino kann es sich anders verhalten. Da entstehen evtl unterschiedliche Programmierzeiten

  • Im Übrigen habe ich nicht geschrieben, dass ich den Elektroniker-Code kopiert habe. Ich habe wörtlich geschrieben, dass ich ihn analysiert und für mich abgewandelt habe.

    Daher bezogen sich meine Aussagen ausschließlich auf den Code und die Umsetzung die ich vom Elektroniker kannte. Deine Umsetzung würde mich aber durchaus einmal interessieren. Nicht zum kritisieren oder bewerten, sondern um selber zu sehen und zu analysieren wie ein anderer ein Problem umgesetzt hat. Es gibt im Grunde nicht diese eine Möglichkeit etwas umzusetzen und meine Ratschläge spiegeln nur meine Erfahrung wieder. In deiner Konstellation (auch mit der vorhandenen Hardware) kann deine Lösung in deinem Fall auch durchaus die bessere sein.

    BTW sollten dir mal die Pins ausgehen, dann beschäftige dich gerne auch mal mit Schieberegister.

    Zeitunterschiede der Abfrage von 64 Kontakten im Gegensatz zur 8 x 8 Matrix entstehen, wenn überhaupt, nur durch die Art der Abfragetechnik

    Ich selbst kann mich nur darauf verlassen was ich von anderen die es scheinbar wissen erfahre. Selber etwas messen im Mikrosekunden oder gar Nanosekunden Bereich ist ja unmöglich für mich. Es wird vermutlich auch eine große Rolle spielen welche Hardware man nimmt. Ein echter Chip der zum Scannen einer Matrix gemacht wurde, der ist natürlich auf genau diesen Zweck optimiert, wohingegen ein Arduino eher ein Allrounder ist der alles abdecken muss.

    Wenn ich meinen Code anschaue, dann muss ich eine Pause machen bei der Zeile digitalWrite(outputsManual1[i],LOW) damit der Arduino Zeit hat zu schalten und das mögliche Ergebnis sauber erfassen zu können. Da gehen also schon einmal Mikrosekunden verloren. Man könnte den Wert noch reduzieren, aber in dem Szenario spielt es keine Rolle und ist meiner Erfahrung nach sicher. Dann habe ich zwei Schleifen die durchlaufen müssen mit Auswertungen. Das kostet auch wieder Zeit, je nachdem wie effektiv die CPU arbeitet und das ganze von der Umgebung interpretiert wurde. Ich gehe aber davon aus, dass diese Routinen vermutlich äußert gut optimiert sind.

    Bei dem Arduino dürfte dann also ein:

    Code
      taste0Alt = MidiButton(22, 41, taste0Alt);
      taste1Alt = MidiButton(23, 42, taste1Alt);

    schneller sein um den Zustand der einzelnen Tasten zu ermitteln. Aber dass ist ja auch wieder nur ein Ausschnitt. In der MidiButton Funktion wird ja bei jedem Durchlauf eine Pause gemacht zum Entprellen der Taste. Bedeutet wenn eine Veränderung eintritt, dann stoppt das Programm jedesmal für ich glaube 200 Mikrosekunden und zu schauen ob es prellt oder nicht.

    Aber egal was man theoretisch sich anschaut, was am Ende des Tages noch im erzeugten Programm steht weiß ja außer dem Compiler keiner. Nachdem der Code vom Compiler optimiert ist, kann es durchaus sein dass meine Schleife überhaupt nicht mehr vorhanden ist und auch nur noch eine simple Abfolge wie im anderen Beispiel stattfindet. Die Anzahl der Durchläufe sind ja fix im Code durch die vorherige Ermittlung und daher ist beim optimieren die Schleife eigentlich überflüssig, da in diese Konstellation dann keine Schleife mehr zwingend notwendig ist.

    Bedeutet ich schreibe einen Code wie:

    Code
    int wert = 0;
    for(int i=0; i<10; i++){
    {
        wert++;
    }
    print(wert);

    Dann wird nach der optimierung des Compilers nur noch ein print("10); stehen, weil die anderen Zeilen überflüssig sind und kein anderes Ergebnis entstehen kann.

    Melodeum.de - Wissenswertes zu Harmonium

    • Offizieller Beitrag

    Haralder

    Danke für die Codes. Ich hab es mir genau angesehen. Bei dieser Abfrage über Programmschritte ist natürlich die jeweils doppelte Abtastung von Taste und Sammekontakt vom Zeitbedarf größer.

    Allerdings, wie du schon geschrieben hast, nicht im wahrnehmbaren Bereich.

    Geräte wie der Arduino haben einen weiteren Vorteil. Je nach Umfang und Programm ist damit eine gesamte Orgel abtastbar und ganz einfach via MIDI an den PC auszugeben.

    Einige Scanner wie meiner ist an einem internen Bus angeschlossen. Und die CPU gibt die Befehle via MIDI aus. Andere Scanner haben MIDI-OUT Anschlüsse, die über Merger verbunden werden.

    Mein System ist in sich eine eigenständige Digitalorgel mit Setzer etc. an die auch ganz simpel unterschiedliche Expander angeschlossen werden können.

    Würde ich sie neu konzipieren kämen auch andere MIDI-Bauteile zum Einsatz, die die Verdrahtung vereinfachen und mit wenig Hardware auskommen

  • Würde ich sie neu konzipieren kämen auch andere MIDI-Bauteile zum Einsatz, die die Verdrahtung vereinfachen und mit wenig Hardware auskommen

    Das ist wohl war. Das Problem ist ja meist dass man eine Grundlage hat auf der man aufbauen will. Mit mehr Wissen und Erfahrung sieht man dann welche Optionen besser wären, aber in dem Szenario eben nicht umsetzbar sind.

    Beispiel Midifizierung würde ich heute nicht mehr mit Matrix Schaltung und dem kreativen anbringen der Magnetschalter machen. Ich würde mir für 1-2 Euro das Stück fertige Reed Module kaufen die ein SPI Interface haben und einfach dann anschrauben und verbinden

    AZDelivery KY-025 Magnetschalter Reed Switch Sensor Modul kompatibel mit Arduino und Raspberry Pi inklusive eBook!

    Dann kann man quasi beliebig viele einfach verkabeln wodurch sich die Adresse der einzelnen Module schon ergibt und man kann ohne viel Mühe jeden zur jeden Zeit abfragen ohne komplexe Schleifen.

    330px-SPI_three_slaves_daisy_chained.svg.png

    Aber wenn man anfängt und sein Projekt wächst, dann kennt man das alles ja nicht und wenn man so weit ist, dann lässt sich nicht mehr so leicht etwas ändern. Und wenn man beim nächsten Projekt alles anders macht, dann lernt man schnell dass ein anderer Weg noch besser wäre :)

    Melodeum.de - Wissenswertes zu Harmonium

  • In der MidiButton Funktion wird ja bei jedem Durchlauf eine Pause gemacht zum Entprellen der Taste. Bedeutet wenn eine Veränderung eintritt, dann stoppt das Programm jedesmal für ich glaube 200 Mikrosekunden und zu schauen ob es prellt oder nicht.

    In dem Elektroniker-Code waren 200 Millisekunden vorgesehen. Das geht vlt. für Pedalspiel in Chorälen, aber wird es virtuoser oder ist man auf dem Manual, kann man schnelle Wiederholungen mindestens mal ein und derselben Taste vergessen. Habe mich hier nach unten vorgetastet und den Wert bei 20 Millisekunden gesetzt. Weniger oder gar keine Entprellzeit gibt Störgeräusche.

    Ansonsten gilt: die erste Orgel baut man für seinen Feind, die zweite für seinen Freund, die dritte für sich selbst ;)

  • Habe mich hier nach unten vorgetastet und den Wert bei 20 Millisekunden gesetzt. Weniger oder gar keine Entprellzeit gibt Störgeräusche.

    Ja, dass ging mir damals auch so, da ich auch mit dem Code angefangen habe. Ich glaube ich habe für mich so um die 50 Millisekunden als brauchbar gefunden wo nichts schief ging.

    Melodeum.de - Wissenswertes zu Harmonium

  • Oh je, diese Kabelstränge kenne ich nur zu gut. Damit zu arbeiten ist eine echte Zumutung. Willst du den vorhandenen Strang weiter nutzen, oder ersetzt du die Kabel?

    Ich verwende die vorhandene Verkabelung weiter, war ja komplett intakt und kann auch niedrige Spannungen übertragen. Das ersparte mir eine Menge Lötaufwand. Ich musste natürlich auseinanderlesen, welche Kabel zu welcher Taste gehörten. Die Vorgehensweise inkl. Hilfsmittel schildere ich noch.


    Zwei Manuake von Ahlborn ersetze ich demnächst.

    Das habe ich halt auch gedacht. Erstmal mit der 80% Lösung losfahren. Mit der Zeit kommt Gelegenheit und Geburtstage, Weihnachten etc. zu denen man sich dann an der einen oder anderen Stelle noch mehr Funktion oder Komfort gönnt. Habe bei Herrn Aicheler auch mal die eine oder andere Tastatur probegespielt und klar, da ist ein gravierender Unterschied zu meinen Kunststofftasten. Aber was soll ich sagen? Meine Orgel spielt, ich hab dran Freude und kann dran üben. Der Rest kommt peu a peu.

    Viel Spaß bei deinem Projekt

    Danke! Einen wesentlichen Teil, die 80%, habe ich schon. Nun beginnt das Basteln an den restlichen 20%. Da brauche ich dann, wie sich schon gezeigt hat, den einen oder anderen guten Rat von euch :)

  • Ein Rat vorab und Spoiler ? Du wirst die 20% nie fertig bekommen. Wenn es funktioniert, dann ist man einige Tage zufrieden bis man weiter optimieren und erweitern will. Ich hatte auch mit eine Wersi Orgel angefangen und den beiden 56 Tasten Manuale. Jetzt sind es vier und von der Wersi sind nur noch ein paar Schrauben und Kabel übrig ?

    Melodeum.de - Wissenswertes zu Harmonium

  • Ich habe im Archiv mal ein Bild gefunden wie es bei mir angefangen hat. Nun es war nicht perfekt, aber man konnte es spielen. Das war eigentlich nachdem das Wersi gehäuse zusammengebrochen war :whistling: Das Pedal habe ich in einen Kasten provisorisch gebaut und später Stück für Stück verfeinert und eine Halterung für die Manuale mit angezimmert. Es ist aber trotzdem, Modular. Also ich kann noch immer das Pedal einfach abnehmen.

    pasted-from-clipboard.png

    Melodeum.de - Wissenswertes zu Harmonium

  • Wenn ich bisher solche Kabel weiterverwendet habe, dann habe ich meist eine Punkt-Streifenrasterplatine genommen, diese Kabel dort angelötet und zusätzlich dann Pins oder Stecker mit denen ich dann alles danach anschließen kann. Das hat sich bei mir bewährt, da man die Kabel bei einem Controller ja nur ansteckt und ein gewisse Ordnung hat. Ist natürlich zugegeben etwas mühsam zuerst einmal 500 Lötstellen zu setzen. Aber Mühsamer ist es wenn man es nicht tut und später was ändern will, muss oder was durcheinander kommt.

    Melodeum.de - Wissenswertes zu Harmonium

  • Diese Kabelbündel kenn ich auch von meiner ersten Orgel......Funktioniert natürlich.

    Bin eigentlich froh dass es heute mit der Matrix deutlich weniger Kabel zu ziehen gibt.

    Viel Erfolg bei der weiteren Arbeir

    Gruß

    Bernd

    Gezogen und Tastenseitig verlötet waren die ja schon. Daher bin ich auch überhaupt nicht auf die Idee einer Matrix gekommen, weil ich dachte, dass ja nun an jedem Kabel bei Tastendruck ein Impuls anliegt und ich den verarbeiten muss. Da es mit Due und Mega ausreichend groß dimensionierte Arduinos gibt, bin ich erst spät mit der Matrix in Kontakt gekommen. Als es dann soweit war und mein Projektweg eigentlich feststand und die Hardware auch schon gekauft war, habe ich dann eher ans fertigstellen, als an neue Optimierung gedacht.

    Wenn ich bisher solche Kabel weiterverwendet habe, dann habe ich meist eine Punkt-Streifenrasterplatine genommen, diese Kabel dort angelötet und zusätzlich dann Pins oder Stecker mit denen ich dann alles danach anschließen kann. Das hat sich bei mir bewährt, da man die Kabel bei einem Controller ja nur ansteckt und ein gewisse Ordnung hat. Ist natürlich zugegeben etwas mühsam zuerst einmal 500 Lötstellen zu setzen. Aber Mühsamer ist es wenn man es nicht tut und später was ändern will, muss oder was durcheinander kommt.

    So ähnlich hab ich es auch gemacht, wahrscheinlich hätte ich mit der Platinenlösung weniger geflucht und neu machen müssen. Aber von den diversen Platinen wusste ich zu dem Zeitpunkt noch nichts. Wie gesagt, bin totaler Anfänger.

    • Offizieller Beitrag

    Also ich muss ganz ehrlich sagen, ich hätte es genau so gemacht wie Du Brassmann - und ich hab das sogar studiert. In diesem Fall eine Dioden-Matrix einzubauen ist doch völlig Gaga. Man muss doch eine Kosten/Nutzen-Abwägung durchführen, so wie Du es gemacht hast und da hast Du sogar als Laie die Situation völlig richtig erkannt und für Dich passend umgesetzt - Hut ab! :-pray:

    Zeit ist Geld und mit einer Matrix hätte man hier in jeder Beziehung drauf gelegt. Es müssen ja erstmal Dioden, Platinen, Litzen usw. ausgewählt, bestellt, bezahlt montiert und verlötet werden. Das ist eine völlig unnötige Fummelei, die viel Zeit und obendrein noch Geld kostet. Gespart hätte man sich dann genau was? 50 cm Litze? Den einen oder anderen Arduino? Wow - die sind ja auch dermaßen teuer. :-wow:

    Es hat auch deutliche Vorteile, für jede Klaviatur eine vollkommen getrennte Steuerung zu haben. So kann die Orgel später auch mal sauber linear um weitere Manuale erweitert werden ohne sich verbiegen zu müssen. Auch freie Software zu übernehmen und anzupassen ist doch besser, als das Rad zum x-ten mal neu zu erfinden. Dass bei Dir alles funktioniert, ist doch der beste Beweis dafür, dass Du auf dem richtigen Weg bist.

    Mach mal ruhig weiter mit Deinem tollen Bericht und lass Dich nicht von Besserwissern verunsichern. Ich finde es sehr spannend.

  • Danke dir! Ja, ich habe genau diese Kosten-Nutzen-Abwägung gemacht, als ich auf das Prinzip "Matrix" gestoßen bin. Da ich 61 Tasten-Manuale habe, wurde es schon etwas knapp mit den Pins. Aber ich wusste, ich müsste noch einmal so viel mehr Zeit für Recherche und Umsetzung reinstecken. Und auch beim Preis ist es so wie du sagst: mich hat jeder Arduino im Schnitt 25€ gekostet. Deshalb hatte ich da kein finanzielles Herzdrücken.

    • Offizieller Beitrag

    Ich kann mich Mike nur anschließen.

    Alle Manuale, Pedal, Pistons, Setzer, Register und Schweller einzeln über geeignete Scanner abtasten ist eine saubere und offene Technik.

    Selbst bei Tastaturen mit integrierter Matrix ist der Einsatz von Manualscannern für jedes Manual übersichtlicher und viel leichter erweiter- oder änderbar.

    Für eine Tastatur ohne Matrix würde ich auch eher Leitungen verlegen als Leiterplatten oder Lochrasterplatten mit Dioden zu verwenden. Die Lötarbeit ist auch erheblich geringer.

    64 Kontakte einzeln sind

    65 Lötstellen an den Kontakten und, wenn kein lötfreier Steckverbinder zur Verfügung steht dann noch

    65 Lötstellen am Scanner

    Baut man eine Matrix sind das

    64 Lötstellen an den Kontakten

    Auftrennen der Sanmelschiene am Manual in 8 Segmente

    8 Lötstellen für die Sammelschienen

    128 Lötstellen an den Dioden

    16 Lötstellen am Steckverbinder oder Anschlusskabel zum Scanner. Steht keine Steckverbindung zur Verfügung dann noch

    16 Lötstellen am Scanner

    Bedeutet insgesamt mehr Hardware gegenüber Arduino etc die evtl die ganze Orgel programmiert verarbeiten

  • Sauber analysiert Rainer.

    In der Tat macht die Matrix Sinn beim Neuaufbau um die Kabelbäume zu sparen. Aber wenn sie vollständig und funktionsfähig da sind ist die Nutzung natürlich einfacher . Es gibt bei Gino auch einen Decoder der 64 Schaltingänge bietet. Die Matrix ist dann da drauf und kann in meinem Matrix-System verwendet werden.

    Gruß

    Bernd