VU-Meter Projekt - Einige Fragen zu OPV und C

Gast #662224
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
#662236
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.
Gast #662317
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
#662642
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren