Archiv verlassen und diese Seite im Standarddesign anzeigen : Log in Bascom umrechnen
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 (:
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
Hallo!
Wenn es ohne Mathe (also schnell) seien sollte, dann ist eine Wertetabelle am einfachsten. ;)
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?
Ich habe leider über BASCOM k. A._.
wie ist es hardwaremäßig schneller?
Ich habe nur überlegt, wie CPU eine Wertetabelle im Programspeicher (also nur interne Hardware) in ASM verarbeitet. ;)
Achso ok.
Ich denk ich werd das mit dem Rechnen sein lassen.
Danke für eure Beteiligung :rolleyes:
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
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
@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.
Hallo iBot,
Nehme an 2 sind besser.
Bei der Digitvariable bitte beachten, es wird die letzte Stelle immer gerundet.
Somit ausprobieren.
Gruß
fredred
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
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 . ;)
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
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.