AVR 8Bit-Werte mit Faktor 0-1 multiplizieren (Synth)

Gast #880316
Lesenswert?

Hallo,

AVR Atmega8:
welche Tricks gibt es um möglichst schnell einen beleibigen 8Bit-Wert 
mit einem Faktor von 0 bis 1 zu multiplizieren? Für eine kleine Tabelle 
wäre
bei mir Platz.

Ich benötige das für die Hüllkurve (Lautstärkeänderung) eines 
Synthesizer.
Bei 16Mhz und einer vernünftigen Sampling-Rate (mind. 22Khz) bleibt ja 
nicht
viel an Rechenzeit pro Sample übrig.

Wenn jemand schon Erfahrung mit Soft-Synths auf dem Atmega
gemacht hat, würden ich mich auch über ein paar generelle Tips zu dem 
Thema
freuen...

Ciao
Chris
#880337
Lesenswert?

Chris,

Vielen Dank für das übliche Ratespiel.
Zum Glück ist jeder hier Hellseher!

Also:
- in Assembler oder C,Bascom, Pascal, oder was?
- Welche Auflösung hat der Faktor 0..1 (auch sowas wie 0,0234)?
- Welche Genauigkeit muss das Ergebnis haben, auch wieder 8 Bit?

Ansonsten gilt grundsätzlich als Möglichkeit:
Den Faktor bis zu einer Ganzzahl hochmultiplizieren und das Ergebnis
wieder entsprechend teilen. Eine Tabelle geht natürlioch auch, kommt
aber auf die Anzahl der Werte und Faktoren an.

Jochen Müller
#880492
Lesenswert?

Wobei für den Bereich 0-1 das ganz normale mul besser geeignet ist, da 
man eine höhere Auflösung hat, wenn man sich mit einem Bereich von 
0-0.9961 (0-255/256) zufrieden gibt.
1
in r16,PINB ; Read pin values
2
ldi r17,$B0 ; Load 0.6875 into r17
3
mul r16,r17 ; r1:r0 = r17 * r16
4
movw r16,r1 ; Move the result to the r16 register
Oder auch mit mulsu falls der Wert vorzeichenbehaftet ist.

Wenns die Auflösung besser sein soll, kann man das ganze auch auf 16bit 
erweitern. Dann geht der Wertebereich von 0-0.999985.

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