www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik VU Meter mit PIC


Autor: Daniel C. (dani86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, mein NAme ist Daniel und ich bin neu hier im Forum...
Ich mache eine Ausbildung als Elektroniker für Geräte und Systeme. In 
diesem Zusammenhang programmiere ich viele Microcontroller, vorwiegend 
PIC's.
Nun war meine Idee ein VU Meter mit einem PIC zu realisieren.
Da man aber für ein VU Meter Spannung und Strom benörigt, habe ich mich 
erstmal darauf beschränkt, zunächst nur die Spannung am Boxenausgang via 
LED's anzeigen zu lassen...Ich habe nun ein kleines Programm in C 
geschrieben, aber irgendwie stimmt da was nicht...
Grundsätzlich funktioniert die Spannungsauswertung am Netzteil, aber an 
der Stereoanlage nicht, warscheinlich bedingt durch die Frequenz. Ich 
habe meine Schaltung mal an einen Frequenzgenerator gehangen und ich 
kann maximal 1 Hz mit meinen LED's darstellen und mehr geht nicht:(
Für eine Stereo natürlich zu langsam...kann mir jemand von eich helfen 
wie ich  die Abtastrate des ADC's höher bekomme und wie ich es schaffe, 
dass meine Schaltung auch die Spannungsschwankungen der Boxenausgänge 
wiedergeben kann?

Vielen dank schonmal,

Gruß Daniel

Autor: Dirk S. (duerk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Daniel, ist vielleicht von Vorteil wenn du dein programm und 
Schaltplan mal beilegst.

Gruß von Dirk

Autor: Daniel C. (dani86)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Sorry:)
hier ist zunächst einmal mein Programm, einen Schaltplan habe ich noch 
nicht auf dem PC...diesen Liefere ich noch nach...
Das Programm ist durch die IF-Abfragen ziemlich lang gewurden...dies 
würde sicherlich auch kürzer gehen, aber zur generellen Funktion ist es 
ok...
um noch hinzu zu fügen...
als Programmierumgebung benutze ich MPLAB und den CCS-Compiler

Autor: Bastler (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schrotty?
Aus H*****zell?

Autor: Dieter Stotz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel,

ein VU-Meter (Volume Unit) zeigt ein logarithmisches Maß einer 
Audiosignalspannung an (mit einer bestimmten Trägheitscharakteristik). 
Es ist eine völlig andere Situation, wenn Du Ausgangsleistung eines 
Leistungsverstärkers messen willst.

Dieter

Autor: Roland Praml (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Du brauchst noch einen Gleichrichter (simple Diode reicht evtl.) und 
einen Kondensator, so wie hier z.B.

http://www.elv-downloads.de/service/manuals/VU19/V...

Übrigens: Ein LSP-Ausgang liefert u.U. mehr als 5V und dann ist der PIC 
hin.

Gruß
Roland

Autor: Daniel C. (dani86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
An Dieter: Das ist gut zu wissen...genau darauf wollte ich mich nämlich 
letztendlich beschränken. Zuerst war die überlegung die Leistung zu 
messen, aber da dies doch etwas umständlicher ist, da der Strom erst 
errechnet werden muss etc. habe ich mich darauf beschränkt, wirklich nur 
die Spannunganzeigen zu lassen. Ich weiß halt nicht ganz genau in 
wiefern ich noch eine Vorschaltung vor dem ADC brauche, da mein PIC ja 
scheinbar bei 1 Hz schon schlapp macht.

An Roland: Danke dir, das mit der Diode und dem Kondesator ist eine gute 
Sache. Die Schaltung ist auch echt verlockend. Ähnliche habe ich mir 
auch schon angesehen, aber da es halt in meine Ausbildung hinein passt, 
wollte ich versuchen das ganze irgendwie mit einem PIC zu realisieren.
Das Problem mit den 5V habe ich auch schon bedacht, aber da könnte man 
ja vielleicht mit einem Spannungsteiler oder ähnlichem Arbeiten, damit 
die maximale Spannung am PIC auch nur ca. 5V beträgt und zusätzlich 
vielleicht als Schutz sogar mit einer Z-Diode oder 2 Schottky Dioden 
arbeiten...?!?!

Gruß Daniel

Autor: Dieter Stotz (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Daniel,

bei 1 Hz schlapp? Kann ich mir fast nicht vorstellen. Eine einfache 
Routine zum Einlesen eines ADC-Wertes kann man üblicherweise mehrere 
hundert Mal pro Sekunde machen. Zur Direktmessung ungeeignet, aber mit 
Gleichrichtung und Glättung ist der PIC immer noch deutlich schneller 
als die vorhergehende Schaltung. Ich würde mind. 6 Bauteile verwenden: 1 
Diode, 1 Widerstand in Serie zur Diode, 1 Elko (am besten Tantal), 1 
Widerstand parallel zum Elko, 1 Schutzwiderstand (ca. 10k) zum 
PIC-Eingang, 1 Diode (vorzugsweise Schottky)vom PIC-Eingang nach +5V. 
Zur Bemessung der beiden Widerstände von der Diode zum Elko und parallel 
zum Elko muss man noch die (genormten) VU-Standards beachten (die ich 
gerade nicht auswendig weiß).

Dieter

Autor: Daniel C. (dani86)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich hatte in letzter Zeit nicht viel Zeit um mich großartig weiter 
um mein VU-Meter zu kümmern. Aber ich habe schonmal mein Programm etwas 
verfeinert. Ich verwende den Timer0-Interrupt um den ADC aus zu lesen. 
Somit ist sicher gestellt, dass der ADC auch kontinuirlich mit der 
gleichen Abtastrate ausgelesen wird.
Hier habe ich auch schonmal das "neue" Programm in den anhang gepackt. 
Zudem habe ich vor dem ADC einen Tiefpass geschaltet, welches Frequenzen 
über 15khz filtert.
Natürlich sollen die LEDs des VU-Meters im Prinzip die Spannungssprünge 
ausgeben, dazu habe ich jetzt den Begriff des "Peak-Hold" gehört! KAnn 
mir jemand sagen was es damit auf sich hat und wie ich sowas am besten 
im Programm realisiere? :)

Gruß Daniel

Autor: Daniel C. (dani86)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi, ich habe das mit dem PeakHold mal ausgetestet, aber jetzt habe ich 
das problem, es wird ja immer die oberste LED durch das PeakHold 
anglassen, aber der rest meines Programmes hebt das ganze wieder auf und 
somit sieht man das gernicht das irgendwann mal die höchste LED an 
geblieben ist.
Wie kann man das im dem Programm klug lösen, dass man es doch erkennt?? 
ich bin grad etwas ratlos:)

Autor: klaus (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
hi

ver"oder"e das peak-hold-byte mit dem messwert-byte vor der ausgabe:

if (wert<10)
  ausgabe_wert = 0x00;
else if ((wert>=1)&&(wert<26))
  ausgabe_wert = 0x01;
else if ((wert>=26)&&(wert<51))
  ausgabe_wert = 0x02;
else ...
...
...
peak_hold_wert = ???  //irgendwie speichern, aber das gibts ja schon...
...
...

port = peak_hold_wert | ausgabe_wert;



...so ähnlich würde ich es machen...

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.