Forum: Mikrocontroller und Digitale Elektronik VU-Meter mit Atmega 32


von L. M. (l_m)


Angehängte Dateien:

Lesenswert?

Hallo,
Ich würde mir gerne ein Digitales VU-Meter mit einen ATMEGA 32 bauen.
Nun habe ich mich einiges damit beschäftigt und einen Stromlaufplann 
erstellt, nun wollte ich hier einmal sicher gehen ob ich keinen Fehler 
gemacht habe und würde  euch hier bitten, einmal einen kurzen Blick 
darauf zu werfen.

Danke schon mal.

von Magic S. (magic_smoke)


Lesenswert?

Meiner Meinung nach müßte das für ein einfaches VU-Meter reichen. 
Wahrscheinlich störts dabei nicht, daß die negative Halbwelle des 
Audiosignals komplett verschwindet.

Die Widerstände zwischen Basis und Masse der LED-Treibertransistoren 
kannst Du vermutlich weglassen. Der AVR zieht seine Ausgänge sowieso 
aktiv nach Masse wenn man es nicht explizit anders möchte.

von L. M. (l_m)


Lesenswert?

Soll eigendlich nur zur Deko werden um den Bass anzuzeigen. Müsste mann 
dann noch eine Diode zu den Spannungsteiller Schalten das die negative 
Halbwelle nicht am AVR anliegt  oder hält er dies aus.
ok,
Noch ein Problem habe ich, ich kann das Signal nur direkt am Subwoofer 
abgreifen daher ändert sich der maximalpegel andauernd. Dies hätte ich 
so gelöst das ich ein Poti an eine der ADC channels schalte wo dann die 
Stellung misst.

So hätte ich das dann gerechnet das sich die maximal Lautstärke 
verändert.
z.B :

LED 1 leuchtet bei einen wert von 10
LED 2 bei 20
LED 3 bei 30
und so weiter

dann hätte ich den Wert vom ADCPOTI genommen :
 256 / ADCPOT1 = POT1 ( Um herauszufinden welche stellung)
LED 1 * POT = LED1 vergleichswert ( Um nen neuen wert für LED1 
auszurechnen bei angepasster Maximallautstärke)
AUDIO mit LED1 vergleichswert ,vergleichen ,wenn gleich oder höher LED1 
Leuchtet

THX schon mal :)

von tommy (Gast)


Lesenswert?

Spendier VCC und AVCC noch Abblockkondensatoren.

von Magic S. (magic_smoke)


Lesenswert?

Wenn ich Audio möglichst exakt mit dem ADC eines AVR messen möchte, würd 
ich Vref auf die internen 2,5V schalten und das Audio-Signal über einen 
Kondensator auf einen ADC-Pin einkoppeln, der von einem Spannungsteiler 
auf 2,5V gehalten wird. Damit hätte ich beide Halbwellen abgedeckt und 
die Auflösung reicht für ein VU-Meter locker ohne weitere Maßnahmen. 
Wenn Du damit sowieso an die Lautsprecherausgänge willst, mußt Du die 
Spannung eh noch über einen weiteren eingangsseitigen Spannungsteiler 
herabsetzen.

Wenn Du keine absoluten Werte angezeigt haben möchtest, sondern sich das 
VU-Meter an die jeweilige Lautstärke anpassen soll, kannst Du Dir in 
Software den Höchstwert aus dem ADC merken und das Signal an diesem 
skalieren. Diesen Höchstwert kannst Du dann auch absenken, wenn das 
Signal dauerhaft ein Stückchen darunter bleibt. Das überlasse ich mal 
Deiner Phantasie, da gibts viele Wege nach Rom und viele Möglichkeiten, 
wie es dem Anwender gefällt.

von L. M. (l_m)


Angehängte Dateien:

Lesenswert?

ok ich habe mal die Eingangsbeschaltung aufgezeichnet, ich hoffe ich 
habs richtig verstanden. Was ich noch nicht ganz kapiere warum Vref auf 
2,5V stellen.
Ok,

von Magic S. (magic_smoke)


Lesenswert?

Sorry, ich hatte oben einen kleinen Fehler drin. Ich meinte 1,25V für 
den ADC-Pin bei 2,5V Referenz. Du kannst natürlich auch 5V Vref nehmen 
und 2,5V für den ADC-Pin.

Wenn Du beide Halbwellen haben möchtest, mußt Du die negative über GND 
heben, damit der ADC sie messen kann. Wenn Du am Eingang ein Signal mit 
+-1,25V hast und es über einen Kondensator auf ein per Spannungsteiler 
auf 1,25V gehaltenen Pins koppelst, erscheint es dort als 0..2,5V 
Signal. Das kann der ADC messen, man muß nur beachten, daß die 
Nullstelle bei 1,25V liegt.

Geht natürlich auch mit 5Vss (+-2,5V) Signalen und 5V Vref.

von L. M. (l_m)


Lesenswert?

sry das ich jetzt erst antworte.
Mitm messen habs ich verstanden, aber wie unterteil ich die LEDs dann 
wenn da negative wert mitgemessen wird, Ich hätte des jetzt z.B so 
gemacht das bei 1V LED1 Leuchtet, bei 2V LED3 .... bis 5V LED5 bei eien 
VU-Meter mit 5LEDs. Bei meinem mit 19 hätte ich die 5V natürlich 
Logatitmisch unterteilt für 19LEDs.

von Mike (Gast)


Lesenswert?

L. M. schrieb:
> Müsste mann dann noch eine Diode zu den Spannungsteiller Schalten das die
> negative Halbwelle nicht am AVR anliegt oder hält er dies aus.
Das kommt drauf an, wer stärker ist - deine Audio-Quelle oder die 
interne Schutzdiode am Pin des µC. Atmel schickt in eine Application 
Note 230VAC über einen Widerstand direkt ohne weitere 
Spannungsbegrenzung auf einen I/O-Pin und nutzt dabei beide Schutzdioden 
(VCC und Gnd). Wenn deine Quelle also hochohmig genug ist, so dass der 
zulässige Strom nicht überschritten wird, ist das ok.

von MaWin (Gast)


Lesenswert?

magic smoke schrieb:
> Sorry, ich hatte oben einen kleinen Fehler drin. Ich meinte 1,25V für
> den ADC-Pin bei 2,5V Referenz

Prinzipiell ok, da allerdings ARef nicht mit einem Spannungsteiler 
belastbar wäre der niederohmig genug für AIn wäre, bräuchte man noch 
einen OpAmp um ARef zu buffern - da nimmt man lieber 5V für ARef und 
2.5V als Musikmasse.

von L. M. (l_m)


Lesenswert?

Mike schrieb:
> Das kommt drauf an, wer stärker ist - deine Audio-Quelle oder die
> interne Schutzdiode am Pin des µC. Atmel schickt in eine Application
> Note 230VAC über einen Widerstand direkt ohne weitere
> Spannungsbegrenzung auf einen I/O-Pin und nutzt dabei beide Schutzdioden
> (VCC und Gnd). Wenn deine Quelle also hochohmig genug ist, so dass der
> zulässige Strom nicht überschritten wird, ist das ok.

ok, dann brauch ich mir deswegen keine Sorgen machen

MaWin schrieb:
> da nimmt man lieber 5V für ARef und
> 2.5V als Musikmasse.

Das mit der Masse hab ich kapiert, aber wie Funktioniert die 
Unterteilung in 19LEDs wenn ich denn Minus Wert mitmesse.

von Magic S. (magic_smoke)


Lesenswert?

> Das mit der Masse hab ich kapiert, aber wie Funktioniert die
> Unterteilung in 19LEDs wenn ich denn Minus Wert mitmesse.
Wo ist dein Problem? :) Das ist alles Sache der Software.

Wie ich es probieren würde: Ich würde die Anzeige nur periodisch aus 
Extremwerten updaten, sonst ist der AVR vermutlich viel zu schnell und 
die Anzeige flackert nur wild hin und her. Also sagen wir als Beispiel 
und ohne es nachgerechnet zu haben ein paar tausend mal messen (wieviel 
man in vielleicht 0,1 Sekunden schafft wenn man die Anzeige alle 0,1 
Sekunden updaten will), bei den Messungen die Minimal- und Maximalwerte 
über diesen Zeitraum bestimmen, die Differenz dazwischen ist dann die 
Amplitude des Audiosignals. Wie man das dann anzeigt ist 
Geschmackssache. Auf jeden Fall irgendwie auf einen Anzeigebereich 
skalieren. Wenn man es linear 0-100% Aussteuerung haben will, bekommt 
man ein wenig über 5% für pro LED. Kann man natürlich auch logarithmisch 
anzeigen, dann muß man sich nicht so oft an das Audiosignal anpassen, 
weil dann kleine Signale von Hause aus höher aufgelöst werden.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

MaWin schrieb:
> Prinzipiell ok, da allerdings ARef nicht mit einem Spannungsteiler
> belastbar wäre der niederohmig genug für AIn wäre, bräuchte man noch
> einen OpAmp um ARef zu buffern - da nimmt man lieber 5V für ARef und
> 2.5V als Musikmasse.

Nö. Masse bleibt Masse. Auch für Audio. Der ADC-Pin wird auf ARF/2 
vorgespannt, und zwar nicht von AREF aus, sondern extra mit 2 gleichen 
Widerständen. Da AREF auch (A)VCC sein kann, nimmt man die Vorspannung 
auch von (A)VCC. Für normale Line-Signale mit 2Vss ideal. Durch 
Oversampling kann und Dezimation man die normalen 10Bit des ADC auf 
12Bit hochdrücken (die Erfassung ist dann noch schnell genug) und so 
noch kleinste Pegeländerungen detektieren. Been here, done that. More 
than once ;-)


L. M. schrieb:
> und würde  euch hier bitten, einmal einen kurzen Blick
> darauf zu werfen.

Transistoren sind im übrigen unnötig, wenn Du effiziente LEDs nimmst, 
die mit 2mA schon sehr hell sind (viele SMD-LEDs können das bereits). 
Spart einen Haufen Bauelementeaufwand.

Du kannst im Übrigen die doppelte Anzahl LEDs ansteuern, wenn Du ein 2. 
LED-Band aufbaust, welches gegenüber dem 1. verpolt ist. Dann nimmst Du 
2 Transistoren mit unterschiedlicher Zonenfolge auf einen Steuerpin, der 
zu 50% high und zu 50% low ausgibt. Die Transistoren werden mit ihrem 
Kollektor auf das jeweils passende LED-Band geschaltet. Die LED-Ports 
werden dann gegenphasig zum Steuerpin angesteuert. Dies sollte ein 
Interrupt erledigen, damit nichts flackert. Somit kannst Du ein 
Stereo-Signal (über einen 2. ADC-Pin) auf je 24 LEDs separat ausgeben. 
Achte bei der Platine darauf, dass die Ströme zu den LEDs nicht am 
Controller entlang oder in dessen Nähe fließen können, da dadurch das 
Messergebnis vom ADC verrauscht wird. Getrennte Versorgungspfade (Stern 
Topologie und massive Planes) sind hier ein Muss.

von L. M. (l_m)


Angehängte Dateien:

Lesenswert?

Knut Ballhause schrieb:
> Für normale Line-Signale mit 2Vss ideal. Durch
> Oversampling kann und Dezimation man die normalen 10Bit des ADC auf
> 12Bit hochdrücken (die Erfassung ist dann noch schnell genug) und so
> noch kleinste Pegeländerungen detektieren. Been here, done that. More
> than once ;-)

Bräuchte gar nicht 12 Bit hatte eh vor bloß 8 zu nehmen da es eigendlich 
nicht genau sein muss, wird nur zur optik, keine Messungen.

Knut Ballhause schrieb:
> Transistoren sind im übrigen unnötig, wenn Du effiziente LEDs nimmst,
> die mit 2mA schon sehr hell sind (viele SMD-LEDs können das bereits).
> Spart einen Haufen Bauelementeaufwand

Hab extrem helle LEDs die Plexiglassplatten zum Leuchten bringen , die 
mit abstand aufeinander angebracht sind.

Knut Ballhause schrieb:
> Du kannst im Übrigen die doppelte Anzahl LEDs ansteuern, wenn Du ein 2.
> LED-Band aufbaust, welches gegenüber dem 1. verpolt ist. Dann nimmst Du
> 2 Transistoren mit unterschiedlicher Zonenfolge auf einen Steuerpin, der
> zu 50% high und zu 50% low ausgibt. Die Transistoren werden mit ihrem
> Kollektor auf das jeweils passende LED-Band geschaltet. Die LED-Ports
> werden dann gegenphasig zum Steuerpin angesteuert. Dies sollte ein
> Interrupt erledigen, damit nichts flackert. Somit kannst Du ein
> Stereo-Signal (über einen 2. ADC-Pin) auf je 24 LEDs separat ausgeben.

Habe leider bloß ein Signal.

Knut Ballhause schrieb:
> Achte bei der Platine darauf, dass die Ströme zu den LEDs nicht am
> Controller entlang oder in dessen Nähe fließen können, da dadurch das
> Messergebnis vom ADC verrauscht wird. Getrennte Versorgungspfade (Stern
> Topologie und massive Planes) sind hier ein Muss.

Hab ich beim layouten schon geschaut ist Leider sehr schwer da ich alles 
so klein wie möglich brauche.

Knut Ballhause schrieb:
> Für normale Line-Signale mit 2Vss ideal

Kann mein Signal nur Direkt am Subwoofer abgreifen muss, dann mit einem 
Spannungsteiler arbeiten.



Ich habe mal den Stomlaufplann so weit verändert. Hab auf ADC0 das mit 
der Spannung von 2,5V gemacht für die Messung im Negativen Bereich,und 
auf ADC1 eine Messung nur für denn Postitiven Bereich wenn ich mal etwas 
rumexperimentieren will.

Danke schon mal für alle  Infos.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

Der Spannungsteiler an AREF ist unnötig. Nimm intern Vcc als Referen und 
schalte nur den Kondensator an AREF.

ADC1 wird ohne festes Potenzial gar nichts bzw. alles messen.

von L. M. (l_m)


Lesenswert?

Knut Ballhause schrieb:
> Der Spannungsteiler an AREF ist unnötig. Nimm intern Vcc als Referen und
> schalte nur den Kondensator an AREF.

Ich hab mir den für "Notfälle" eimal drin gelassen, wird aber nicht 
genutzt.

Knut Ballhause schrieb:
> ADC1 wird ohne festes Potenzial gar nichts bzw. alles messen.

Messe ich so nicht was am Spannungsteiler 4 anliegt.

von Knut B. (Firma: TravelRec.) (travelrec) Benutzerseite


Lesenswert?

L. M. schrieb:
> Messe ich so nicht was am Spannungsteiler 4 anliegt?

Nur wenn der Jumper geschlossen ist und ADC1=ADC0 ist. Ist der Jumper 
offen, läd sich der Kondensator auf und aufgrund der fehlenden 
Stromsenke kann es zu keinem Stromfluss durch den Kondensator mehr 
kommen. Es wäre so, als würde ADC1 floaten. Daher misst ADC1 alles 
mögliche, nur nicht das Eingangangssignal.

von L. M. (l_m)


Angehängte Dateien:

Lesenswert?

Ich hab mal noch ne Verbesserung gemacht, jetzt müsste es ja gehen.

von L. M. (l_m)


Lesenswert?

L. M. schrieb:
> Ich hab mal noch ne Verbesserung gemacht, jetzt müsste es ja gehen.



Abend ich hab nochmal ne kleine frage, hab mich im Internet nochmal ein 
wenig umgeschaut wegen VU-Meters die analogen haben immer eine 
Glichrichtung mit eine Operationsverstärker vorm Eingang. Könnte mir mal 
bitte jemand erklären warum dieser vorhanden ist, komm gerade nicht 
drauf.

Danke schon mal.

von PdG (Gast)


Lesenswert?

Lies dir mal das hier durch, da hast du schon mal den Überblick über die 
Geschichte hinter dem VU-Meter und dessen Vor- und Nachteile:
[http://de.wikipedia.org/wiki/vu-Meter]

Natürlich kann man das VU-Meter auch direkt an der NF betreiben, aber 
ein "richtiges" VU-Meter ist wie vieles andere eben definiert (s. URL), 
z.B. das Einhalten von 300ms Einschwingzeit.

Der Opamp mit Gleichrichtung vor dem VU-Meter hat meist mehrere 
Aufgaben:
- Anpassung des Eingangssignalbereichs an den des Anzeigebausteins
- echte Mittelwert-Bildung oder Spitzenwertermittlung mit aktiver 
Gleichrichtung möglich
- Kompensation der Dioden-Flussspannung ggü. einfacher Gleichrichtung
- ermöglicht ein einfaches PI-Glied zur Verstärkungseinstellung bei 
gleichzeitiger Integration (Mittelwert-Anzeige) oder aber eine 
Spitzenwertanzeige durch Halten des Ausgangssignals für einen gewissen 
Zeitraum mit einem RC-Glied
- ggf. Logarithmierung des Eingangssignals

Siehe auch Datenblatt von z.B. LM3916, LM3915 (Abschnitt Application 
Hints) unter:
[http://www.ti.com/product/lm3915] oder
[http://www.ti.com/product/lm3916]

Vielleicht eignet sich statt eines VU-Meters doch besser eines der
[http://de.wikipedia.org/wiki/Aussteuerungsmesser]
für deine Anwendung?

Viel Erfolg,
PdG

von L. M. (l_m)


Lesenswert?

PdG schrieb:
> Siehe auch Datenblatt von z.B. LM3916, LM3915 (Abschnitt Application
> Hints) unter:
> [http://www.ti.com/product/lm3915] oder
> [http://www.ti.com/product/lm3916]

Diese beiden hatte ich schon auf einer Platine verbaut bin leider nicht 
dazugekommen diese fertig zu bauen.

PdG schrieb:
> Vielleicht eignet sich statt eines VU-Meters doch besser eines der
> [http://de.wikipedia.org/wiki/Aussteuerungsmesser]
> für deine Anwendung?

So etwas trift genau auf das zu was ich eigendlich bauen möchte, denn 
ich brauch keine festgelegten werte. Ich möchte nur um so lauter der 
bass kommt also um so höher die Spannung ist das um so mehr Plexiglass 
blatten leuchten, und diese dann logartitmisch aufgeteilt sind.


ab ich das dann richtig verstanden ich muss um mich leichter zu 
Programmieren, also Uss rauszurechen, eine Gleichrichtung am eigang 
vornehmen?

von bege (Gast)


Lesenswert?

Hallo,

bezüglich der vielen Transistoren frage ich mich ob es nicht sinnvoller 
wäre, einen integrierten Treiber (z.B. ULN2803) zu verwenden.
Das würde etwas Platz und Bestückungsaufwand sparen.
Nur so als Tip, wenn die Transistoren schon in der Bauteilekiste sind, 
macht es wahrscheinlich aber keinen Sinn.

von L. M. (l_m)


Lesenswert?

bege schrieb:
> bezüglich der vielen Transistoren frage ich mich ob es nicht sinnvoller
> wäre, einen integrierten Treiber (z.B. ULN2803) zu verwenden.
> Das würde etwas Platz und Bestückungsaufwand sparen.
> Nur so als Tip, wenn die Transistoren schon in der Bauteilekiste sind,
> macht es wahrscheinlich aber keinen Sinn.

Danke für den wertvollen Tipp werde es gleich ändern , da dies wirklich 
viel Arbeit erspart.
Habe gerade geschaut find zwar SMD versionen aber die gibts irgendwie 
nirgendwo zum kaufen, könnte mir jemand eien shop empfehlen wo es diese 
in SMD geben würde.
Danke schon mal,

L. M. schrieb:
> ab ich das dann richtig verstanden ich muss um mich leichter zu
> Programmieren, also Uss rauszurechen, eine Gleichrichtung am eigang
> vornehmen?

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.