Prozentrechnung

Gast
@unbekannt
Hier bekommt man einfach keine vernünftigen antworten.
@all
Die "maschine" soll Werte Auswerten und ausgeben.
Ich habe einen Fader der steht z.B auf dem Wert 80 und einen Weiteren
Fader ( masterfader) der steht z.B auf 125 ausgegeben soll dann der
wert
40. Wie rechne ich das?
Gast
Wenn Du uns sagst, warum bei dem Bsp. "40" ausgegeben werden soll,
dann dürfte die Antwort zu deiner Frage nicht mehr weit sein ;-)

Dennis
Gast
Ich gehe mal davon aus, dass du einen 8-bit AD/Wandler hast und den
Fader in Abhängigkeit des Mastere errechnen willst.  Das wäre dann
Faderwert * Masterwert >> 8.

Oder hab ich's doch nicht verstanden?

MW
Gast
> Ich habe einen Fader der steht z.B auf dem Wert 80 und einen
> Weiteren Fader ( masterfader) der steht z.B auf 125 ausgegeben
> soll dann der wert 40. Wie rechne ich das?

Na, das ist doch einfach:

  wert = masterfader - fader - 5

Also für Dein Beispiel:

  wert = 125 - 80 - 5 = 40

Da braucht's nicht mal Prozentrechnung.


> Hier bekommt man einfach keine vernünftigen antworten.

Doch, bekommt man! Jede Frage bekommt genau die Antwort, die sie
verdient!
Gast
> Hier bekommt man einfach keine vernünftigen antworten.

Wer vernünftige Fragen stellt, bekommt auch vernünftige Antworten.
Deine Frage ist ungefähr so präzise, wie "was muß ich tun, wenn ich
beim Autofahren an einem Schild vorbeikomme?"
Also, bevor du dich über die Antworten aufregst, lern bitte erstmal,
Fragen so zu stellen, daß man was damit anfangen kann.

> Die "maschine" soll Werte Auswerten und ausgeben.
> Ich habe einen Fader der steht z.B auf dem Wert 80 und einen
>  Weiteren Fader ( masterfader) der steht z.B auf 125 ausgegeben
> soll dann der wert 40.

Und warum soll dieser Wert rauskommen?
Also bitte, das ist ja mal wirklich das kleine 1 mal 1.

Wenn ich einen Wertebereich von 0-255 auf 0-100 runterechnen will, dann
teilt man den Wert einfach durch 2,55. Wenn man die Verwendung von
fliesskommazahlen scheut, weil man gerade in Asm unterwegs ist,
erweitert man beide Seiten mal 100 (bsp: 25500/255=100). Dadurch ist
man natürlich dann gezwungen, 16bit Rechnungen zu verwenden. Der kleine
Hobbyprogrammierer von nebenan sollte das aber locker hinbekommen.
Gast
Also 80 sind 40% von 200. Unter der Annahme, dass ein Fader einen
Wertebereich von 0...200 hat würde das Sinn machen. Was das alles mit
dem Masterfader zu tun hat... Tja da wäre etwas mehr Info hilfreich.

Beschreib doch mal genau was du vorhast, sofern du es den weisst.
Es wäre z.B. interessant zu wissen, wie du die Werte der Fader
überhaupt in den µC bekommst und was dann hinten wieder rauskommen
soll.

Wenn du etwas genauer wirst, bekommst du evtl. sogar von
"Unbekannter" ne sinnvolle Antwort
Gast
@Rahul:

> Und wie macht man das in ASM?

Na, das ist noch einfacher:

  ld   a, (hl)       # Fader
  ld   b, a
  inc  hl
  ld   a, (hl)       # Masterfader
  sub  a, b
  sub  a, 5
Gast
Wir schmeissen HEX-Darstellung und dezimale Darstellung durcheinander.
Wer rechnen kann ist klar im Vorteil:
40h = 64d
80h = *128*d

Wie gross ist dein Maximalwert? Der ist vermutlich nicht konstant. Dann
wird es schwer...
Gast
Ich versteh immernoch nicht wirklich welcher Zusammenhang da besteht.
Vor allem mit der 125.
Schreib halt mal ganze Erklärungen, und nicht immer nur Satzfragmente.
Im Interpretieren von Texten war ich noch nie gut, und ich denke, das
geht der Mehrheit hier so.

@Unbekannter
Bist du sicher, dass es so geht? Ich glaub nämlich nicht...
Aber einfach ist es allemal.
@Sebastian:

Bisher ist die Beschreibung des Problems von "René" immernoch so
uneindeutig, das derzeit keine vernüftiger Lösungsweg vorgeschlagen
werden kann. Deshalb schliesse ich mich diesem Lösungsweg von
"unbekannter" einfach mal an.
Gast
Der wertebereich sollte von 0-255 dezimal gehen.
wertebereich fader1 auch von 0-255


fader 1 = z.B Dez 40  Master 50% (128 im wertebereich 0-255) es sollte
herrauskommen 20

Fader 1 = Dez 255 master 100% ergebniss 255 usw.
Gast
hast du dir mal die Multiplikations- und Divisions-Application Notes auf
atmel.com angeguckt?
Bernhard Schulz hat die auch in der Codesammlung zu "papier"
gebracht.
Allerdings für 32Bit.
Gast
Nun, dann hab ich dir den Weg doch gezeigt. Ersetze das ">>8" durch
eine Division durch 255. Ist etwas genauer, aber langsamer. Musst halt
sehen, ob du die Genauigkeit brauchst. Aber, Assembler lernen musst du
schon selber.

MW
Gast
Lösungsvorschlag:

Fader-Wert mit 100 Multiplizieren und dann solange den Masterfader-Wert
davon abziehen, bis <=0.
Sieht vermutlich fast genauso aus, wie die Lösung des Unbekannten...
Gast
Ich würde mal sagen die Lösung scheint trivial, allerdings stellt sich
mir die Frage was Rene für ein Problem hat.
Das wird wieder ein ewiglangen Thread bis sich der Ersteller
entschließt sein Problem zu definieren!

Viel Spaß noch dabei.....
Gast
Hallo,

es geht darum einen RGB Dimmer zu steuern
Fader 1 = Rot
Fader 2 = Grun
Fader 3 = Blau

Gerät funktioniert ganz gut soweit.

jetzt soll der master hinzukommen und ich suche nach ansätzen wie man
das am besten macht.
Es kamen immer wieder Vorschläge von Leuten wir sollten noch einen
weiteren Fader zur verfügung stellen der sozusagen als master fungiert
um z.B. eine Eigestellte RGB Farbe in der Helligkeit verändern zu
können ohne alle Drei fader bewegen zu müssen sonderen mit einem  Fader
dem "Masterfader".

Ich hoffe das leuchtet ein.
Bitte jetzt nicht mit das kannst Du dir doch kaufen bla bla..
Ist doch simpel:

Annahme:
  Fader hat einen Wertebereich von 0 bis 255
  Master hat einen Wertebereich von 0 bis 255

dann ist der zu setzende Wert
  Wert = Fader * Master / 255;

Prozentrechnung halt, nur entspricht ein Wert von 255
den 100%. Wo liegt das Problem? Schreib dir oder besorg dir
eine 16 Bit Arithmetik und los gehts.
Gast
Aha. Also mit den neuen Information würde ich folgenden Algorithmus
vorschlagen:

  a.) Den Fader und den Master in Prozent umrechnen.
      Beispiel: Fader 20 = 7,843%  Master 128 = 50,196%

  b.) Die Prozentwerte in Binäre-Brüche umwandeln. Beispiel:
      7,843% = 0b111,110101...  50,196% = 0b11010,001...

  c.) Die beiden Binärebrüche miteinander multiplizieren.

  d.) Das Ergebnis mit 0b0,00000110100001... multiplizieren.

Fertig! Das war schon alles!

Das alles natürlich mit mindestens 32 Bit Genauigkeit rechnen, sonst
gibt's Fehler!

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 20 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.