PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Log in Bascom umrechnen



iBot
13.04.2014, 12:14
Hallo ihr,

ich möchte ein logarithmisches Potentiometer softwarmäßig in ein lineares umwandeln und komme einfach nicht weiter.
Wozu? Ich habe von einem Gamepad die Knübbel angezapft und möchte die als Steuerung verwenden.

Geht das nur über eine Wertetabelle, also dass ich jedem log-Wert einen lin-Wert zuordne
oder kann ich das auch mathematisch irgendwie mit dem Logarithmus lösen?
Weil nach meinen Mathematik-Kenntnissen kann ich ja eine logarithmische Funkion linear machen, wenn ich da einen Exponenten einbring (oder so xD)
Grob gesagt nach dem Prinzip a=b*b -> a=wurzel aus (b*b)

Wäre echt spitze wenn mir da jemand einen helfen könnte (:

fredred
13.04.2014, 13:37
Hallo,

Ich vermute, hier geht's um den 10er-Logarithmus.
Den 10er-Logarithmus bekommst du weg durch Exponentiation zur Basis 10, also:

a = log b ist äquivalent zu b = 10^a
in BASCOM gibt es die log Anweisung.
Nicht getestet, ist nur so eine Idee.

Mit freundlichen Grüßen
fredred

PICture
13.04.2014, 14:08
Hallo!

Wenn es ohne Mathe (also schnell) seien sollte, dann ist eine Wertetabelle am einfachsten. ;)

iBot
13.04.2014, 14:28
Hallo,
Ich vermute, hier geht's um den 10er-Logarithmus.
Den 10er-Logarithmus bekommst du weg durch Exponentiation zur Basis 10, also:
a = log b ist äquivalent zu b = 10^a
in BASCOM gibt es die log Anweisung.
Nicht getestet, ist nur so eine Idee.
Mit freundlichen Grüßen
fredred
Hab das mal eben ausprobiert:

Wert_temp_word1 = Getadc(2)
Wert_temp_single1 = Wert_temp_word1
Wert1 = Log(wert_temp_single1)

Anstelle von Log gibt es ja noch Log10, ich denke das wird der 2er und der 10er sein oder?
Allerdings wird das Ganze immer noch nicht richtig linear.


Hallo!
Wenn es ohne Mathe (also schnell) seien sollte, dann ist eine Wertetabelle am einfachsten. ;)

Also eine IF-THEN-Routine?
Wie schnell? Schnell im Programm oder zum Überlegen?

PICture
13.04.2014, 14:54
Ich habe leider über BASCOM k. A._.

iBot
13.04.2014, 15:16
wie ist es hardwaremäßig schneller?

PICture
13.04.2014, 15:28
Ich habe nur überlegt, wie CPU eine Wertetabelle im Programspeicher (also nur interne Hardware) in ASM verarbeitet. ;)

iBot
13.04.2014, 15:47
Achso ok.
Ich denk ich werd das mit dem Rechnen sein lassen.
Danke für eure Beteiligung :rolleyes:

fredred
13.04.2014, 16:29
Hallo iBot,

wie geschrieben, war nur eine Idee.

Wenn du [Wert_temp_single1] als Dim As Single festgelegt hast bekommst du auf Grund der Nachkommastellen keinen sauberen linear Wert. Ist auch mit Software nicht 100% möglich.
Versuch es mal die Single-Variable zu „beschneiden“.
Einstellung in Header.
[Config Single = Scientific , Digits = 1] 1 Nachkommastellen oder wie auch immer

Möchtest du eine genaue Wandlung, wirst du eine Hardwarlösung, mit OPV benötigen.

Gruß
fredred

joho63
17.04.2014, 22:36
Bist Du sicher, daß das im Gamepad (Joystick?) logarithmische Potis sind?
Das wäre mir völlig neu.
Bisher sind mir nur lineare vorgekommen.
Anders wäre auch sehr unhandlich, die Mittelstellung wäre ja dann bei ca. 15% bzw. 85% Widerstand?
Joachim

iBot
18.04.2014, 10:56
@fredred:
Ok ich werde es für weitere Versuche mal mit einbauen. Ich denke 3 Digits sollten reichen oder?

@joho63:
Ja ziemlich sicher. Ich werde heut mal ne Kennlinie (Winkel-Ohm) aufnehmen vlt kann man dann ja auch den genauen Log erkennen.
Achja es ist ein Saitek P2500 Gamepad.

fredred
18.04.2014, 11:19
Hallo iBot,

Nehme an 2 sind besser.
Bei der Digitvariable bitte beachten, es wird die letzte Stelle immer gerundet.
Somit ausprobieren.

Gruß
fredred

iBot
18.04.2014, 17:48
28012
So sieht die Kennlinie aus. Hab gleich mal zwei Funktionen (per Hand) drüber gelegt.
@joho63: OK log ist das aber auch nicht 100%ig aber deffinitiv nicht linear ;)

Edit: x=0 ist Mittelstellung

PICture
18.04.2014, 17:53
Logaritmische funktion lässt sich in lineare mathematisch nicht wandeln, für ein Potentiometer bleibt softwaremässig nur eine Wertetabelle.

Sonst könnte man es hardwaremässig realisieren: https://www.roboternetz.de/community/threads/48099-D%C3%A4mpfung-von-Schwingungen-mit-OpAmp-LM324 . ;)

fredred
19.04.2014, 13:12
Hallo PICture,

Bin nicht ganz deiner Meinung Zitat[„Logaritmische funktion lässt sich in lineare mathematisch nicht wandeln“] Zitatende.
Natürlich ist mit linear skalierten Achsen die Logarithmusfunktion immer gekrümmt.
Jede Exponentialfunktion läßt sich aber in eine Exponentialfunktion zu beliebiger Basis umrechnen.
Du logarithmierst die x-Achse. Dann erhälst du äquidistante Ticks bei 0.1, 1, 10,100 usw. Der Funktionsgraf des Logarithmus wird dann zur Geraden.
Ansatzbeispiel für Berechnung exp(x*ln(a)) .

Hallo iPot,

kleiner Tipp: Potiwerte wurden ja ermittelt. Nun einzelne Werte in einen wissenschaftlichen Taschenrechner eingeben. Dort solltest du dich mal das Ergebnis bei nl/2nl oder log Betätigung anschauen und eventuell kombinieren.
So mache ich es wenn mal eine mathematische Lösung gefunden werden soll, hatte aber auch nicht immer Erfolg, dann musste es doch eine Wertetabelle sein(wie von PICture gleich vorgeschlagen) oder Hardware wenn noch möglich.

PS. Eine Wertetabelle in BASCOM zu erstelle ist ziemlich einfach mit Array und alles noch mit Overlay dann benötigst du auch nicht viel Speicheplatz.

Mit freundlichen Grüßen und schöne Ostern wünscht
fredred