Forum: Mikrocontroller und Digitale Elektronik Atmega Berechnung in C für ADAU1701


von Tobias (Gast)


Lesenswert?

Hallo zusammen,

vielleicht kann mir ja jemand helfen.
Ich habe jetzt mit Controllerprogrammierungen in C noch nicht so viel 
erfahrung.
Ein paar kleinere Programme habe ich schon gemacht, die aber dann auch 
in Assambler. Hat aber soweit alles funktioniert.

Ich habe mir von Analog Deveice das Evaluationbaord für den ADAU1701 
besorgt um mal mit nem DSP ein bisschen zu spielen.
Grundsätzlich hab ich das auch alles verstanden.
Jetzt habe nen ATMEGA 128 genommen und diesen über I2C mit dem 
Evaluation board verbunden. Die Programmdaten und im Flash fertig 
abgelegte Parameterdaten funktioniert auch.
Jetzt zu meinem Problem:
Ich würde gern die Parameterdaten berechnen. Nur komm ich einfach nicht 
dahinter wie das geht...
Es muss eine 28bit Zahl berechnet werden, die letzen 23bit sind die 
Nachkommastelle.
Wenn ich jetzt z.B. die Lautstärke von um -1dB ändern möchte muss ich 
den letzten wert ja *0.89 nehmen.
0dB entspricht in diesem fall ne 1.0...
-1dB währe ja dann 0.89000...
Wie berechnet man sowas?
Wie sage ich dem Compiler jetzt was vor dem Komma steht und was 
dahinter?
Gibt es da vielleicht schon was fertiges und ist ganz einfach?
Vielen Dank für die Hilfe.
Gruß Tobias

von Karl H. (kbuchegg)


Lesenswert?

Tobias schrieb:

> die letzen 23bit sind die
> Nachkommastelle.

D.h. du hast Fixkommaarithmetik, wobei ein dezimaler Wert von 8388608 
einer 1.0 entspricht.

Von allen Zahlen einfach das 8388608-fache nehmen.

Machst du ja im täglichen Leben auch.
Wenn du mit Euro rechnen sollst, zb €8.45 und du willst keine 
Nachkommastellen, dann rechnest du eben in Cent. Die €8.45 entsprechen 
dann eben 845 Cent.

Dein 'Euro' hier hat dann eben nicht 100 'Cent', sondern 8388608.


> Wenn ich jetzt z.B. die Lautstärke von um -1dB ändern möchte muss ich
> den letzten wert ja *0.89 nehmen.
> 0dB entspricht in diesem fall ne 1.0...

   oder eben   8388608

> -1dB währe ja dann 0.89000...

   oder eben   8388608 * 0.89 -> 7465861

von Lötlackl *. (pappnase) Benutzerseite


Angehängte Dateien:

Lesenswert?

Du solltest Dir mal die Hilfe in Sigma-Studio durchforsten. Da gibt es 
auch ein paar Programmbeispiele. Falls auch mal Filterparameter 
berechnet werden sollen, unbedingt die PDF-Datei 
"FilterMathCalculations.pdf" besorgen!
Im Anhang auch von mir mal ein paar rudimentäre Codefetzen.

mfg

von Tobias B. (horschtx)


Lesenswert?

Super,
Vielen dank ich glaube jetzt habe ich es auch verstanden.
Dann kann ich das heute Abend mal testen!

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.