Forum: Mikrocontroller und Digitale Elektronik VU-Meter mit AVR in 1dB-Schritten bis -60dB


von Paul H. (powl)


Lesenswert?

Hi.

Einen ähnlichen Post hab ich schon mal vor 2 oder 3 Jahren abgesetzt 
aber mittlerweile ist mein Wissen größer und das soll jetzt tatsächlich 
mal umgesetzt werden.

Zwecks einer Audio-Visualisierung würde ich gerne den Bereich von 0dB 
bis -60dB eines eingehenden Audiosignals mit einem AVR erfassen können. 
Den Bezugspegel werde ich noch geschickt wählen. Den großen 
Dynamikumfang von 60dB und mehr hätte ich gerne, damit ich auch leise 
Passagen noch gut erfassen kann.

Nun hat der AVR nur einen 10-Bit ADC. Per Look-Up-Table könnte ich die 
gemessene Eingangsspannung logarithmieren. Theoretisch entspricht das 
Verhältnis 1:1024 einem Dynamikumfang von 60,2dB, praktisch kann ich den 
aber nicht vollständig nutzen, denn unterhalb von -43dB unterscheiden 
sich die einzelnen Ausgangswertde des ADC um weniger als 1LSB. Auch wenn 
mir die Referenzspannung des ADC selbst generiere und zwischen den 
erlaubten Grenzen von 1V und 5V variieren lasse erreiche ich dadurch nur 
zusätzliche knapp +14dB. Einige AVR besitzen ja noch eine interne 
Verstärkung um den Faktor 20, was noch mal +26dB entspricht. Gar nicht 
übel so weit.

Aber ist das wirklich der empfehlenswerte Weg oder würde es sich eher 
lohnen, gleich einen externen 16Bit-ADC zu nehmen? Oder dem internen ADC 
einen analogen logarithmierer vorzuschalten?

Wie macht das der Profi?

lg PoWl

von Uwe S. (de0508)


Lesenswert?

Kennst Du den AD8307 oder AD8310 ?

Mit der passenden Eingangsbeschaltung sind sie für Audiosignale zu 
gebrauchen.

von Joe F. (easylife)


Lesenswert?

Paul H. schrieb:
> Wie macht das der Profi?

24bit ADC ;-)

von Oldie (Gast)


Lesenswert?

Die interne Verstärkung bringt keinen höheren Dynamikumfang.

Wenn es amateurmäßig (auch vom Preis) beherrschbar sein soll,
empfiehlt sich z.B. ein MCP3202 (< 5 EU).
Mit so einem externen 2-Kanal 12-Bit ADC kommt man auf 69 dB
Dynamikumfang.

Nächster Schritt:

Mit vorgeschaltetem Präzisions-(Spitzen)-Gleichrichter, oder mit 
Echtzeitberechnung?

Der Gleichrichter muss schon recht präzise sein.

Die Echtzeitberechnung (wenn jeder Peak sauber erfasst werden
soll) erfordert 2 * 40 kSamples / s.
Das lässt dem typischen AVR kaum noch Zeit zum Rechnen...

von Paul H. (powl)


Lesenswert?

Es ist auch ok wenn ich das Signal nur mit einigen wenigen kHz abtaste, 
nicht mit vollen 40kHz. Da eh ein Peak-Hold-Algorithmus eingesetzt wird 
und der signifikante Anteil des Pegels sowieso in den niedrigeren 
Frequenzen steckt dürfte das völlig ausreichen.

Die interne Verstärkung bringt natürlich keinen höheren Dynamikumfang. 
Allerdings kann ich sie einschalten, wie gewohnt weitermessen und vom 
gemessenen dB-Wert einfach 26dB subtrahieren um wieder auf den 
tatsächlichen dB-Wert zu kommen. Genaugenommen komme ich damit sogar auf 
einen praktischen Dynamikumfang von 43+26 = 69dB. Gar nicht übel, sofern 
das einigermaßen rauschfrei funktioniert.

Einen Messgleichrichter möchte ich, zwecks einfachheit übrigens nicht 
davor schalten. Ich ignoriere entweder jede zweite Halbwelle oder koppel 
das Signal über einen C an Aref/2 an (womit ich wieder 6dB Dynamikumfang 
verliere). Damit verpasse ich vor allem bei Bassimpulsen wenigstens den 
Peak nicht.

: Bearbeitet durch User
von Oldie (Gast)


Lesenswert?

Nun ja, die peaks liegen meist wirklich im Bassbereich.
Oder werden (wenn sie sehr kurz sind) auch vom Ohr nicht
erfasst. - Eine sehr kurze Übersteuerung (clipping)
fällt dem Ohr auch nicht unbedingt auf - so dass der
Anzeigefehler damit nicht zu groß wird.
Richtig PROFESSIONELL bist du dann aber nicht mehr.

Wenn du dir mal ein paar Musikstücke als Wellenform
angesehen hast, würdest du nicht auf die Idee kommen, eine
Halbwelle zu unterdrücken!

Mit einem C an Aref/2 bleiben noch 63 dB.
Allerdings würde ich im Programm (bei 12 ADC) nicht mit
2^12 / 2 = 2048 als NULL-Wert rechnen, sondern mit dem
Wert, (Mittelwert) der sich ohne Einganssignal ergibt.

von c-hater (Gast)


Lesenswert?

Paul H. schrieb:

> Nun hat der AVR nur einen 10-Bit ADC. Per Look-Up-Table könnte ich die
> gemessene Eingangsspannung logarithmieren. Theoretisch entspricht das
> Verhältnis 1:1024 einem Dynamikumfang von 60,2dB, praktisch kann ich den
> aber nicht vollständig nutzen, denn unterhalb von -43dB unterscheiden
> sich die einzelnen Ausgangswertde des ADC um weniger als 1LSB.
> [...]
> Aber ist das wirklich der empfehlenswerte Weg oder würde es sich eher
> lohnen, gleich einen externen 16Bit-ADC zu nehmen? Oder dem internen ADC
> einen analogen logarithmierer vorzuschalten?

> Wie macht das der Profi?

Der überlegt, ob es wirklich wichtig ist, zwischen -43dB und -60dB 
wirklich jedes verschissene dB auflösen zu können und kommt, ohne viel 
nachdenken zu müssen, vollkommen unvermeidlich zu dem Schluß: Nein, das 
ist kompletter Unsinn, zu absolut nix wirklich nutzbar oder gar wirklich 
nützlich...

Reicht dir das?

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


Lesenswert?

c-hater schrieb:
>> Wie macht das der Profi?
>
> Der überlegt, ob es wirklich wichtig ist, zwischen -43dB und -60dB
> wirklich jedes verschissene dB auflösen zu können und kommt, ohne viel
> nachdenken zu müssen, vollkommen unvermeidlich zu dem Schluß: Nein, das
> ist kompletter Unsinn, zu absolut nix wirklich nutzbar oder gar wirklich
> nützlich...

Dazu sollte man vielleicht noch anmerken, daß 3dB ungefähr das sind, was 
man mit dem nackten Ohr an Lautstärkeunterschied auflösen kann. Sprünge 
von 1dB sind vielleicht für einen Lautstärkesteller angemessen, aber für 
eine Pegelanzeige sind sie Overkill.

von Paul H. (powl)


Lesenswert?

c-hater schrieb:
> Der überlegt, ob es wirklich wichtig ist, zwischen -43dB und -60dB
> wirklich jedes verschissene dB auflösen zu können und kommt, ohne viel
> nachdenken zu müssen, vollkommen unvermeidlich zu dem Schluß: Nein, das
> ist kompletter Unsinn, zu absolut nix wirklich nutzbar oder gar wirklich
> nützlich...

Huiuiui, da hat aber einer ne Laune :-D

Dennoch: passabler Einwand. Ich habe jetzt aber nur von 
Audio-Visualisierung gesprochen, nicht explizit von VU-Meter. Für einen 
echten VU-Meter im Sinne eines Messinstruments würden 3dB-Schritte wohl 
auch reichen, da geb ich dir völlig recht. Meine Visualisierung fällt 
aber eher unter Lichtspielerei, da darfs dann ruhig auch mal 
1dB-Auflösung sein, denn die Visualisierung soll sich auf den 
anliegenden Pegel auch adaptiv etwas anpassen, und da sind 3dB schon zu 
grob.

von Pandur S. (jetztnicht)


Lesenswert?

Ich wuerd einen Hardware Logarithmierer zB AD8310, verwenden, tiefpassen 
und in den ADC des AVR. Dabei ist zu beachten, dass ein AD8310 eine 
Bandbreite von ueber 400MHz hat, und in diesem Bereich alles 
verarbeitet. Dh die kleinsten Signale sind immer Rauschen. Dh man muss 
sich viel Muehe geben, um das Rauschen fernzuhalten.

von Sommerhitze (Gast)


Lesenswert?

Paul H. schrieb:
> Ich habe jetzt aber nur von
> Audio-Visualisierung gesprochen, nicht explizit von VU-Meter

Dann lies doch mal den Betreff Deines Posts.

von Paul H. (powl)


Lesenswert?

Jetzt N. schrieb:
> Ich wuerd einen Hardware Logarithmierer zB AD8310, verwenden, tiefpassen
> und in den ADC des AVR. Dabei ist zu beachten, dass ein AD8310 eine
> Bandbreite von ueber 400MHz hat, und in diesem Bereich alles
> verarbeitet. Dh die kleinsten Signale sind immer Rauschen. Dh man muss
> sich viel Muehe geben, um das Rauschen fernzuhalten.

Solche ICs hab ich auch noch nicht gesehen. Das wäre dann in der Tat die 
Profi-Variante.

Ich probier jetzt erst mal aus, mit einem ATtiny26 zu logarithmieren und 
melde mich die Tage mal. Je nachdem wie erfolgreich das ist, kann ich 
noch auf andere Methoden umschenken. Spezialbauteile wollte ich halt 
nach Möglichkeit vermeiden bzw. erst ein mal so einfach wie möglich ans 
Ziel kommen :)

: Bearbeitet durch User
von Michael B. (laberkopp)


Lesenswert?

Paul H. schrieb:
> Wie macht das der Profi?

Einen passenden uC auswählen der gleich 14 bit A/D besitzt, z.B. 
MSP430FE4232  der gleich 2 x 60 Segmente auf einem LCD ansteuern kann 
(ich glaube der ADC kann 4ksps, sollte für VU-Meter reichen).
Da ein LCD keinen hohen Strom braucht, entfallen weitere Treiber.

Da du vermutlich kein LCD fertigen lassen kannst, brauchst du aber einen 
uC mit mehr Strom und trotzdem noch Treiber. Dann nimm einen externen 
Audio-ADC durchaus älterer und billigerer Form, wie PCM1801.

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


Lesenswert?

Wenn ich das machen müßte, dann würde ich analog (naja, fast) 
logarithmieren. Das geht übrigens durchaus auch besser als über eine 
Diodenkennlinie. Ein schnuckeliges Verfahren ist im Buch "Schaltungs- 
praxis für Meßgeräte" (Militärverlag der DDR) beschrieben.

Die Grundidee für den Logarithmierer ist, daß man das Eingangssignal 
(Gleichspannung) mit einem differenzierten (CR-Glied) Rechtecksignal 
vergleicht. Nach dem Differenzierglied hat man ja einen zeitlichen 
Abfall der Spannung gemäß e-Funktion. Wenn man das mit einer 
Gleichspannung vergleicht, dann kommt aus dem Komparator ein 
Rechtecksignal, dessen Tastverhältnis (aka Mittelwert) gleich dem 
Logarithmus der Spannung ist.

Wenn man jetzt sowieso einen µC verwendet, dann kann man das Tast- 
verhältnis auch direkt auswerten. Dazu erzeugt man das Rechtecksignal 
mit einem Output Compare Kanal eines Timers. Und die Ausgänge der 
Komparatoren sampled man mit zwei Input Capture Kanälen. Braucht man 
nicht mal mehr einen ADC.

Vor die beiden Komparatoren muß jeweils noch ein Spitzenwertgleich- 
richter. Natürlich aktiv mit OPV. Dahinter ein kleines Siebglied, 
angepaßt an die Abtastrate des Logarithmierers und die gewünschte 
zeitliche Auflösung für Peaks.

Komplett analog mit einem B084 (TL084) für Gleichrichter und Komparator, 
einem B555 als Rechteckgenerator und 4x A277 (ähnlich LM3914) für zwei 
LED-Ketten mit je 20 LEDs tickert das in einem alten Verstärker von mir.

von Grrrrr (Gast)


Lesenswert?

du brauchst aber auch Musik, die 60 dB Dynamik hat. Hört man einmal 5 
Minuten die einschlägigen Müllsender, die die Charts hoch und 
runterleiern, kommt man höchstens auf 10 dB - das ist der Sprecher, der 
gerade wieder erklärt, das man den geilsten aller geilen Sender hört.

Bei dynamischer Musik heißt das leise Stellen bei 40dB, damit sie 
überhaupt aus dem Umgebungsgeräusch herauskommen und 100dB wenns laut 
wird. Juchu!

von Paul B. (paul_baumann)


Lesenswert?

Grrrrr schrieb:
> du brauchst aber auch Musik, die 60 dB Dynamik hat.

Dafür gibt es extra Bands wie die "Soulful Dynamics"

https://www.youtube.com/watch?v=6pHQAGmo6ZM

MfG Paul

von Georg A. (georga)


Lesenswert?

>  die einschlägigen Müllsender, die die Charts hoch und runterleiern,

Das liegt da ausnahmsweise nicht an den Charts, sondern am Optimod/etc 
im, Sender. Die erzwingen typischerweise eine recht aggressive 
Gleichheit(Lautheit) des Pegels, damit man das Rauschen von UKW-Stereo 
nicht so merkt...

Andererseits bügeln sie damit auch die Unfähigkeit der 
Idi^H^H^HModeratoren aus, gescheit auszupegeln. Die meisten sind da 
nämlich der Meinung, dass ein Fader deshalb 10cm lang ist, damit man ihn 
immer punktgenau auf 8cm einstellen kann (0dB...). Man schaue doch nur 
mal auf die typischen Radiostudiobilder. Die Faderknöpfe sind immer in 
zwei Reihen, entweder ganz unten oder auf 0dB ;)

von Paul H. (powl)


Lesenswert?

Wenns mir nur um die Dynamik der Konservenmusik gehen würde, die wir so 
hören, würden mir ungefär 10dB Dynamikumfang auch reichen. Den großen 
Dynamikumfang brauche ich aber, da das Quellensignal aus verschiedenen 
Quellen wie Smartphone, iPod, und sonstigen mp3Playern stammt, welche 
nicht immer auf volle Lautstärke eingestellt sind und daher recht 
unterschiedliche Pegel liefern.

Für die Visualisierung möchte ich das Eingangssignal auf 
Vollaussteuerung normieren. Daher ist es geschickt, einige 10dB Reserve 
zu haben.

: Bearbeitet durch User
von Paul H. (powl)


Lesenswert?

Mir ist gerade ein Denkfehler meinerseits aufgefallen. Wenn ich das 
Audio-Signal über einen Koppel-C auf AREF/2 lege ist der Offset-Wert bei 
511. Wenn ich nun den x20 Gain noch mit drauf haue verstärkt der den 
Offset ja mit. Das funktioniert so nicht.

Jetzt ist mir beim ATtiny261 aufgefallen, dass der nicht nur 
differentiell sondern auch bipolar messen kann! Gar nicht übel, dieser 
Tiny hat den komfortabelsten integrierten ADC.

Ich werde mal einen ATtiny861 bei Reichelt ordern. Das Audio-Signal kann 
ich ja dann per C auf einen virtuellen GND von AVCC/2 koppeln und 
differenziell bipolar messen. Somit ist der gemessene Wert immer bezogen 
auf den virtuellen GND. Nebenbei stehen mir dann noch die 
Verstärkungsfaktoren von 8, 20, oder 32 (+18dB, +26dB, +30dB) zur 
Verfügung. Damit bin ich ziemlich flexibel, damit lässt sich arbeiten.

von spess53 (Gast)


Lesenswert?

Hi

>Jetzt ist mir beim ATtiny261 aufgefallen, dass der nicht nur
>differentiell sondern auch bipolar messen kann! Gar nicht übel, dieser
>Tiny hat den komfortabelsten integrierten ADC.

Hä? Bipolar differential messen können alle AVRs mit differentiellen 
Eingängen. Die ATTinyx61, wie auch Attinyx4/x5/x7, haben zusätzlich 
einen unipolar differential Mode. Bei dem muss der positive Eingang 
immer >= dem negativen Eingang sein.

MfG Spess

von Paul H. (powl)


Angehängte Dateien:

Lesenswert?

Das ist nicht richtig. Der ATtiny26 kann nur unipolar differenziell. 
Siehe Datenblatt Seite 94/95 ;-)

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.