Hallo Community, ich hab folgendes Problem: ich mochte mit Hilfe eines PIC Mikrocontroller (16F1455) den Lagewinkel bestimmen. Ich habe einen 3- Achs Lagesensor welcher mir jeweils 10 Bit (x,y,z) liefert. nun möchte ich aus diesen Werten den winkel berechnen. 2D reicht aus. Also ich will im Grunde die Neigung in Grad oder Bogenmaß in Bezug auf waagerecht. Ich dachte an Skalarprodukt nur wie setze ich das in Assembler um? Mfg Tomas
Zunächst solltest du die Werte deines Lagesensors als Zahlenwerte über den ADC des uC ermitteln. Evtl. Werte Filtern, glätten, plausibilisieren. Dann stellst du deine Rechenvorschrift(en) auf, in mathematischen Formeln, auf Papier z.B. ; mit'm Taschenrechner. Dann tippst du die Schritte der Rechenvorschriften in skalierten Werten, ausgegehend von den ADC Zahlen, in eine EXCEL Tabelle ein (Open Office Calc)! Dort rechnest du das dann Schritt für Schritt durch, und zwar möglichst unter Verwendung von GANZZAHL und RUNDEN, sowie möglich wenig Dividieren und wenn nur durch ganze Vielfache von 2. Nach jeden Schritt das Ergebnis abprüfen ob es in einen 8-Bit, einen 16-Bit oder höchstens in einen 32-Bit-Wert paßt. Zum Schluß muss (in EXCEL) das korrekte Ergebnis für die Eingangswerte rauskommen. Jetzt kannst an den Eingangswerte "rumspielen", v.a. minimale und maximale Werte, einzeln oder alle zusammen usw. Wenn alles paßt, erst dann sollte man die Umsetzung nach ASM tun (oder doch besser nach C). Gruss
Hallo Danke für deinen Tip! Hab das ganze auf dem Blatt durchgerechnet ist da ja auch kein Problem, ist ja nur Skalarprodukt. also acos((a*b)/(|a|*|b|)) die Aufnahme der ADC werte ist auch kein Problem. Das einzige Problem das ich habe ist, das ich nicht weiß wie ich 2x 10 Bit in Assembler multipliziere, dividiere (16f1455) und wie ich den ACOS bilde. Gruß Tomas
Wenn der keinen Hardware Multiplizierer hat dann mit addition und ner schleife bis der. Bei der Division mit ner schleife und nem Subtrahierbefehl. Und für Sin u. cos nimmt man lookup Tabellen und interpoliert den Rest.
vielen Dank für die Antwort werde mir das Thema look up Tabellen ect. mal ansehen. Gibt es da schon fertige Schleifen für 10 bit * 10 bit Multiplikation? Gruß Tomas
Tomas schrieb: > vielen Dank für die Antwort werde mir das Thema look up Tabellen ect. > mal ansehen. > > Gibt es da schon fertige Schleifen für 10 bit * 10 bit Multiplikation? Das Prinzip kannst du dir hier ansehen. AVR-Tutorial: Arithmetik8: Multiplikation in Software AVR-Tutorial: Arithmetik8: Division in Software Ist zwar für einen AVR ausprogrammiert aber das tut der Sache ja keinen Abbruch, da du all das bereits in der Grundschule (sogar in der verschärften Form im Dezimalsystem) gelernt hast. UNd der Rest: den nennt man programmieren.
ok vielen Dank für deine Antwort Karl Heinz. Werde das dann mal für 10 bit Umsetzen. @ Guest: Ich besitze keinen C Compiler für dem Oben genannten PIC 16F1455 sondern nur einen Assembler Compiler. Noch so ne frage zu den LUT's. Muss ich mir die LUT selbst erstellen? Ich finde im Netz keine fertige LUT für acos. pi/2 wurde mir ja reichen aufgrund Symmetrie,.. Gruß Tomas
Tomas schrieb: > Ich finde im Netz keine fertige LUT für acos. Na ja, komm. Sowas ist mit Excel schneller gemacht, als du in Google acos eintippen kannst. Oder, 'Gott bewahre', auf dem hoffentlich auf dem PC ohnehin installierten C-Compiler ein 4 Zeilen Programm geschrieben, welche die LUT ausgibt und die man aus der CommandLine in ein File redirected.
Ich hätte da noch eine 32-Bit ARCCOS-Berechnung für 8051-ASM ... Legt den Prozessor allerdings lahm. Gruß Jobst
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.