Hallo, ich lese einen Beschleunigungssensor aus, der liefert mir die Erdbeschleunigung in mg. Ich habe folgendes Programm geschrieben, wenn ich die Beschleunigungswerte auf meinem Display ausgebe funktioniert alles, jetzt wo cih die trigonometrische Funktion drin habe, zeit mein Display aber immer nur +00000 an, stat mir einen Winkel als Integerwert zu liefern. Hier ist mein Code. #include <avr/io.h> #include <util/delay.h> #include <stdint.h> #include <math.h> #include "stringumwandlung.h" #include "lcd.h" #include "spi.h" double asin(double); int main(void) { DDRC = 0xFF; //LCD initialize_display(); set_cursor(0, 0); write_string("Winkel: "); _delay_ms(1000); int Wert; char Ausgabe[7]; double Zwischenwert; SPI_MasterInit(); DDRD = 0xFF; while(1) { Wert = SCA3000_Read_16bit(); _delay_us(20); Zwischenwert = Wert * 0.75; //wegen Sensor Datenblatt S.17 Zwischenwert = Zwischenwert/1000; //arcsin Wert bilden Wert = asin(Zwischenwert); //asin Wert in Winkel umwandeln my_itoa(Wert,&Ausgabe); set_cursor(0, 9); write_string(Ausgabe); _delay_ms(500); } return 0; } mfg Gerald
Hast du die Zahlen in Zwischenwert kontrolliert? Du bist dir bewusst, dass du den Winkel in Radianten bekommst? Also nicht 0 bis 180 sondern 0 bis PI. Den Prototyp für asin solltest du aus deinem Programm rausnehmen. Der muss über math.h reinkommen. Die Mathe-Bibliothek libm.a hast du bei den Linkeroptionen eingetragen?
Äh nein die Linkeroption hab ich nicht eingetragen, kannst du mir evt. sagen wo man das im AVR-Studio macht? In PI, das heisst dann das ich mein Ergebnis erst noch mit 3.14159 multiplizieren muss? Gruß Gerald
Gerald F. schrieb: > Äh nein die Linkeroption hab ich nicht eingetragen, kannst du mir evt. > sagen wo man das im AVR-Studio macht? so ähnlich wie hier. Nur dass du lediglich libm.a brauchst und sonst nichts. http://www.mikrocontroller.net/articles/FAQ#Aktivieren_der_Floating_Point_Version_von_sprintf_beim_WinAVR_mit_AVR-Studio > In PI, das heisst dann das ich mein Ergebnis erst noch mit 3.14159 > multiplizieren muss? Äh nein. Dreisatz. PI Äpfel kosten 180 Euro. Wieviele Euro kosten 'Wert von asin' Äpfel? PI ...... 180° Wert ...... x -------------------------- 180 * Wert x = ------------ PI
>In PI, das heisst dann das ich mein Ergebnis erst noch mit 3.14159 >multiplizieren muss? Aber nein. Wenn Du PI als Winkel im Bogenmaß (das deutsche Wort für Radiant" nimmst, dann entspricht das 180° Du musst also mit 180/PI multiplizieren.
Ja ok ich muss sagen ich schäm mich grad n bisschen.... Werd mal n stündchen pause machen vllt. gehen die gedanken dan wieder geradeaus Gruß Gerald
Oops. Zu spät. Man sollte beim antworten nicht noch Tee kochen.
Bin jetzt grad am überlegen, meint ihr das in etwa so? #include <avr/io.h> #include <util/delay.h> #include <stdint.h> #include <math.h> #include "stringumwandlung.h" #include "lcd.h" #include "spi.h" double asn(double); int main(void) { DDRC = 0xFF; //LCD initialize_display(); set_cursor(0, 0); write_string("Winkel: "); _delay_ms(1000); int Wert; char Ausgabe[7]; double Zwischenwert; SPI_MasterInit(); DDRD = 0xFF; while(1) { Wert = SCA3000_Read_16bit(); _delay_us(20); Zwischenwert = Wert * 0.75; //wegen Sensor Datenblatt S.17 Zwischenwert = Zwischenwert/1000; //arcsin Wert bilden Zwischenwert = asin(Zwischenwert); //asin Wert in 0...PI umwandeln (0-180Grad) Wert = Zwischenwert * 180; my_itoa(Wert,&Ausgabe); set_cursor(0, 9); write_string(Ausgabe); _delay_ms(500); } return 0; }
>Bin jetzt grad am überlegen, meint ihr das in etwa so?
Nun, was kommt denn raus?
Also ehrlich Karl Heinz, das: >Dreisatz > PI ...... 180° > Wert ...... x > -------------------------- > 180 * Wert > x = ------------ > PI hättest Du aber wirklich deutlicher schreiben können. ;-) Kleiner Scherz, nicht übelnehmen bitte.
Huch schrieb: > Also ehrlich Karl Heinz, das: > >>Dreisatz > >> PI ...... 180° >> Wert ...... x >> -------------------------- > >> 180 * Wert >> x = ------------ >> PI > > hättest Du aber wirklich deutlicher schreiben können. ;-) Ja, ich hätte meine Eselsbrücke (die nicht von mir stammt) auch noch mit angeben können. "Zahl über x mal Stumpf durch Spitz" > Kleiner Scherz, nicht übelnehmen bitte. Kein Problem. Ich denke, ich hab dich schon verstanden, dass das kein Seitenhieb auf mich war :-) Es ist im übrigen extrem angebracht, sicherzustellen, dass der Wert, den man dem asin vorwirft, auch tatsächlich im Bereich -1 ... +1 liegt. Nicht zuletzt deshalb kam ja auch der zusätzliche Vorschlag sich mal den Zwischenwert genauer anzusehen.
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.