Forum: Mikrocontroller und Digitale Elektronik Division einer 8 Bit Konstante / eine 8 Bit Variable


von René (Gast)


Lesenswert?

Hallo,

gibt es eine einfache lösung eine feste 8bit Zahl durch eine Variable zu 
dividieren?

255/x=..

x ist auch eine 8 bit Zahl

von AVR (Gast)


Lesenswert?

ja nach rechts schieben = /2

von Gast (Gast)


Lesenswert?

aber nur wenn die Teilerkonstante ein Vielfaches von 2 ist.

von AVR (Gast)


Lesenswert?

nicht wenn man das carry bit testet.

von Christoph db1uq K. (christoph_kessler)


Lesenswert?


von Stephan H. (stephan-)


Lesenswert?

mit dem Kehrwert Multiplizieren ????
AVR / 8051  8086  Z80 oder wofür ???
Kommt mitunter auch auf die MCU an was günstiger ist !!!

von Benedikt K. (benedikt)


Lesenswert?

Stephan Henning wrote:
> mit dem Kehrwert Multiplizieren ????

Wie berechnet man den Kehwert ohne Division ?

von Hauke R. (lafkaschar) Benutzerseite


Lesenswert?

kehrwert der konstante?

von Matthias (Gast)


Lesenswert?

..Wie berechnet man den Kehwert ohne Division ?..

Taylorreihenentwicklung von 1/x
;-))

von René (Gast)


Lesenswert?

Hallo,

der Kehrwert von 255 ist 0.0039... das dürfe auch nicht gehen. Kommas 
sind so glaube ich auch ein Problem das nicht ohne mehr aufwand gelöst 
werden kann.

von René (Gast)


Lesenswert?

die vollstände gleichung sieht ungefär so aus:


A = Delta * (255/x) alles in 8 Bit      (.asm)

von Falk (Gast)


Lesenswert?

@ René (Gast)

>der Kehrwert von 255 ist 0.0039... das dürfe auch nicht gehen. Kommas
>sind so glaube ich auch ein Problem das nicht ohne mehr aufwand gelöst
>werden kann.

Festkommaarithmetik

Aber das löst das Problem nciht, denn die VARIABLE steht im Nenner. Da 
kommt man um einen Division nicht herum. Warum wird da so ein Theather 
draus gemacht? Wie schnell muss denn gerechnet werden? Und wozu das 
Ganze?

MfG
Falk

von René (Gast)


Lesenswert?

Danke Falk für den Hinweis

ich wollte nur Register sparen da schon fast alle belegt sind. Und die 
Teilweise in Interups benutzt werden kann es zu "überschneidungen" 
kommen. Aber da werde ich nicht drum herumkommen. Die Zeit ist nicht so 
das Problem.
Es geht um RGB nach HSV und zurück umrechnung in .asm Für C gibt es ja 
schon Beispiele aber in asm ist nichts zu finden. Da mein ganzes Projekt 
aber in ASM gehalten ist habe ich ein Problem

von Falk (Gast)


Lesenswert?

@ René (Gast)

>ich wollte nur Register sparen da schon fast alle belegt sind. Und die

Hast du keinen SRAM? Welchen Controller verwendest du?

>Teilweise in Interups benutzt werden kann es zu "überschneidungen"

Auch das Problem kann SRAM lösen. Push & Pop.

MfG
Falk

von Christoph Wagner (Gast)


Lesenswert?

damit ist eine approximation gemeint. Die Quintessenz von dem Link, der 
oben gepostet worden ist ist folgende:

man findet kurze und einfache Routinen, um Division für bestimmte Zahlen 
wie z.B. 10 zu umgehen - die funktionieren allerdings nur bis zu einem 
bestimmten Eingangswert.

Ein nahezu bestechend einfacher ist:  Eingangswert * 26 und das low-byte 
vergessen. Diese Lösung stimmt bis zu einem Eingangswert von 67. Also 
für 6 Bit genau. Das kann man nehmen, wenn man eine Anzahl Sekunden, 
Minuten, Stunden, etc. z.B. auf einem Display darstellen will [mögliche 
Eingangswerte: 0-59]. Die "Division" benötigt gerade einmal 4 Zyklen.

mov TEMP1,10
mul INPUT,TEMP1
mov OUTPUT,r1

Genauer wirds mit: (Eingangswert * 205)/8. Diese Lösung stimmt sogar bis 
1027 - also 10 Bit. Man kann soz.B. einen Messwert von 0-999 fix in die 
Einzelstellen zerlegen.

mov TEMP1,205
mul INPUT,TEMP1
shr r1
shr r1
shr r1
mov OUTPUT,r1


Für andere Divisoren als 10 müsstest du natürlich selbst solche Tricks 
aufstellen aber der Link sollte als Anregung für Methoden dazu reichen.

von Quehl (Gast)


Lesenswert?

die Approximation würde ich noch für am Besten halten. In 2er Potenzen 
multiplizieren und sehen, ob das Ergebnis größer oder kleiner dem 
Vorgabewert ist. So ähnlich. Wie man das dann programmiert, müßte 
überlegt werden.

mfg

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.