Sigma Multiplexer über GPIO Taster

+A -A
Autor
Beitrag
DTobi
Schaut ab und zu mal vorbei
#1 erstellt: 17. Aug 2017, 16:32
Hallo zusammen,

ich habe ein Problem in SigmaStudio (+Sure DSP) und wollte fragen ob jemand weiterhelfen kann?

Ein Multiplexer mit 3 stereo (*2) Eingängen soll über einen angeschlossenen Taster (1x GPIO_input) gesteuert werden.
Je nachdem welcher stereo Eingang aktiv ist, soll eine LED leuchten (3x GPIO_output).

Ich habe es einige Stunden mithilfe der Anleitung von IPv6 versucht und bekomme leider eine Fehlermeldung.
Durch betätigen den Tasters soll immer ein Eingang weitergeschaltet werden und die entsprechende LED angehen.

Es wäre richtig stark, wenn jemand da eine Lösung hat.

Hier mein Ansatz:
LINK
Dieser gibt einen Compiler Fehler zurück.

Ein neuer Ansatz funktioniert schonmal halb, es wird zwischen Eingang 1 & 2 auf Tasterdruck geschaltet, aber leider nicht auf Eingang 3
Ansatz Nr. 2

Beste Grüße
Tobi
IPv6
Stammgast
#2 erstellt: 17. Aug 2017, 18:16
Wie versprochen hier ein Lösungsansatz, den ich versuchen würde:

Ich würde das Ganze mit einem "Toggle Counter" versuchen, eine Beschreibung zu dem Baustein gibt es hier:
https://wiki.analog....ioning/togglecounter

Kurzfassung:
Es wird ein Zahlenwert X eingestellt.
Pro Tastendruck (den Block gibt es einmal auf steigende und einmal auf fallende Flanke triggernd) zählt der Block am Ausgang eins hoch und fängt wieder bei 0 an, sobald der eingestellte Wert X erreicht ist.

In deinem zweiten Ansatz hast du einen ganz ähnlichen Block, der zählt aber immer nur bis 1 (0, 1, 0, 1, ....), wesshalb er auch Toggle OnOff heißt. Somit bekommt der Multiplexer nur eine 0 oder eine 1, was eben dem Eingangspaar 0 oder dem Eingangspaar 1 entspricht. Das Eingangspaar 2 (das dritte, da ja immer bei 0 mit zählen begonnen wird), wird dabei nie angewählt.

Der Toggle Counter hat aber ein kleines Problem:
Wieso auch immer ist der niedrigste Wert für X eine 3. Somit kann er nicht unter 4 zählen (0, 1, 2, 3). Einen wirklichen Grund sehe ich dahinter zwar nicht, man wird aber damit leben müssen.
Ich denke am einfachsten wäre es, eine Lookup Tabel zu verwenden (klick!), die 6 Werte gespeichert hat. Die Wertezuweisung wäre wie folgt: 1:1, 2:2, 3:3, 4:1, 5:2, 6:3.
Dann wird der Toggle Counter so eingestellt, dass er eben bis 6 zählt, die Lookup Tabel macht dann aus 4, 5 und 6 wieder 1, 2 und 3.

Eine andere Lösung ohne Lookup Tabel wäre statt einem 3-fach Multiplexer einen 6-fach Multiplexer zu verwenden und an die Eingänge 4-6 wieder das Inputsignal von 1-3 anzulegen. Dazu das Signal einfach per T-Stück aufsplitten und eben mit Signal 1 zuätzlich zum Input 1 noch auf Input 4, mit Signal 2 zusätzlich auf Input 5 usw.
Dann wird bei Tastendruck immer durch alle 6 Eingänge weitergeschalten, am Ausgang liegt dann immer der Reihe nach Signal 1, 2 und 3 an.

Ich hoffe, dass das halbwegs verständlich war. Der Umweg scheint nötig zu sein weil man dem Block offenbar nicht beibringen kann, dass er nur bis 3 Werte (0, 1, 2) zählen soll.

Was genau hsat du eigentlich damit vor? Drei Stereoeingänge umschalten klingt etwas nach Vorverstärker mit Quellenumschaltung, wozu aber noch externe ADC notwendig wären. Klingt aber auf jeden Fall interessant!

Für die LEDs fallen mit spontan zwei Möglichkeiten ein:
Die erste wäre wieder über simple Vergleichsblöcke, mit denen If-Abfragen realisiert werden. Das Signal, welches auf den Multiplexer geht, wird mithilfe von einem T-Stück auf drei dieser Blöcke auf Eingang a geführt. Auf Eingang b kommt bei Vergleichsstelle 1 eine 0, bei Vergleichsstelle 2 eine 1 und bei Vergleichsstelle 3 eine 2.
Der Vergleich wird auf "=" gestellt, an Eingang c kommt bei allen Vergleichsstellen eine 1, an EIngang d eine 0.
An den Ausgang kommen die GPIO Outputs mit den LEDs dran.
Wenn nun beispielsweise Quelle Nr. 3 aktiv ist und am Multiplexer somit eine 2 anliegt, wird die dritte Vergleichsstelle eine 2 mit einer 2 vergleichen und der Meinung sein, dass das passt. Also wird die 1 von Eingang c rausgegeben, die LED leuchtet. Bei allen anderen Vergleichsstellen ist der Vergleich "false", es wird Ausgang d ausgegeben, sprich eine 0, die LEDs sind aus.

Eine andere, einfachere Möglichkeit wäre einen Demultiplexer folgendermaßen zu benutzen:
Unbenannt

Vom T-Stück kommt das Signal, welches auch den Multiplexer ansteuert. Abhängig davon, welcher Wert anliegt, schaltet der Demultiplexer die 1 auf den entsprechenden Ausgang, alle anderen Ausgänge sind 0.
Dafür würde sich die Lösung mit der Lookup Tabel anbieten, sonst braucht es eben einen Demultiplexer mit 6 Ausgängen. Die Ausgänge, die eine gemeinsame LED ansteuern sollen (also Ausgang 1 und 4, Ausgang 2 und 5 oder 3 und 6) müssen mit einem logischen "oder" verknüpft werden (findet sich bei "Basic DSP - Logic - Logic And, Or, Nand, Nor"), damit die LED auch auf beide Ausgänge hört.
DTobi
Schaut ab und zu mal vorbei
#3 erstellt: 18. Aug 2017, 03:09
Wow, das ist wirklich eine hammer ausführliche und verständliche Antwort !!
Vielen vielen Dank dafür

Ich habe es nun tatsächlich geschafft, selbst das Problem mit dem Zähler von 1-3.
Verwendet habe ich den Toggle Counter mit der "Rising Edge".

Zu beachten ist wohl noch, dass in der Hardware Konfiguration noch die entsprechende
GPIO Art eingestellt werden muss.

Hier meine bzw. deine Lösung:
Bild
SigmaStudio_Datei

Das Problem mit den Zahlen < 3 besteht bei dem oben genannten Toggle Counter scheinbar nicht (:


Zu der Frage wozu das ganze ist:

Ich baue einen mobilen Lautsprecher der (bis jetzt) 3 verschiedene Betriebszustände haben soll.
1. ECO (grüne LED):
Zur Steigerung der Akkulaufzeit sollen Bässe und evtl. der max. Pegel reduziert werden:

2. Normal (blaue LED):
Natürliche bzw. normale Wiedergabe:

3. Power (rote LED):
Wenn die Akkulauzeit keine Rolle spielt, soll der Lautsprecher tiefer und mit einer Bassanhebung spielen.

Nun möchte ich, nachdem der Klang allgemein durch das DSP angepasst wurde, dieses Signal verdreifachen und dann jeweils
den ensprechenden Tonmodus anhängen.
Der Taster schaltet dann den gewünschten Tonmodus durch und eine RGB LED leuchtet in entsprechender Farbe


Die nächste große Hürde wird ein dynamischer EQ bzw. ein Bassregler der abhängig vom Einganssignal ist

Gibt es hier oder zu meinem Vorhaben noch Verbesserungen oder Ideen?

Beste Grüße


[Beitrag von DTobi am 18. Aug 2017, 12:35 bearbeitet]
IPv6
Stammgast
#4 erstellt: 18. Aug 2017, 12:45
Gute Idee mit den verschiedenen Signalwegen für verschiedene Einstellungen!
Eine Alternative dazu wären vielleicht noch "Lookup Filter". Die gibt es als EQs oder High- bzw. Lowpass Filter. In diesen Filtern können mehrere Kurven gespeichert und per Steuersignal ausgewählt werden (ganz einfach über Zahlenwerte, wie beim Multiplexer auch).
Man könnte beispielsweise zwei (oder mehr) von diesen Filtern hintereinander hängen und alle mit dem gleichen Steuersignal versorgen. Der erste Lookup Filter könnte z.B. ein Hochpass sein, Kurve Nr. 1 für diesen Filter wäre dann für das maximale Akkulaufzeit Preset eine Trennfrequenz von 100 Hz, also allen Bass entfernen. Kurve Nr. 2 für neutral wäre eine Grenzfrequenz bei einer tieferen Frequenz, sodass der Treiber nur von unnötig tiefen Frequenzen befreit wird, die er eh nicht spielen kann (subsonic). Kurve Nr. 3 wäre ebenfalls nur ein Subsonic Filter.

Der zweite Lookup Filter könnte ein EQ sein. Kurve Nr. 1 beim EQ wäre z.B. flach, für Nr. 2 auch und nur beim Bassboost Preset könnte man untenrum die Frequenzen etwas anheben.

Das wäre zwar übersichtlicher, aber hat den Nachteil, dass es keine getrennten Signalwege für jedes Preset gibt, was in diesem Fall aber schon Sinn machen würde. Ich empfehle dir für das "Bassboost" Setup das Superbass Modul empfehlen (klick!), gerade bei eher kleinen Treibern bringt das subjektiv einen deutlich "fetteren" Bass.

Nochmal zurück zum aktuellen Stand:
Wenn du beim Counter eine 3 eingibst müsste das Teil doch auf 4 zählen (0,1,2,3)? Da der Multiplexer keine 3 kennt (er erwartet am EIngang bei 3 Möglichkeiten ja nur 0, 1 oder 2) müsste bei der Zahl 3 einfach der letzte Ausgang weiterhin aktiv sein. Beim Taster drücken müsste von Option 1 auf 2 umgeschaltet werden, beim erneuten Drücken von 2 auf 3, nochmal drücken bleibt auf Option 3, nochmal drücken und wir sind wieder bei Option 1. Zumindest die Grafik im Analog Devices Wiki zeigt, dass ncht die Anzahl der Optionen eingestellt werden sondern der höchste Wert, auf den gezählt wird.

Deine nächste Hürde mit der lautstärkeabhängigen Bassanhebung ist kein großes Problem, auch dafür gibt es einen fertigen Block:
https://wiki.analog....hms/dynamicbassboost

Habe ich allerdings noch nie verwendet, wirst du ein bisschen rumspielen müssen bis es so läuft, wie du das dir vorstellst.
DTobi
Schaut ab und zu mal vorbei
#5 erstellt: 18. Aug 2017, 15:10
Danke für die Rückmeldung

Ich werde die ganzen Ideen testen und dann mal schauen, welches es leztendlich wird.
Die Umsetzung über verschiedene Hochpassfilter wird auf jedenfall genutzt !
SuperBass ist für die vier 8" Breitbänder wohl genau richtig.

Sorgen mache ich mir nur um den Stromverbrauch und die Rechenleistung des DSP bei
drei parallelen Audiosträngen
Das DSP berechnet dann ja dauerhaft alle drei Betriebsarten und schaltet nur eine davon auf
den Ausgang.

Oder macht das gar keinen Unterschied?

Zu dem ToggleCounter:
Ich habe es bereits getestet und der Multiplexer schaltet tatsächlich 1 -> 2 -> 3 -> 1 -> 2 -> 3 usw.
Eine Erkläung habe ich nicht, aber es funktioniert

Mit dem Dynamic Bass Boost habe ich schon etwas experimentiert, aber ich konnte keine wirkliche
Anpassung durch das Eingangssignal feststellen.
Soweit ich das verstanden habe, erhöht dieser Block auch nur Pegelabhängig, aber senkt diesen nicht unter Eingangsniveau
IPv6
Stammgast
#6 erstellt: 18. Aug 2017, 16:03
Ich würde an deiner Stelle tatsächlich die drei parallelen Signalwege nehmen.
Von der Rechenleistung dürfte das kein Problem sein, falls doch meckert SigmaStudio dass die verfügbaren Rechenoperationen pro Sample nicht ausreichen, um alle gewollten Funktionen auszuführen. Solange in jedem Zweig aber nur ein paar Filter sind ist das unkritisch.
Als Beispiel: In meinem größten Projekt mit den Boards hat ein Board drei Lookup Filter, eine drei Wege Weiche, das Superbass Modul, eine Multiplexer der zwischen dem Weg mit und dem Weg ohne Superbass Modul umschaltet. Außerdem einen Multiplexer, der umschaltet zwischen dem unveränderten Eingangssignal und dem Signal, dass die ganzen Filter usw durchlaufen hat. Zusätzlich wurden noch ein Poti und drei Schalter abgefragt um die Lautstärke der einzelnen Ausgänge der drei Wege Weiche zu verändern. Da sollte dein Projekt das DSP noch nicht wirklich auslasten.

Der Stromverbrauch wird ebenfalls nicht groß ansteigen, so wahnsinnig viel arbeiten muss der Prozessor dann auch wieder nicht. Nennenswert warm wird er dabei jedenfalls nicht wirklich.

Das mit dem ToggleCounter ist irgendwie komisch, wenn es auch super ist, dass es funktioniert.
Vielleicht ist dann da die Dokumentation von Analog Devices nicht ganz richtig?
Oder bin ich zu blöd um die Erklärung hier zu verstehen Wiki?

So rein logisch würde die 3 aber deutlich mehr Sinn machen, wenn es so funktioniert wie du es beschreibst. Denn ein einziger Zustand wäre dann unnötig, da gibts ja nichts zum umschalten. Für 2 Zustände könnte man den Toggle OnOff verwenden, der ja bis zwei zählt. Und für alles ab 3 Zuständen nimmt man dann eben den Toggle Counter.
Wenn es so wäre wie im Wiki beschrieben würden sich drei durchschaltbare Zustände nur über Umwege realisieren lassen, was ja irgendwie Quatsch wäre.

Ich habe deinen Aufbau mal schnell zusammengesteckt und auch bei mir gibt eine eingestelle 3 nur drei Zustände aus und die LEDs wechseln sich brav ab. Wird eine 4 eingestellt bleibt nach einem Tastendruck alle LEDs aus, offenbar findet der Demultiplexer keinen vierten Ausgang zum ansteuern und schaltet dann alle ab, also bleibt nicht der letzte Ausgang aktiv sondern es sind alle deaktiviert bei einer "ungültigen" Zahl am Eingang.

Mit einem "DSP Readback" Block lässt das dann auch entgültig klären: Der Toggle Counter spuckt bei einer eingestellten 3 am Ausgang 0, 1 und 2 aus, danach geht es wieder mit 0 weiter. Bei eingestellter 5 zählt er entsprechend bis 4 und macht dann mit 0 weiter.

Unbenannt

Mit dem Dynamic Bassboost kann ich dir wie gesagt nicht wirklich weiterhelfen. Viellciht hilft es, sich mit einer Pegelanzeige anzeigen zu lassen, welchen Pegel das Signal überhaupt bringt und dann mal mit relativ extremen Werten für den Boost anzufangen, damit man auch wirklich mitbekommt wenn sich etwas tut?
DTobi
Schaut ab und zu mal vorbei
#7 erstellt: 21. Aug 2017, 17:54
Also ich bin nun schon ein ganzes Stückchen vorwärts gekommen.
Der Dynamic Bassboost ist leider nichts für mich.

Ich wollte nun einen Level Detector verwenden, der mir Zahlen für den Eingangspegel rauswirft.
Diese möchte ich dann wieder in einem Multiplexer verarbeiten und so denn noch die Pegelabhänigkeit grob verarbeiten.

Eine Frage zur Linear Gain Funktion hätte ich gerade aber schonmal.
Scheinbar kann ich mithilfe dieser Funktion das Eingangssignal intern verstärken, so das der
Ausgangspegel steigt.

Wenn ich den Faktor 4-5 wähle, ist der Ausgangpegel so hoch,
dass ich mir den Vorverstärker vor meinem Class D PAM8610 sparen könnte.

Leider fällt das DSP bei stärkeren Bässen dabei aus, da wahrscheinlich die DACs überlastet werden.

Ich habe das ganze mit 16Ohm Kopfhörern getestet und glaube dieses Problem tritt bei angeschlossenem Verstärker nicht,
da dieser ja eine viel höhere Impedanz, bzw. Eingangswiderstand hat (= kleinerer Strom => weniger Belastung).

Oder Irre ich mich da?

Kann es leider nicht testen, ohne den Lausprecher dabei halb zerstören zu müssen...
IPv6
Stammgast
#8 erstellt: 23. Aug 2017, 18:31
Wieso ist der Dynamic Bassbosst nichts für dich? Zu welchen Ergebnissen bist du bei deinen Experimenten gekommen?

Von Tests mit Kopfhörern würde ich abraten, zumindest wenn diese direkt an das DSP angeschlossen sind. Das DSP enthält keinen Verstärker, der für Lasten wie Kopfhörer oder Lautsprecher ausgelegt ist. Ich habe das auch schon versucht und bemerkt, dass der Klang ordentlich verbogen wird, Bässe waren quasi überhaupt nicht mehr vorhanden. Beim Testen also immer einen Verstärker zwischenschalten!

Wenn ich das richtig verstehe möchtest du tiefe Frequenzen verstärken, bei höheren Gesamtlautstärken soll diese Verstärkung aber immer geringer werden, damit eine höhere Maximallautstärke möglich ist.
Beziehungsweise du möchtest tiefe Frequenzen bei hohen Lautstärken absenken. Absenkung bei hohen Lautstärken ist aber so ziemlich das Gleiche wie eine Anhebung bei niedrigem Pegel. Für eine Absenkung müsste der Bass nur pauschal abgesenkt werden, damit er bei hohen Lautstärken wieder verstärkt werden kann ohne, dass es zu viel wird. Das sollte mit dem Dynamischen Bassboost eigentlich machbar sein.

Vielleicht kann dieser Thread zum Verständniss des Blocks beitragen: https://ez.analog.com/thread/79874

Das in zwei Stufen zu machen klingt glaube ich nicht wirklich gut, da man den Sprung deutlich hören wird. Außerdem würde es keine zeitliche Bedingung geben, die erfüllt sein muss damit das System umschaltet. Somit wüden in leiseren Parts der Bass wieder dazugeschaltet werden, in lauteren Parts wieder weg. Wenn man sich nun ein VU Meter vorstellt und sich überlegt, dass immer an einem bestimmten Punkt etwas schlagartig verändert wird, passiert das ziemlich oft, immer im Takt zur Musik. So simpel ist das also nicht umsetzbar.


[Beitrag von IPv6 am 23. Aug 2017, 18:33 bearbeitet]
Suche:
Das könnte Dich auch interessieren:
Audio Multiplexer
-=Azrael=- am 31.05.2004  –  Letzte Antwort am 07.03.2012  –  8 Beiträge
Analog Multiplexer vs. Relais
Black_Tigra am 18.12.2016  –  Letzte Antwort am 27.12.2016  –  13 Beiträge
Lautstärkeregleung über Taster
DjDump am 13.09.2012  –  Letzte Antwort am 14.09.2012  –  6 Beiträge
Mehrere Taster über eine Signalleitung
willem am 20.05.2013  –  Letzte Antwort am 04.02.2018  –  10 Beiträge
AV-Switch per Taster / 3-fach Umschalter per Taster
adam_tensor am 31.01.2014  –  Letzte Antwort am 01.02.2014  –  5 Beiträge
aus micro-taster schalter machen
mookee am 27.09.2013  –  Letzte Antwort am 30.09.2013  –  7 Beiträge
Taster als Schalter nutzen
Schöni_1986 am 23.12.2006  –  Letzte Antwort am 02.01.2007  –  8 Beiträge
Gerät mit Taster einschalten
DesisfeiHiFi am 08.12.2008  –  Letzte Antwort am 11.04.2016  –  46 Beiträge
Schalter Taster Knöpfe
71joachim am 23.05.2011  –  Letzte Antwort am 24.05.2011  –  5 Beiträge
Taster / Schalter vergoldet
mephisto1111 am 02.06.2012  –  Letzte Antwort am 05.08.2012  –  16 Beiträge
Foren Archiv
2017

Anzeige

Produkte in diesem Thread Widget schließen

Aktuelle Aktion

Partner Widget schließen

  • beyerdynamic Logo
  • DALI Logo
  • SAMSUNG Logo
  • TCL Logo

Forumsstatistik Widget schließen

  • Registrierte Mitglieder925.731 ( Heute: 2 )
  • Neuestes MitgliedChriscOg
  • Gesamtzahl an Themen1.551.070
  • Gesamtzahl an Beiträgen21.537.345

Hersteller in diesem Thread Widget schließen