Forum: Mikrocontroller und Digitale Elektronik Hilfe bei Rechnung für Balancesteller für digtal einstellbaren Lautstärkesteller


von P-punkt (Gast)


Angehängte Dateien:

Lesenswert?

Moin Moin,

ich lese nun schon seit einiger Zeit fleissig hier mit, habe ab und zu 
auch schon gepostet, und nun habe ich auch mal eine (wahrscheinlich 
ziemlich dumme)Frage.

Ich steh grad nämlich total auf dem Schlauch und habe schon leichte 
Kopfschmerzen.

Ich habe zwei digital einstellbare "Potis" mit jeweils 8bit 0x00 
entspricht in meiner Anwendung 0% Dämfung, 0xFF entspricht 100% 
Dämpfung.

Je eines dieser "Potis" ist für einen der beiden Stereokanäle eines 
Verstärkers zuständig.

Nun Habe ich mehrere Größen, die ich miteinander "verwursten" möchte, 
ich komme nur einfach nicht auf eine einfache Lösung, die ich auf einem 
µC in C simpel umsetzen kann:

Eingabe
- Dämpfung Gesamt als 8bit Wert
- Balance als 8bit Wert

Ausgabe
- Dämpfung links
- Dämpfung rechts

Wenn 'Balance' sich genau in der Mittelstellung befindet, soll der 
'Dämpfung links' und 'Dämpfung rechts' exakt gleich gross sein. Weicht 
'Balance' nach links oder rechts ab sollen die Werte von 'Dämpfung 
links' und 'Dämpfung rechts' entsprechend größer/kleiner werden.
Die angehängte Skizze macht es sicher einfach meinem wirren geschreibe 
zu folgen.

Hat irgendjemand einen kurzen Denkanstoss für mich? Ich möchte ungern 
mit Prozenten und dementsprechenden Fließkommazahlen rechnen - Das muss 
doch irgendwie möglich sein...

Mein Problem wurde doch bestimmt schon 10'0000e mal gelöst.

Danke für die Hilfe und Grüße

P.

von P-punkt (Gast)


Lesenswert?

(wäre ein freundlicher Admin so nett, den doppelten Dateianhang zu 
korrigieren? Danke!)

von Chris R. (hownottobeseen)


Lesenswert?

Hi,

ich würde den Ansatz etwas anders gehen.
Momentan hast du bei Balance = mitte nicht die volle Aussteuerung und 
verlierst dadurch auch an Dynamikumfang deiner Potis.

Ich würde Mitte als 100 % Lautstärke definieren, wenn die Balance nach 
rechts verschoben wird, muss der linke Lautsprecher leiser werden, wenn 
nach links verschoben wird, der rechte Lautsprecher leiser...

Balance würde ich als signed verwenden, das macht die Rechnerei etwas 
einfacher.

Das ganze einfach mal aus dem Kopf runtergeschrieben:
1
uint8_t volume = 42;
2
int8_t balance = -64; //~ 50 % nach links
3
4
uint16_t volR = volume;
5
uint16_t volL = volume;
6
7
if(balance < 0)
8
{
9
  //balance nach links verschoben, rechts muss verringert werden
10
  balance *= -1; //wert invertieren, damit er positiv wird
11
12
  volR -= (volR * balance) / 127
13
}
14
else if(balance > 0)
15
{
16
  volL -= (volL * balance) / 127
17
}

Der Wert +128 darf für die Balance allerdings nicht verwendet werden.

Bei der Multiplikation entsteht höchstens 255*127 = 32385, passt also in 
den uint16, trotzdem sollte volL und volR im Range des uint8 bleiben.

HTH

von Ralph (Gast)


Lesenswert?

Ich würde es mal mit Multiplizieren versuchen.

Balance auf rechts:
 Rechts ( 0-255 ) * 127
 Links  ( 0-255 ) * 0

Balance auf halb rechts:
 Rechts ( 0-255 ) * 127
 Links  ( 0-255 ) * 63

Also neutral:
 Rechts ( 0-255 ) * 127
 Links  ( 0-255 ) * 127

Balance auf halb links:
 Rechts ( 0-255 ) * 63
 Links  ( 0-255 ) * 127

Balance auf links:
 Rechts ( 0-255 ) * 0
 Links  ( 0-255 ) * 127

Ich würde allerdings bei der Balanceverstellung nur Dämpfen und nichts 
anheben.
Damit würde die Gesamtlautstärke die gleiche bleiben.

von Chris R. (hownottobeseen)


Angehängte Dateien:

Lesenswert?

noch ein kleiner Anhang zur Erklärung wie ich es gemeint hab.
Der Code funktioniert (bis auf die zwei vergessenen Semikolon) übrigens.

von P-punkt (Gast)


Lesenswert?

Ich verneige mich! Funktioniert. Und natürlich ist es auch viel schlauer 
den jeweils gegenüberliegenden Lautsprecher einfach abzusenken.

Habe Deinen Code mal in mein Projekt verpflanzt und siehe da, es tut was 
es soll. Der Abend ist gerettet.

Danke!

von Axel S. (a-za-z0-9)


Lesenswert?

Das kommt natürlich auf die Charakteristik der elektronischen Potis an. 
Denn für gewöhnlich will man, daß beim Ändern der Balance die Gesamt- 
lautstärke erhalten bleibt. Nur den Pegel eines Kanals absenken ist 
Mist, weil da die Lautstärke absinkt sobald man die Balance aus der 
neutralen Mittelposition dreht.

Am einfachsten ist es, wenn die Potis eine dB-lineare Kennlinie haben. 
Wenn also jeder Schritt den Pegel um einen konstanten Betrag von x.y dB 
anhebt bzw. absenkt. In diesem Fall muß man Lautstärke- und Balancewert 
einfach nur addieren. Die einzige kleine Schwierigkeit ergibt sich 
hierbei daraus, daß der Wert für die Lautstärke i.d.R. vorzeichenlos 
ist, während der Wert für die Balance natürlich ein Vorzeichen braucht.


XL

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.