Forum: Projekte & Code Einfaches DAC-Dithering Algorithmus


von Ralf H. (dacula)


Angehängte Dateien:

Lesenswert?

Hi Leute,

mich hat vor einiger Zeit das DAC-Dithering fasziniert - mangels Zeit 
(durch berufliche Einbindung) konnte ich aber nicht alles testen, was 
ich gerne testen wollte.

Jetzt hatte ich am letzten Wochenende aber etwas zeit gehabt. Zwar nicht 
so viel, als das ich dies in HW umsetzten hätte können, - dafür aber 
zumindest das softe... ;)

Entstanden ist eine (wie ich meine) sehr portable einfache Variante der 
Berechnung in C samt Beispiel.

Es ist eins meiner ersten Programme nach sehr langer programmier-pause 
(>15 Jahre), also seid gnädig mit mir, was den Stil angeht.
- Ich habe alles in Fixpoint umgesetzt, so das auch MCUs ohne FPU 
schnell damit umgehen können sollten (also auch 8Bit AVR/PIC/8051... 
o.Ä.).
- Gezielt habe ich auch auf Pointer verzichtet um ggf. Anfängern in C 
einen schnellen Einstieg zu ermöglichen. Dafür als Zugeständnis werden 
aber auch globale Variablen benutzt.
- Parametrisiert wird nicht dynamisch (HW ändert sich nur selten zur 
Laufzeit) sondern per Definitionen in der "dithering.h" Dort gibt man 
nur die reale HW-Auflösung und die Referenzspannung (bei PWM die 
digitale I/O Spannung) an. Im Beispiel wird 8 Bit und 2.048V (bzw. 
2048mV wegen Fixpoint) verwendet.
- Und zu guter Letzt ist in der main.c auch ein Konsolen-Demo dass das 
Ganze auch einmal sehr einfach "durchsimuliert" (wenn man mal keine 
passende Hardware zur Hand hat ;)

Was macht das ganze jetzt?
Es wird versucht durch "Wackeln" am DAC (egal ob ein echter 
Analog-Ausgang oder PWM) zusätzliche Bits zu interpolieren. Hierzu 
werden 12 Sequenzen errechnet die dann zyklisch (und schnell) auf dem 
DAC ausgeben werden müssen. - idealerweise hat der DAC dann noch einen 
Tiefpass nachgeschaltet. Die Mittelung aus der 12er Sequenz entspricht 
dann annähernd einer höheren Auflösung bzw. nähert sich dieser.

Ich sehe das nicht als fertig an, sondern nur als Lernaufgabe/Übung 
meinerseits - mit ggf. Nutzen für andere, weshalb ich dies gerne mit 
euch teilen möchte. Auch über die Methode selbst darf diskutiert werden. 
Kritik darf auch gerne geäußert werden, - wenn sie denn nicht gleich 
beleidigend wird!


Und jetzt viel Spaß damit :)
Ich freue mich auf Feedback

[Mod: Typos korrigiert]

: Bearbeitet durch Moderator
Beitrag #7815104 wurde von einem Moderator gelöscht.
Beitrag #7815391 wurde von einem Moderator gelöscht.
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.