Forum: Mikrocontroller und Digitale Elektronik Analoger Demultiplexer mit Automatik oder andere Lösungsmöglichkeiten


von AMDFreak (amdfreak2006)


Lesenswert?

Hallo zusammen,

einigen geläufig ist eventuell der MSGEQ7 IC von Mix-Sig, welcher 7 
Bandpässe mit einem "automatischen" Multiplexer vereint um auf der Basis 
die Spitzenwerte im jeweiligen Frequenzband festzuhalten. Nutzbar ist 
das ganze bspw. für Audiobasierte Lichtspielereien.

Anbei mal der Link zum Datenblatt des MSGEQ7: 
https://mix-sig.com/images/datasheets/MSGEQ7.pdf

Diesen IC mit einem Microcontroller anzusteuern und auszuwerten ist gar 
kein Problem. Ich habe mir allerdings als Ziel gesetzt, mal was ohne 
Programmierung elektronisch umzusetzen und da stellt sich die Frage ob 
so etwas komplexes überhaupt noch ohne Microcontroller umsetzbar ist...

Die Ansteuerung des MSGEQ7 selbst kann man durchaus noch 
bewerkstelligen. Im Datenblatt (siehe oben) ist eine Schaltung 
angegeben, die bei Entfernen der Fehler (Q6 statt Q7 am Schieberegister 
muss verwendet werden, keine Brücke zwischen Clock-Pin 1CP und 
Flip-Flop-Ausgang 1Q, neues Signal bei fallender, nicht bei steigender 
Taktflanke, etc.) auch durchaus erst mal funktioniert.
Als Clock-Taktgeber lässt sich ja ein ICM 7555 (Link: 
https://www.nxp.com/docs/en/data-sheet/ICM7555.pdf) oder Ähnliches 
nutzen.

Allerdings stellt sich nun die Frage, wie man den multiplexten 
Datenstrom des MSGEQ7 bspw. auf 7 getrennte Ausgänge, bspw. mit daran 
angeschlossenen LEDs oder MOSFETs aufteilen kann.

Meine Idee hier war:
- Analoger 1:8 Demultiplexer nutzen, wie bspw. den 74HC4051 (Link: 
https://assets.nexperia.com/documents/data-sheet/74HC_HCT4051.pdf)
- Dahinter jeweils ein LTC6992-1 (Link: 
https://www.analog.com/media/en/technical-documentation/data-sheets/ltc6992-1-6992-2-6992-3-6992-4.pdf) 
oder alternative Lösungen wie 
https://www.maximintegrated.com/en/design/technical-documents/app-notes/5/5718.html 
um aus dem gegebenen Spannungspegeln PWM-Signale für die LEDs oder 
größere Lasten via MOSFETs zu machen.

Das Problem was sich mir stellt ist, dass es scheinbar keine 
"Automatik"-Demultiplexer gibt. Soll heißen, der MSGEQ7 schaltet seinen 
Multiplexer bei jeder fallenden Taktflanke eigenständig immer einen 
Kanal weiter. Die bislang von mir gefundenen Demultiplexer fordern aber 
allesamt eine eigenständige Auswahl mittels separater Pins, auf welchen 
Ausgang die aktuellen Daten gelegt werden sollen.

Daher die Frage: Gibt es analoge Demultiplexer die eigenständig bei 
jedem Clockcycle einen Ausgang weiter schalten können oder wie könnte 
man das oben beschriebene Problem anderweitig lösen?

Wie gesagt, per Microcontroller alles überhaupt kein Problem. Mir geht 
es um die Herausforderung besagte Ansteuerung und Auswertung mal mit 
dedizierten Bauelementen ohne Sourcecode, also quasi "wie früher" zu 
lösen, sofern das überhaupt möglich ist.

Zuletzt noch eine Frage zum MSGEQ7-Datenblatt:
Was besagt der Parameter Band Offset Difference <= 200 mV?
Ich verstehe den Wert so, dass zwischen den 7 Bändern der Ruhepegel 
bereits maximal 200 mV auseinander liegen kann (Rauschen). Die 
Grundausgangsspannung also (zusammen mit dem Output Offset von maximal 
600 mV) irgendwo zwischen 0 und 800 mV pro Kanal liegt. Oder 
interpretiere ich das falsch?

Danke schon mal im Voraus

: Bearbeitet durch User
von Axel S. (a-za-z0-9)


Lesenswert?

AMDFreak2006 schrieb:

> einigen geläufig ist eventuell der MSGEQ7 IC von Mix-Sig, welcher 7
> Bandpässe mit einem "automatischen" Multiplexer vereint um auf der Basis
> die Spitzenwerte im jeweiligen Frequenzband festzuhalten.

> https://mix-sig.com/images/datasheets/MSGEQ7.pdf

An dem Multiplexer ist nichts automatisches.

> Daher die Frage: Gibt es analoge Demultiplexer die eigenständig bei
> jedem Clockcycle einen Ausgang weiter schalten können oder wie könnte
> man das oben beschriebene Problem anderweitig lösen?

Es ist keine Raketenwissenschaft, einen Zähler vorzusehen, der die 
Adressbits des Multiplexers bedient und seinerseits von einem Reset- und 
einem "Nächster Kanal"-Signal gesteuert wird.

Meine Güte. Was für ein Sermon für so ein triviales Problem!

von Audiomann (Gast)


Lesenswert?

Der Pegel kommt als Analogwert raus?
Wie schnell kann man multiplexen und wie will man sicherstellen, dass 
die Werte die Lampen erreichen? Braucht ja irgendwie eine 
n-Kanal-Leistungsansteuerung. Die umzuschalten wird kaum gehen, wenn man 
16kHz verarbeiten möchte, weil man das mindestens mit 32kHz abtasten 
muss -> 200kHz Umschaltrate.

Also alle auslesen und analog speichern. RC-Kombination gfs.

von AMDFreak (amdfreak2006)


Lesenswert?

Axel S. schrieb:
> Es ist keine Raketenwissenschaft, einen Zähler vorzusehen, der die
> Adressbits des Multiplexers bedient und seinerseits von einem Reset- und
> einem "Nächster Kanal"-Signal gesteuert wird.
>
> Meine Güte. Was für ein Sermon für so ein triviales Problem!

Auf die Idee mit nem Zähler für die Adressansteuerung muss man ja erst 
mal kommen. In dem Sinne überlese ich mal deinen negativen Unterton und 
danke dir für den wertvollen Tipp!

von Axel S. (a-za-z0-9)


Lesenswert?

AMDFreak2006 schrieb:
>
> Auf die Idee mit nem Zähler für die Adressansteuerung muss man ja erst
> mal kommen.

Du meinst also wenn ich dir eine Backbox zeigte, die Ausgänge für 8 LED 
und zwei Eingänge hat und bei der ein Impuls an dem einen Eingang eine 
LED weiter schaltet und bei einen Impuls am anderen Eingang wieder auf 
die erste LED schaltet ... dann würdest du keinen Zähler darin vermuten?

Bist du dir sicher bei der Wahl deines Hobbies?

von AMDFreak (amdfreak2006)


Lesenswert?

Audiomann schrieb:
> Der Pegel kommt als Analogwert raus?
> Wie schnell kann man multiplexen und wie will man sicherstellen, dass
> die Werte die Lampen erreichen? Braucht ja irgendwie eine
> n-Kanal-Leistungsansteuerung. Die umzuschalten wird kaum gehen, wenn man
> 16kHz verarbeiten möchte, weil man das mindestens mit 32kHz abtasten
> muss -> 200kHz Umschaltrate.
>
> Also alle auslesen und analog speichern. RC-Kombination gfs.

Hallo Audiomann,
abtasten brauchst du hier nicht. Der MSGEQ7 arbeitet von außen gesehen 
völlig analog. Mit dem Clockcylce bestimmst du nur das Umschalten 
zwischen der Ausgabe des jeweiligen Kanals des MSGEQ7 Multiplexers.
Stellst du den Clocktakt in dem Moment aus, wo der 16 kHz Kanal 
ausgegeben wird erhältst du den kontinuierlich aktualisierten 
Spitzenwert dieses Kanals.
Intern arbeitet der MSGEQ7 natürlich teildigital mit eigenem Taktgeber 
bei 165 kHz bspw. für die Spitzenwerterfassung hinter den analogen 
Bandpässen.

Dein Argument wirft aber dennoch eine wichtige Frage auf.
Wie könnte man das, sagen wir mal, 1-2 ms anliegende Signal pro Kanal 
speichern, um es dann den Voltage to PWM-Convertern zuzuführen?
RC-Kombination klingt brauchbar, wobei da die Frage ist, ob sie die 
Ladung a) schnell genug aufbauen und b) lange genug halten, um eine 
korrekte Übertragung an die PWM-Bausteine sicherzustellen.
Gäbe es Alternativen dazu, ggf. auch ICs, die analoge Spannungspegel 
einfach halten und kontinuierlich "erneuern". Quasi ähnlich wie 
digitaler RAM-Arbeitsspeicher in Computern?

von Dergute W. (derguteweka)


Lesenswert?

Moin,

Das ist wohl so ein Problem aus der Abteilung: Eigentlich will ich einen 
100m Sprint hinlegen, aber aus Gruenden bind' ich meine Beine zusammen, 
tu' mir einen Sack ueber'n Kopp und trink vor dem Start 2l Sprudel auf 
Ex.

Aber was sag ich: Ich hab's genau umgekehrt gemacht: Sowas ohne MSGEQ7, 
nur mit µC - ist auch nicht besser ;-)

scnr,
WK

von AMDFreak (amdfreak2006)


Lesenswert?

Axel S. schrieb:
> AMDFreak2006 schrieb:
>>
>> Auf die Idee mit nem Zähler für die Adressansteuerung muss man ja erst
>> mal kommen.
>
> Du meinst also wenn ich dir eine Backbox zeigte, die Ausgänge für 8 LED
> und zwei Eingänge hat und bei der ein Impuls an dem einen Eingang eine
> LED weiter schaltet und bei einen Impuls am anderen Eingang wieder auf
> die erste LED schaltet ... dann würdest du keinen Zähler darin vermuten?
>
> Bist du dir sicher bei der Wahl deines Hobbies?

Ja, ich mache das schon seit knapp 10 Jahren. Allerdings eben auf 
Microcontrollerseite per Programmierung.
Auf die Idee einen dedizierten Zähler-IC zum binären Hochzählen der 
Adresse zu verwenden, bin ich halt schlichtweg nicht gekommen, auch wenn 
das die naheliegendste Lösung ist. Manchmal steht man halt aufm Schlauch 
und sieht Komplexität, wo gar keine ist.

Warum so unfreundlich? Wenn dich das Thema nervt oder dir zu einfach 
erscheint, dann antworte doch schlichtweg nicht und mache was 
Sinnvolleres mit deiner Zeit...

von AMDFreak (amdfreak2006)


Lesenswert?

Dergute W. schrieb:
> Moin,
>
> Das ist wohl so ein Problem aus der Abteilung: Eigentlich will ich einen
> 100m Sprint hinlegen, aber aus Gruenden bind' ich meine Beine zusammen,
> tu' mir einen Sack ueber'n Kopp und trink vor dem Start 2l Sprudel auf
> Ex.
>
> Aber was sag ich: Ich hab's genau umgekehrt gemacht: Sowas ohne MSGEQ7,
> nur mit µC - ist auch nicht besser ;-)
>
> scnr,
> WK

Hab ich auch alles schon hinter mir. Mit auf dem Microcontroller 
laufender FFT und dann auf der Basis Lichteffekte realisiert. Wie 
gesagt, aufm Microcontroller alles kein Problem. Macht doch aber auch 
mal Spaß, Probleme ohne unseren multifunktionellen Helfer zu lösen.

von Andreas M. (amesser)


Lesenswert?

Wozu PWM? Du packst das Signal nach dem Demultiplexer auf je einen RC 
Filter oder einen einfachen Sample&Hold mit Opamp. Mit dem Analogwert 
dann eine Stromsenke steuern (Transistor+Widerstand)

von AMDFreak (amdfreak2006)


Lesenswert?

Andreas M. schrieb:
> Wozu PWM? Du packst das Signal nach dem Demultiplexer auf je einen RC
> Filter oder einen einfachen Sample&Hold mit Opamp. Mit dem Analogwert
> dann eine Stromsenke steuern (Transistor+Widerstand)

Danke für den Tipp. Sample & Hold per Opamp klingt nach einer guten 
Lösung.

Zu deiner Frage: PWM wäre nicht zwingend erforderlich, ich möchte aber 
die Möglichkeit haben Lasten per MOSFETs anzusteuern und die sollen 
natürlich möglichst effizient im Schaltbetrieb arbeiten und nicht 
abhängig von der analogen Spannung nur halb aufgesteuert werden. Daher 
ist die Umwandlung zu PWM in diesem Fall erforderlich.

: Bearbeitet durch User
von Dergute W. (derguteweka)


Lesenswert?

AMDFreak2006 schrieb:
> Macht doch aber auch
> mal Spaß, Probleme ohne unseren multifunktionellen Helfer zu lösen.

Da kann ich nur die grosse deutsche Philosophin Narumol Unterhuber 
zitieren:
"Ja, wenn du das schaffst"

Gruss
WK

von c-hater (Gast)


Lesenswert?

AMDFreak2006 schrieb:

> Macht doch aber auch
> mal Spaß, Probleme ohne unseren multifunktionellen Helfer zu lösen.

Nicht wirklich. Wird schlechter, aufwendiger und teurer. Was soll so ein 
Ergebnis dann noch an Spaß bereiten?

Insbesondere unter dem Aspekt, dass man auch noch Hilfe "einkaufen" 
musste, um zu dieser Lösung zu kommen, sie also nichtmal wirklich selbst 
gefunden hat.

Wer an sowas dann Spaß hat, ist irgendwie wohl doch etwas abartig...

von AMDFreak (amdfreak2006)


Lesenswert?

c-hater schrieb:
> Nicht wirklich. Wird schlechter, aufwendiger und teurer. Was soll so ein
> Ergebnis dann noch an Spaß bereiten?
>
> Insbesondere unter dem Aspekt, dass man auch noch Hilfe "einkaufen"
> musste, um zu dieser Lösung zu kommen, sie also nichtmal wirklich selbst
> gefunden hat.
>
> Wer an sowas dann Spaß hat, ist irgendwie wohl doch etwas abartig...

Sehe ich anders.
20 Zeilen Code für die Ansteuerung des MSGEQ7 um das mitm 
Microcontroller und ein paar Libraries zu lösen führt zwar zum 
schnellsten und leichtesten Ergebnis, Aufwand hat man dann aber 
keinerlei reingesteckt.

Und auch die Libraries, wenn man sie nicht selbst programmiert, hat ja 
schon jemand geschrieben. Auch da wurde einem dann schon 99% der 
Implementierungsarbeit und Lösungsfindung zur Ansteuerung eines externen 
ICs oder zur Lösung einer x-beliebigen anderen Aufgabe abgenommen.

Wo liegt dann da der Spaß?

Es geht ja hier nicht um ein Projekt das wirtschaftlich tragen muss, 
sondern schlichtweg um eine Machbarkeitsstudie.

Dass man sich ab und zu mal Hilfe einholen muss, ist im 
Programmieralltag auch nicht anders. Ist eine Programmierlösung dann für 
dich auch nur dann erfüllend, wenn du sie zu 100% selbst gefunden hast? 
Dann bräuchten wir ja dieses und ähnliche Foren nicht mehr, weil es dann 
ja keinerlei Mehrwert bedeuten würde sich gegenseitig zu helfen.

Der Weg ist das Ziel und der Lerneffekt bei diesem Hardware-Only-Projekt 
somit bedeutend höher und wertvoller als das mit nem Microcontroller zu 
machen, nur weil das ja die einfachere und zeitsparendere Lösung ist.
Diese einfache Lösung habe ich wohlgemerkt bereits umgesetzt. Mir gings 
darum mal über den Tellerrand hinauszuschauen.
Wäre mir neu, dass das Ziel bei einem Hobby ist Zeit zu sparen. Wenns 
dir nur um das Ergebnis geht, kannst du auch ne fertige Platine mit dem 
Chip und fertigem Microcontrollerprogramm kaufen. Geht bedeutend 
schneller und macht aus deiner Sicht dann ja sehr viel Spaß.

Stelle mir dich gerade bei anderen Projekten vor. Oldtimer-Restaurierung 
oder ähnliches. Dann wäre deine erste Frage vermutlich warum baut man 
nicht einfach LEDs ein statt der originalen Gaslaterne. Letztere ist ja 
schließlich "schlechter, aufwendiger und teurer".

: Bearbeitet durch User
von Andi (Gast)


Angehängte Dateien:

Lesenswert?

Wenn du nur die Bänder mit LEDs anzeigen willst, musst du eigentlich 
nicht demultiplexen. Lass die LEDs einfach nacheinander den Pegel am OUT 
anzeigen. Wenn das genügend schnell passiert sieht das Auge alle LEDs 
zusammen.

Eine möglich Schaltung ist im Anhang. Die Spannung am OUT wird vom 
Transistor in einen Strom umgesetzt, der die gerade selektierte LED in 
entsprechender Stärke leuchten lässt. Da ich den Spannungsbereich am OUT 
nicht kenne, muss dieser Teil vielleicht etwas angepasst werden, und vor 
allem müssen die richtigen Widerstände gefunden werden.
Der CD4017 selektiert einfach alle LEDs nacheinander, nach dem er zuerst 
den MSGEQ7 resetet. Der nötige Oszillator kann mit einem 
Schmitt-Trigger-Inverter realisiert werden.

Andi

von Andi (Gast)


Lesenswert?

Edit: D sollte eigentlich OUT heissen.

von AMDFreak (amdfreak2006)


Lesenswert?

Andi schrieb:
> Wenn du nur die Bänder mit LEDs anzeigen willst, musst du eigentlich
> nicht demultiplexen. Lass die LEDs einfach nacheinander den Pegel am OUT
> anzeigen. Wenn das genügend schnell passiert sieht das Auge alle LEDs
> zusammen.
>
> Eine möglich Schaltung ist im Anhang. Die Spannung am OUT wird vom
> Transistor in einen Strom umgesetzt, der die gerade selektierte LED in
> entsprechender Stärke leuchten lässt. Da ich den Spannungsbereich am OUT
> nicht kenne, muss dieser Teil vielleicht etwas angepasst werden, und vor
> allem müssen die richtigen Widerstände gefunden werden.
> Der CD4017 selektiert einfach alle LEDs nacheinander, nach dem er zuerst
> den MSGEQ7 resetet. Der nötige Oszillator kann mit einem
> Schmitt-Trigger-Inverter realisiert werden.
>
> Andi

Vielen Dank für die wertvolle Idee! Zwar nicht PWM-tauglich, aber 
funktionieren würde die Schaltung natürlich allemal.

Ich hatte es jetzt simulativ erst mal so gelöst wie zuvor vorgeschlagen, 
sprich Binärcounter und Demultiplexer dahinter. Funktioniert soweit, ich 
habe jedoch 3 weitere Fragen:

1.) Die vorgeschlagene Sample & Hold Schaltung mit OPamps stellt mich 
noch vor Herausforderungen. Das Samplen soll ja nur erfolgen, wenn 
gerade aktiv ein Signal vom Demultiplexer ausgegeben wurde, nicht wenn 
dieses auf GND liegt (während der restlichen 6 abgetasteten 
Audiobänder). Um bspw. nur bei jedem 8. Takt zu samplen, wäre meine Idee 
hier wieder nen Counter oder alternativ nen Dekadenzähler einzusetzen, 
dessen "Überlauf-Pin" dann als Taktgeber für die Sample & Hold-Schaltung 
dient. Bessere Ideen?

2.) Bei der Originalschaltung gemäß Datenblatt vom MSGEQ7 (siehe erster 
Post) muss der negierte asynchrone Set-Eingang des Flipflops am Anfang 
einmalig per Taster für beliebige Zeit auf LOW-Pegel gezogen werden und 
dann wieder HIGH-Pegel annehmen.
Da ich möchte dass die Schaltung automatisch startet, war meine Idee 
schlichtweg ein RC-Glied mit nachgeschaltetem Schmitt-Trigger anstelle 
des Tasters zu verwenden. Das funktioniert auch einwandfrei aber gibt es 
eine einfachere oder bessere Möglichkeit eine "einmalige Aktion" (wie 
besagter zeitverzögerter Wechsel von HIGH zu LOW zu HIGH-Pegel) 
schaltungstechnisch umzusetzen?

3.) Deine Schaltung mit dem CD4017 habe ich ebenfalls mal kurz 
simuliert. Funktioniert soweit. Allerdings ist der Reset == HIGH Pegel, 
der vom Timer kommt, natürlich a) nur kurz anstehend, bevor der Baustein 
neu mit dem Zählen anfängt und b) natürlich hochgradig abhängig von der 
Taktfrequenz. Der MSGEQ7 verlangt aber eine bestimmte Mindestzeit, wie 
lange der Reset-Pin gesetzt werden muss, um sauber durch den Reset zu 
gehen.
Wie wäre es also möglich die Zeit die der Reset Pin HIGH gesetzt wird, 
zu erhöhen (in deinem Bild Pin Q8)?
- Ein RC-Glied hilft hier nicht, weil der Kondensator in dem 1 
Clockcycle den der HIGH-Pegel anliegt, nicht genügend aufgeladen wird, 
um nennenswert beitragen zu können.
- Man könnte natürlich ein Flipflop nehmen, den Wert asynchron setzen, 
wenn Q7 HIGH wird und parallel einen weiteren Dekadenzähler oder Counter 
mit ENABLE-Pin nutzen, der dann anfängt zu zählen und beim (selbst 
definierten) Überlauf nen entsprechenden Pegel auf den Reseteingang vom 
Flipflop legt.
Kurz oder anders gefragt: Wie erzeuge ich ein wiederkehrendes 
Schaltereignis mit selbst definierbarer HIGH oder alternativ 
LOW-Pegel-Zeit.

: Bearbeitet durch User
von c-hater (Gast)


Lesenswert?

AMDFreak2006 schrieb:

> 20 Zeilen Code für die Ansteuerung des MSGEQ7 um das mitm
> Microcontroller und ein paar Libraries zu lösen führt zwar zum
> schnellsten und leichtesten Ergebnis, Aufwand hat man dann aber
> keinerlei reingesteckt.

Das stimmt. Deswegen habe ich eine reine µC-Lösung geschaffen, die als 
Filter besser ist als der MSGEQ7. Und nebenbei auch noch eine bunte 
LED-Matrix ansteuern kann. Und wo das Erscheinungsbild dieser 
LED-Ausgabe konfigurierbar ist...

Und ich kann dir versichern: da habe ich einigen Aufwand reingesteckt. 
Langeweile machte es möglich und ließ es irgendwie sinnvoll erscheinen. 
Der eigentliche Antrieb war aber der Nachweis der Machbarkeit.

Guckst du:
Beitrag "Audio Spektrum Analyzer mit ATtiny85"

von AMDFreak (amdfreak2006)


Lesenswert?

AMDFreak schrieb:
> 1.) Um bspw. nur bei jedem 8. Takt zu samplen, wäre meine Idee
> hier wieder nen Counter oder alternativ nen Dekadenzähler einzusetzen,
> dessen "Überlauf-Pin" dann als Taktgeber für die Sample & Hold-Schaltung
> dient. Bessere Ideen?
>
> 2.) Gibt es
> eine einfachere oder bessere Möglichkeit eine "einmalige Aktion" (wie
> besagter zeitverzögerter Wechsel von HIGH zu LOW zu HIGH-Pegel)
> schaltungstechnisch umzusetzen?
>
> 3.) Wie wäre es also möglich die Zeit die der Reset Pin HIGH gesetzt wird,
> zu erhöhen (in deinem Bild Pin Q8)?
> Kurz oder anders gefragt: Wie erzeuge ich ein wiederkehrendes
> Schaltereignis mit selbst definierbarer HIGH oder alternativ
> LOW-Pegel-Zeit.

Hat auf meine 3 gestellten Detailfragen noch jemand eine Antwort parat?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.