Forum: Analoge Elektronik und Schaltungstechnik VU-Meter Projekt - Einige Fragen zu OPV und C


von Cha_KO (Gast)


Lesenswert?

Hallo Leute.

ich bastele zur Zeit an einem VU Meter. Jeder Balken hat 32 LEDs. Ich 
benutze einen Atmega32 und programmiere in C.
Das ganze orientiert sich an folgendem Beispiel:
http://mitglied.lycos.de/bk4/AVRvu.htm

Ich steuere meine LEDs ein wenig anders an, aber das ist auch nicht das 
Problem. Mir ist nicht ganz klar, was der OVP in dieser Schaltung macht 
und was an meinem ADC am Ende für ein Signal anliegt. Was muss ich mit 
diesem Signal noch machen?

"" b) Die Signale werden digitalisiert, per Software gleichgerichtet und 
der Spitzenwert in ein virtuelles RC Glied geladen.""

Wie läuft das ab und wie mache ich das in C?

Achso, und wozu dient die Offsetspannung???

Ich hoffe ihr könnt mir helfen.

lg

Cha_Ko

von Alexander L. (lippi2000)


Lesenswert?

Also die OPV's sind als nichtinvertierende Verstärker geschaltet. Über 
Poti kann man jeweils den linken und rechten Kanal im Bereich 0-20 
Verstärken. Anschließend wird jeweils durch 2 RC-Glieder ein TP 
2.Ordnung gebildet und nur noch niederfrequente Anteile durchgelassen. 
Anschließend wird noch der Gleichanteil durch den Serienkondensator 
entfernt. Jetzt sind nur noch die reinen Wechselsignale vorhanden, also 
positve und negative Werte, die der AVR nicht verarbeiten kann. Deswegen 
wird jetzt ein Offset dazugegeben, der die Signale leicht in den 
positiven Bereich hebt. Die Eingänge sind Komparatoreingänge. Da die 
Referenzspannung Aref = GND (C4 ist wohl ein wenig nach links gerutscht 
oder der Spannungswert wird nicht mit dargestellt)ist, wird jeweils 
immer der Nulldurchgang detektiert. Bzw. ein bestimmter Spannungswert.

von ARM-Fan (Gast)


Lesenswert?

Wieso fragst du nicht den Autor?

von Cha_KO (Gast)


Lesenswert?

Hmm, erstmal ein Dank an Alexander. Und wie muss ich jetzt im Code 
weiter mit dem Signal umgehen? Wie sieht so ein RC-Glied in C aus?

Cha-Ko

von Cha_KO (Gast)


Lesenswert?

keiner ne ahnung???

von EZ81__ (Gast)


Lesenswert?

>Die Signale werden digitalisiert,
Der Messwert des ADC ist dann (wegen des Gleichspannungsoffset von 
U_ref/2) 512 + Eingangsspannung (-512..+512)

1024---------------
       /\
      /  \
     /    \
512 +------+-------
            \
             \
              \
0------------------


> per Software gleichgerichtet
512 abziehen und Betrag bilden


512---------------
       /\     /
      /  \   /
     /    \ /
0------------------


> und der Spitzenwert in ein virtuelles RC Glied geladen
> [...]
> so dass man eine pseudo logarithmische Anzeige erhält.

Hier ist es evtl. einfacher, das Signal erst zu logarithmieren (geht 
wohl am einfachsten mit einer Tabelle, in der zu jeder LED der 
Eingangspegel steht) und den Anzeigewert dafür konstant mit X LEDs pro 
Sekunde abfallen zu lassen. Wenn der neue  logarithmierte Messwert 
größer ist als der aktuelle Anzeigewert, wird letzterer einfach durch 
ersteren ersetzt.

Grüße

von Cha_KO (Gast)


Lesenswert?

ok danke, das versteh ich jetzt schonmal....allerding hab ich keine 
Ahnung, wie ich das in C Programmieren soll:( kann da jemand helfen? 
gibts evtl. schon was fertiges?

von Cha_KO (Gast)


Lesenswert?

Oder hat jemand genau dieses Projekt schonmal gebaut?

von Alexander L. (lippi2000)


Lesenswert?

Morgen,

also da du 512 Werte hast nach der Gleichrichtung (512 bis 1024) würde 
ich jeder LED einen bestimmten Wert zu ordnen, ab dem Sie angeschalten 
wird. Wie es EZ81__ bereits vorgeschlagen hat. Muss aber nicht 
logarithmisch sein.

Den Spitzenwert musst du zu Beginn suchen (Größter Wert deiner aktuellen 
Samples). Dieser wird dann abgesoeichert und die Anschaltung der LED's 
ausgewertet.(Einfacher Kleiner-Gleich-Vergleich). Somit hast du quasi 
einen unendlichen Integrator gebaut und zumindestens schon mal die 
Peak-Anzeige geschafft. Nun sollen aber die Werte immer aktualisiert 
werden. Dafür würde ich den momentan gespeicherten Wert zyklisch um 1 
verringern. Da ständig der abgelegt Spitzenwert für die LED anschaltung 
ausgewertet wird, sinkt mit gewissen Zeitverzug der Wert und somit die 
Anzahl der leuchtenten LED's. Wie schnell das geht, hängt von deiner 
Abtastzeit und dem Wert der jedem Zyklus von deinem abgelegten 
Spitzenwert abgezogen wird.

Irgendwann (ms - Bereich) wird dein aktuell eingelesenes Sample wieder 
größer sein als der zwischengespeicherte Spitzenwert (bzw. schon 
zyklisch verringerte Wert) und wird mit dem neu eingelesenen Wert 
ersetzt.

Mach dir mal ein Flußdiagramm, das verdeutlicht die Sache und 
erleichtert eine Programmumsetzung ungemein.

Gruß Alexander

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.