Syntherrupter - Umfangreicher, Mehrstimmiger Interrupter

Programmierung und Hardwaredesign mit AVR, PIC und Konsorten.

Moderatoren: MaxZ, SeriousD, ebastler

Nachricht
Autor
Benutzeravatar

Thread-Ersteller
MaxZ
Beiträge: 1066
Registriert: So 28. Jun 2015, 10:20
Schule/Uni/Arbeit: Mechatronik, Karlsruher Institut für Technologie
Wohnort: Luxemburg / Karlsruhe
Hat sich bedankt: 205 Mal
Danksagung erhalten: 125 Mal
Kontaktdaten:

Re: Mehrstimmiger MIDI Interrupter

#16 Beitrag von MaxZ »

Moin,


Leider musste ich feststellen dass der Code (fast) aller Versionen einen kritischen Fehler im "Simple" Modus hat, der für Milisekunden lange ontimes sorgt. Es scheint mit dem gleichen Hardwarebug zusammenzuhängen, der mich schon ganz am Anfang ärgerte, und den ich nach etlichen Stunden probieren und debuggen mit v1.1 behoben hatte. Irgendwie muss er sich beim Umbau auf v2.0.0 wieder eingeschlichen haben; ich kann es nicht mehr genau sagen. Jedenfalls hat er sich bis zur kürzlich erschienen v3.1.1 gehalten.
Ich habe es als Anlass genommen, den kompletten Code auf den Kopf zu stellen (Git diff: >3500 Zeilen hinzugefügt, >2000 Zeilen entfernt. Und nein ich habe nicht die Ordnerstruktur umgebaut ;) ). Anstelle dass jeder Modus seine Signale selbst generiert, gibt es jetzt für jeden Ausgang eine gemeinsame Schnittstelle für alle Modi, bei der jeder das Hinzufügen (und später entfernen) eines Tons beantragen kann. Alle Modi bauen also auf den gleichen Kern auf. Dies ermöglicht es, die Modi parallel laufen zu lassen und erlaubt es in Zukunft deutlich einfacher neue Features hinzuzufügen.
Zusätzlich wurde vieles optimiert und/oder ordentlicher strukturiert. Und so ganz nebenbei ist auch der oben geschilderte Bug rausgeflogen.

Ergebnis ist das neue Release v4.0.0

Warum man Modi parallel laufen haben soll erschließt sich derzeit vielleicht noch nicht, aber es gibt (wie ich finde sehr geile) Ideen, für die das eine Voraussetzung ist:
Netzpfuscher hatte die Idee, basierend auf einem Beschleunigungssensor Star Wars Lichtschwert Effekte zu erzeugen, die auf der TC wiedergegeben werden. Ich find das einfach Hammer und die Idee hat sofort nen Platz auf meiner Todo Liste bekommen.
Es ist geplant, irgendwann nen Audio Interrupter hinzuzufügen, d.h. nen Audioeingang aufgrund dessen ein Interrupter Signal generiert wird. Möglich ist es, sogar mit wirklich guter Qualität, wie unter anderem ein sehr erfolgreiche Teslaspulenmusikyoutubechannel zeigt (wo auch immer da die Worttrennung hingehört :roll:). Noch besser wär natürlich, wenn man gleichzeitig mit dem Keyboard daneben spielen könnte ;)

Übrigens, mein Oszilloskop hat sich geweigert nen gescheiten Tastgrad zu messen... Vielleicht war ich auch zu blöd; wer weiß. Schaut was mit dem unten angezeigten Tastgrad passiert, wenn der Puls links das Bild verlässt :balla:

Edit: als text geschrieben definitiv Schlafenszeit definitiv :facepalm:


Liebe Grüße,
Max
Dateianhänge
2020-09-03 14.00.jpeg
2020-09-03 14.01.jpeg

Benutzeravatar

VEKTOR
Beiträge: 86
Registriert: Mo 22. Jul 2013, 20:55
Wohnort: Andernach (Rheinland Pfalz)
Hat sich bedankt: 11 Mal
Danksagung erhalten: 12 Mal

Re: Mehrstimmiger MIDI Interrupter

#17 Beitrag von VEKTOR »

Uh sehe erst jetzt das es hier ja auch weiter geht!
Aber primär wolltest du doch auf Netzpfuschers System umsteigen oder?
Wie läuft da eigentlich die Entwicklung des LWL-Interfaces?

Zur Duty Messung mit dem Rigol DS1000x kann ich nur sagen das laut relativ schwammiger Information im Handbuch
die Duty+ Messung als "+Pulslänge/Periode" definiert ist. Jetzt hat das Rigol natürlich eine schwere Zeit in dem Signal eine Pulslänge und eine Periodenlänge zu finden.
Leider gibt das Handbuch, bezüglich dem Verhalten bei aperiodischen Signalen, nicht mehr her... Womöglich hilft hier die Vavg Messung. Dann müsste man per Dreisatz auf den Tastgrad kommen.

mfg VEKTOR
ALLES was ich sage kann auch FALSCH sein, M'Kay ?

Benutzeravatar

Thread-Ersteller
MaxZ
Beiträge: 1066
Registriert: So 28. Jun 2015, 10:20
Schule/Uni/Arbeit: Mechatronik, Karlsruher Institut für Technologie
Wohnort: Luxemburg / Karlsruhe
Hat sich bedankt: 205 Mal
Danksagung erhalten: 125 Mal
Kontaktdaten:

Re: Mehrstimmiger MIDI Interrupter

#18 Beitrag von MaxZ »

Hi VEKTOR,


Ja, hab das Thema hier auch ehrlich gesagt etwas vernachlässigt; daher gibt's am Ende den aktuellen Stand. Irgendwann will ich auf den UD3 umsteigen, ja. Aber mittelfristig habe ich keine Zeit dafür und es gibt noch ein paar Einschränkungen, die ich nicht haben will. Dazu kommt, dass mein Syntherrupter durchaus Anklang findet im highvoltageforum, ich bin also nicht mehr der einzige Nutzer.

Den aktuellen Entwicklungsstand vom UD3 gibt's hier zu sehen: https://highvoltageforum.net/index.php?topic=188.100
Kann ansonsten nur sagen dass es auf der Todo Liste steht.

Mit deinen Erklärungen zum Rigol Oszilloskop hast du recht; sieht so aus als würde nur die erste Periode vermessen werden. Vavg funktioniert dagegen korrekt.

Und nun wie versprochen die Neuerungen seit dem letzten Post:
  • Ursprünglich was Syntherrupter zwar halbwegs leistungsstark, aber sehr leicht zu verwenden. Inzwischen ist die Komplexität jedoch soweit gewachsen, dass ein einzelner Startpost nicht mehr dafür ausreicht. Daher habe ich angefangen an einem Wiki zu schreiben: https://github.com/MMMZZZZ/Syntherrupte ... ation/Wiki Da fehlt noch vieles, aber es ist ein brauchbarer Anfang denke ich. Sobald alle Infos, die jetzt noch im Startpost stehen, migriert sind, wird der Startpost ordentlich zusammengekürzt, so dass er weniger erschlagend ist.
  • ADSR/Hüllkurve wurde deutlich aufgebohrt.
    • Anstelle von 4 Datenpunkten sind nun 8 möglich, wobei der Unterbau mit beliebig vielen Datenpunkten klar kommt.
    • Exponentielle Verläufe sind jetzt möglich. Der Nutzer spezifiziert wie viele ("n") Zeitkonstanten ("tau") zwischen den letzten und jetzigen Datenpunkt gequetscht werden. Ein Wert von 0 ergibt einen linearen Verlauf. Positive/negative Werte "drücken" den Verlauf mehr Richtung Rechteck. Ein Beispiel. Zu sehen sind mehrere Kurven, deren Datenpunkte jeweils die gleiche Amplitude und Dauer haben. Daher schneiden sich alle Kurven in ihren 4 Datenpunkten. Der "n-tau" Wert ist allerdings für jede Kurve anders, weshalb der Verlauf zwischen den Datenpunkten auch anders ist. Die Daten wurden btw. nicht mit Excel generiert sondern tatsächlich aus dem uC ausgelesen. Das da ist der Verlauf wie er für jede einzelne Note in Echtzeit berechnet wird.
      2020-09-04 15_25_12-adsr.xlsx - Excel.png
    • Jeder Datenpunkt kann auf einen beliebigen anderen Datenpunkt verweisen. Somit sind Schleifen möglich. Schleifen in der Hüllkurve...? Hier ein Beispiel: https://www.youtube.com/watch?v=1p675bxQwFg&t=8m50s Dieses Beispiel lässt sich mit 4 Datenpunkten nachbilden (Schritt 8 ist immer Release, so wie Schritt 1 immer Attack ist):

      Code: Alles auswählen

      Schritt | Nächster Schritt | Amplitude | Dauer [ms] | n-tau
      --------+------------------+-----------+------------+------
            1 |                2 |       1.0 |        500 |   2.0
            2 |                3 |       0.0 |        200 |   2.0
            3 |                2 |       1.0 |        100 |  -2.0
            8 |                8 |       0.0 |        100 |   2.0
      	  
      Man beachte wie Schritt 3 zurück auf Schritt 2 verweist und somit eine Schleife erzeugt. Das Ergebnis sieht dann z.B. so aus:
      ADSR Looping.png
      ADSR Looping.png (16.13 KiB) 469 mal betrachtet
    • Hüllkurven können endlich auf Syntherrupter selbst editiert werden. Ein grafischer Editor ist zwar leider nicht möglich, aber immer noch besser als nix.
    • Editieren ist schön und gut, aber wenn man das jedes mal neu machen muss, ist es auch Kacke. Daher werden jetzt die Programme 20-39 im EEPROM gespeichert. Die Programme 0-19 sind Presets die beim Start immer gleich sind und alle anderen Programme sind leer (keine Hüllkurve; nur Note an, Note aus).
  • Der angekündigte Lichtschwer Modus ist da! Einrichten ist recht einfach (siehe Wiki!). Jedes Lichtschwert besteht aus einem MPU6050 Sensor und einem ESP8266. Syntherrupter selbst kriegt ebenfalls einen ESP8266. Alle ESPs werden mit der gleichen Firmware geflasht und erkennen automatisch was ihre Rolle ist. Lichtschwerter und Syntherrupter können in beliebiger Reihenfolge eingeschaltet werden; die finden sich egal wie. Ein früher Test dieses neuen Modus ist hier zu sehen und hören:

    Der Algorithmus, der die Frequenz aus der Bewegung errechnet, wurde seitdem noch leicht angepasst. Wirklich gut ist er noch nicht, aber zum Rumspielen reicht's allemal.
  • Dark Mode :mrgreen:
    Dark Mode.png
    Dark Mode.png (8.25 KiB) 469 mal betrachtet
Das dürften alle größeren Neuerungen sein. Im Detail ist natürlich noch einiges mehr geschehen. Wie immer lohnt es sich die Release Notes zu lesen ;) Aktuelles Release gibt's hier: https://github.com/MMMZZZZ/Syntherrupter/releases


Liebe Grüße,
Max

Benutzeravatar

Thread-Ersteller
MaxZ
Beiträge: 1066
Registriert: So 28. Jun 2015, 10:20
Schule/Uni/Arbeit: Mechatronik, Karlsruher Institut für Technologie
Wohnort: Luxemburg / Karlsruhe
Hat sich bedankt: 205 Mal
Danksagung erhalten: 125 Mal
Kontaktdaten:

Re: Syntherrupter - Umfangreicher, Mehrstimmiger Interrupter

#19 Beitrag von MaxZ »

Nabend,


Gibt etwas Fortschritt hier. Inzwischen ist das Wiki fast komplett und für so ziemlich jeden Knopf und Schieber im User Interface kann man sich einen QR Code anzeigen lassen, der direkt zum passenden Abschnitt im Wiki verlinkt. War ne scheiß arbeit und wird wahrscheinlich nie jemand nutzen, aaaaber es kann sich keiner beschweren. Ist doch auch was. Die Links habe ich nicht manuell gesammelt, sondern automatisiert, und gleich auch gekürzt. Skript dafür hab ich ebenfalls veröffentlicht.
Um Rechenzeit zu sparen hab ich die "korrekte" Berechnung der Frequenz bei Pitch Bend rausgeschmissen und durch ne lineare Interpolation ersetzt (LUT mit den genauen Frequenzen aller Halbtöne). Tatsächlich ist die Abweichung mit <1 Cent zu gering um hörbar zu sein.
Darüber hinaus hab ich die Farben im Dark Mode angepasst. War vorher noch nicht sooo überzeugend; vor allem der Kontrast. Jetzt gefällt's mir viel besser :hehe:

Dönlöd und Details zur neuen v4.1.0: https://github.com/MMMZZZZ/Syntherrupte ... tag/v4.1.0

So nebenbei überlege ich, wie das Projekt weitergehen soll. Langfristig will ich auf ne leistungsstärkere Plattform umsteigen, um die teuren und beschränkten Nextion Displays los zu werden. Ziel ist es, nicht nur ne bessere UI un mehr Funktionen hinzubekommen, sondern auch die BOM-Kosten ohne Gehäuse und LWL Module auf <50€ zu drücken. Ich denke da an nen Teensy 4.1 (600MHz Cortex M7) oder sogar nen Raspberry Pi (Zero). Falls ihr noch Ideen habt, immer her damit.

Oh, und nee, selbst blitzen konnte und kann ich immer noch nicht :omg:


Liebe Grüße,
Max

MIDI Live Dark.png
MIDI Live Dark.png (22.44 KiB) 248 mal betrachtet

Antworten