mikrocontroller.net

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


Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alexander Liebhold (lippi2000)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ARM-Fan (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso fragst du nicht den Autor?

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
keiner ne ahnung???

Autor: EZ81__ (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Cha_KO (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oder hat jemand genau dieses Projekt schonmal gebaut?

Autor: Alexander Liebhold (lippi2000)
Datum:

Bewertung
0 lesenswert
nicht 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

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.