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
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.
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
>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
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?
Oder hat jemand genau dieses Projekt schonmal gebaut?
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.