- LiFePO4 Speicher Test         
Seite 3 von 3 ErsteErste 123
Ergebnis 21 bis 29 von 29

Thema: Himmelsrichtug ausrechnen aus X+Y Wert

  1. #21
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Anzeige

    LiFePo4 Akku selber bauen - Video
    Wenn mich nicht alles täuscht [...]
    Du täuscht dich... siehe hier

  2. #22
    Erfahrener Benutzer Begeisterter Techniker
    Registriert seit
    31.05.2009
    Beiträge
    270
    Zitat Zitat von malthy Beitrag anzeigen
    Du täuscht dich... siehe hier
    Wieder dazugelernt...............
    Danke !
    mfG
    Willi

  3. #23
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Mal wieder zurück zur eigentlichen Fragestellung...

    Mittlerweile haben wir ja rausbekommen, wie die Berechnung des Winkels aus den beiden X- und Y-Werten in Bascom erfolgen könnte:

    Ergebnis = Atn2(yresult , Xresult)

    berechnet aus den beiden Eingangswerten den Arcustangens in Bogengrad und soll dabei - laut BASCOM-Hilfe - auch korrekt mit den 4 möglichen Quadranten umgehen können, im Gegensatz zur Funktion "atn(Yresult / Xresult)", bei der man sich um den zutreffenden Quadranten selbst kümmern muss.

    Um aus dem Atn2-Ergebnis in Bogengrad einen Winkel zwischen 0..360° zu machen, muss noch gewandelt werden. Auch dafür hat Bascom eine Funktion parat:

    Winkel = rad2deg(Ergebnis)

    Fertig, sollte man meinen... Wäre da nicht ein kleines Problem in BASCOM, mit dem ich schon seit Monaten rumkämpfe

    Weiß jemand hier den Grund, warum sich Bascom gegenüber EXCEL verrechnet, oder noch besser, wie man übereinstimmende Ergebnisse bei den beiden Berechungen bekommt? Irgend etwas Entscheidendes muss ich übersehen haben...

    Nachtrag:
    Pikanter Weise hat Excel ebenfalls beide Funktionen.
    ATN(Y/X) ist parameterkompatibel aufgebaut (gleiche Reihenfolge der Parameter), ATN2(X;Y) hingegen erwartet die beiden Parameter in umgekehrter Reihenfolge gegenüber BASCOM!! Da muss man (bei vergleichenden Untersuchungen) auch erst mal drauf kommen

    Nachtrag2:
    Mein Taschenrechner gibt Excel Recht
    Geändert von deHarry (12.08.2012 um 18:17 Uhr)
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  4. #24
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo!

    Also ich kann bei BASCOMs atn2 keine Probleme erkennen.

    Code:
    X = 1
    Y = 1
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    liefert bei mir
    w = 0.78540468 (= pi/4)
    ww = 45.000373839

    Code:
    X = -1
    Y = 1
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    gibt

    w = 2.356188056 (= pi * 3/4)
    ww = 134.999618528

    und

    Code:
    X = 1
    Y = -1
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    gibt

    w = -0.78540468 (= - pi/4)
    ww = -45.000373839

    Wobei w und ww natürlich Singles sind.

    Und das ist so eigentlich auch korrekt. Was Excel da macht weiß ich nicht, kann mir aber nicht vorstellen dass da was schiefgeht...

    Gruß
    Malte
    Geändert von malthy (12.08.2012 um 18:50 Uhr)

  5. #25
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Sorry, war etwas zu spät mit meinem Posting... Wenn's denn einfach nur an der Parameterreihenfolge gelegen hat. Dann ist die Welt ja wieder in Ordnung...

  6. #26
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Hi Malte,

    nein, nein, so einfach ist das leider nicht.
    Das in meinem Beitrag oberhalb der beiden Nachträge geschriebene gilt immer noch, ich wollte nur vermeiden, dass ihr diese "Fallen" erst aufdecken müsst

    So, deine Beispiele:
    X=1, Y=1 ist klar. Beides positiv, also Quadrant Rechts oben, 45°. Keine Einwände.
    X=-1, Y=1... also Quadrant links oben, würde ich meinen, 135°. Auch ok. Excel errechnet damit ebenfalls 135°.
    X=1, Y=-1... Quadrant rechts unten, also -45°. Excel meint hier auch -45°.

    Zusammen genommen interpretiere ich das so:
    Solange man bei einfachen Zahlen bleibt (+/-1 z.B.) stimmt alles wie im Lehrbuch.

    Jetzt nimm aber mal
    X=0,0195 (ist positiv)
    Y=0,2951 (ist auch positiv)

    Die Erwartungshaltung ist ein Winkel im 1. Quadranten, also zwischen 0 und 90 Grad. Da X sehr klein und Y nur klein ist, eher Richtung 90 Grad.
    Excel errechnet 86,22 Grad mit der ARCTAN2-Funktion, was unsere Erwartungshaltung gut befriedigt.

    Mein Programm in Bascom errechnet daraus 186 Grad.

    Was errechnest du in BASCOM?

    Ich habe schon alles zigmal kontrolliert, Variablen vor und hinter den Singles für die X- und Y-Werte auf Bereichsüberschreitungen oder Ähliches überprüft, aber keine Fehler gefunden.
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  7. #27
    Erfahrener Benutzer Roboter Genie Avatar von malthy
    Registriert seit
    19.04.2004
    Ort
    Oldenburg
    Beiträge
    1.379
    Hallo Harald!

    Leider kann ich das Problem nach wie vor nicht reproduzieren. Ich habe mal dein Wertepaar verwendet, nämlich folgendermaßen (very quick and very dirty... ):

    Code:
    Dim X As Single
    Dim Y As Single
    
    Dim W As Single
    Dim Ww As Single
    
    
    X = 0.2951
    Y = 0.0195
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    Print
    
    X = -0.2951
    Y = 0.0195
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    Print
    
    X = 0.2951
    Y = -0.0195
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    Print
    
    X = -0.2951
    Y = -0.0195
    W = Atn2(y , X)
    Ww = Rad2deg(w)
    Print W
    Print Ww
    Print
    
    End
    ich bekomme dann als Ausgabe

    Code:
    0.065983471
    3.780575748
    
    3.075609442
    176.219436644
    
    -0.065983471
    -3.780575748
    
    -3.075609442
    -176.219436644
    Wenn ich das Ganze genauso mit Matlab mache, bekomme ich

    Code:
    0.0660
    3.7806
    
    3.0756
    176.2194
    
    -0.0660
    -3.7806
    
    -3.0756
    -176.2194
    M. a. W. das Gleiche! (Habe mein Matlab so eingestellt, dass die Konsolenausgabe auf vier Stellen nach dem Komma gerundet ist.)

    Wenn man sich das jetzt nochmal überlegt, macht das auch Sinn:
    Das erste Wertepaar entspricht einem Punkt im ersten Quadranten (rechts oben, x>0; y>0), im Bereich von 0 bis pi/2 (0 - 90°). Weil der y-Wert klein (0.0195) ist, nah an der x-Achse. Das Ergebnis 3.780575748(°) passt also.

    Gleichermaßen für den zweiten Quadranten (oben links, x<0; y>0), Bereich von pi/2 bis pi (90°-180°). Der Wert muss immernoch nahe an der x-Achse liegen (kleiner y-Wert), jetzt aber auf der anderen Seite, also nah an 180°. Ergebnis ist 176.219436644(°), passt also auch.

    Für den dritten Quadranten (links unten, x<0; y<0), Bereich -pi bis -pi/2 (-180° bis -90°) liegt der Punkt immernoch nahe an der x-Achse, also nahe an -180°. Ergebnis ist -176.219436644(°), passt also auch (Achtung: der Wert wird in dem Bascom Code als letztes berechnet).

    Bleibt noch der vierte Quadrant (rechts unten, x>0; y<0), der von -pi/2 bis 0 (-90° bis 0°) läuft. Der Punkt muss wieder nah an der x-Achse, also nahe an 0° aber eben im Negativen liegen. Ergebnis ist -3.780575748(°). Treffer.

    Also so weit ich sehen kann, passt das bei mir immernoch alles. Und: ich mach schon öfters mal Mist, Matlab aber nie. Und Matlab und ich sind uns hier (ausnahmsweise) mal einig

    Ich habe das Ganze übrigens nur mit dem Bascom Simulator getestet. Allerdings verwende ich den atn2 häufig, natürlich dann auf "echter" Hardware (inverse Kinematik bei meinem Hexapoden und Deltaroboter zB), ich habe noch nie Probleme damit gehabt...

    Gruß
    Malte

    P.S.: Ah, sorry, jetzt habe ich deinen x-Wert als y verwendet und deinen y-Wert als x. Ändert aber an der Argumentation nichts... Für x = 0.0195 und y = 0.2951 (deine Werte) sagt Bascom bei mir übrigens 86.219429015(°)
    Geändert von malthy (12.08.2012 um 22:19 Uhr) Grund: Ergänzung

  8. #28
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Zitat Zitat von malthy Beitrag anzeigen
    Für x = 0.0195 und y = 0.2951 (deine Werte) sagt Bascom bei mir übrigens 86.219429015(°)
    Hi Malte,

    Super Service, vielen Dank für´s schnelle Ausprobieren!!! (ich hoffe, das war wirklich schnell...)

    So, da haben wir doch schon mal ein Schweinderl...
    Auf meiner Hardware errechnet Bascom als Winkel 186°. Ich hoffe inständig, dass zwischen Simulation und Hardware kein Unterschied besteht.

    Ich tue mich mit meinem Programm etwas schwer mit der Simulation, weil ich mich durch meterweise Menus kämpfen muss und die Navigation im Menu per Hardware-Taster erledige. Das ist Frust erzeugend, wenn man mehrere Werte im Hunderter-Bereich über den Debugger eingeben muss... Das sind die Ausgangswerte, aus denen das Programm die X- und Y-Werte berechnet, aus denen dann der Winkel abgeleitet werden soll.
    Ich werde mal ein kleines Testprogramm erstellen müssen, jetzt, wo ich weiß, dass Bascom offenbar auch richtig rechnen kann...

    Meine Idee, dass ich durch falsche Deklarationen Speicherbereiche überschreibe, die die Ausgangswerte für die Berechnung halten... Kann ich in Bascom irgendwie (z.B. in einem Listung der Speicherbelegung) überprüfen, ob sowas passiert? Kommen da idealer Weise Warnungen?
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

  9. #29
    Erfahrener Benutzer Roboter-Spezialist Avatar von deHarry
    Registriert seit
    17.08.2010
    Beiträge
    597
    Hallo Malte,

    ich habe eben den Fehler gefunden. Mein Gott, kann ein einzelner Mensch vernagelt sein...

    Das ist ein Auszug aus meiner Berechnung in BASCOM:
    Code:
       Part2 = Atn2(yresult , Xresult)
       Korrekturwinkel = Rad2deg(part2)                ' Umrechnung von Radian in Grad
    
       Winkelint = Korrekturwinkel                     ' Single -> Integer
       Winkel = Str(winkelint)
       C = Len(winkel)
       C = 4 - C                                       ' ein bisschen Voodoo um den Doppelpunkt immer an der gleichen Stelle zu halten
    
    ' Werte ausgeben
       Locate 2 , C
       Lcd Korrekturwinkel ; "{223}: " ; Masse ; " - q:" ; Quadrant
    Und jetzt des Rätsels Lösung:
    Den auszugebenden Winkel will ich als Integer (nur Vorkommastellen) haben. Daher die Umwandlung in einen String, einen besseren Trick kenne ich nicht.
    Den Offset "C" errechne ich, damit der Doppelpunkt hinter dem "°"-Zeichen ("{223}") immer in der gleichen Spalte steht.
    Habe ich einen zweistelligen Vorkomma-Wert in der Single-Variablen Korrekturwinkel (86,22 z.B.), dann startet die Ausgabe folglich in Spalte 2.
    Bei einem einstelligen Wert startet die Ausgabe in Spalte 3.

    Jetzt die Stelle, wo es mir den Trick zerrissen hat...
    Im Menu-Framework wird die zweite Zeile mit einem Dummywert beschrieben:
    Code:
    Data "Korrekturmasse"
    Data "133{223}: 0,333            {003}"         ' "133°: 0,333"
    ...was zur Laufzeit dann so aussieht:
    1. Zeile: "Korrekturmasse"
    2. Zeile: "133°: 0,333"

    Diese zweite Zeile steht dann im Display, wenn meine Routine bei dem Locate 2, C ankommt.
    Das tut sie dann auch, sprich, der Schreibzeiger des Display wird auf Spalte 2 gestellt, und dort wird dann "86" ausgegeben, anschließend noch "°" und der Rest der Werte.
    Im Display steht aber "186°:...", weil die "1" einfach stehen geblieben ist
    Bei einstelligen Ergebnissen stand dann schon mal einhundertpaarunddreißig im Display (139 statt 9, Differenz 130!!! ) und mein Glaube an das Gute im Atmel ist so nach und nach zwischen die Parkettbohlen diffundiert.

    Ich habe mich schon sehr früh über die Differenz von 100 gegenüber den Excel-Ergebnissen gewundert, bin aber immer vor der finalen Erkenntnis irgendwo falsch abgebogen. 100 im Zusamenhang mit Winkeln (nicht Neugrad) erschien mir suspekt, aber es ist ja alles errechnet, also erst mal richtig...

    Danke Malte, dass du meine Denke wieder in die richtige Richtung gebogen hast!
    Ich habe vor lauter Winkeln und Kreisen den Gesamtblick verloren und nur noch an der Mathematik gezweifelt.
    Gruß
    Harald
    __________________
    Modellbau&Elektronik
    www.harald-sattler.de

Seite 3 von 3 ErsteErste 123

Ähnliche Themen

  1. Frequenz für OCR2 ausrechnen
    Von sloti im Forum C - Programmierung (GCC u.a.)
    Antworten: 8
    Letzter Beitrag: 16.02.2008, 12:07
  2. Ausrechnen Netzteil
    Von Lordcyber im Forum Elektronik
    Antworten: 7
    Letzter Beitrag: 26.06.2007, 11:14
  3. kurzesten Weg ausrechnen
    Von Mehto im Forum Software, Algorithmen und KI
    Antworten: 3
    Letzter Beitrag: 04.06.2006, 19:35
  4. Den Rest ausrechnen
    Von Lunarman im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 2
    Letzter Beitrag: 27.03.2006, 07:52
  5. ADC-Wert für PWM
    Von HTLer im Forum PIC Controller
    Antworten: 2
    Letzter Beitrag: 19.02.2006, 05:19

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

12V Akku bauen