PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Beschleunigung berechnen



michas_rob
18.10.2007, 20:39
Hallo an alle,

ich kämpfe schon seit längerem und hab schon öfters das Forum durch forstet, jedoch leider nichts gefunden.

Aber jetzt zu meinem Problem, ich hab einen 3-Achsen Beschleunigungssensor an einem Atmega8 und möchte die 3 ADC Werte mittels folgender Formel berechnen und anschließend am Display ausgeben.
a = sqrt(x*x + y*y + z*z);
x,y,z => ADC Werte

Ich hatte mir gedacht den Datentyp long ( kann ich in diesem Datentyp eine Kommazahl speichern?) zu verwenden, oder wäre float besser und mit welcher Funktion kann diese anschließend in einen String umwandeln.

Danke für alle Antworten

Michael

recycle
18.10.2007, 21:00
Ich hatte mir gedacht den Datentyp long ( kann ich in diesem Datentyp eine Kommazahl speichern?) zu verwenden, oder wäre float besser und mit welcher Funktion kann diese anschließend in einen String umwandeln.


Ich habe leider keine Ahnung von C.
Wenn ich Infos über Datentypen einer Programmiersprache suchen würde, würde ich aber nicht in irgendeinem Forum, sondern in einer Doku zu der Programmiersprache suchen.
Wenn dem Compiler keine Doku beiligt, findest sich da über Google meist ganz schnell irgendwas, z.B. das hier:
http://www.siwawi.arubi.uni-kl.de/avr_projects/AVR-GCC-Tutorial_-_www_mikrocontroller_net.pdf

Demnach ist der Datentyp Long in C (wie in wahrscheinlich allen Programmiersprachen) ein ganzzahliger (Integer) Datentyp.
Damit bist er für Kommawerte wenig geeignet.

Float gucke ich jetzt nicht nach, bin mir aber sicher, dass der Name etwas mit "floating point" zu tun hat ....



mit welcher Funktion kann diese anschließend in einen String umwandeln.


Guck mal auf Seite 29: http://www.siwawi.arubi.uni-kl.de/avr_projects/AVR-GCC-Tutorial_-_www_mikrocontroller_net.pdf

michas_rob
19.10.2007, 06:18
Danke für deine Antwort,

ich muss mal meine bisherigen Versuch beschreiben, denn ich dieses Beispiel bereits verwendet, jedoch bekomme ich bei der Funktion itoa immer einen leeren String zurück?!?

Danke
Michael

askazo
19.10.2007, 08:36
Für Kommazahlen sind in C nur die Datentypen float, double und long double geeignet. Normalerweise unterscheiden sich diese Typen in Ihrer Größe, in WinAVR sind allerdings alle drei als 32bit-Typ realisiert, es macht also keinen Unterschied, welchen der drei Du benutzt.

Um das Ergebnis in einen String zu verwandeln, gibt es die Funktion sprintf()



#include <stdio.h>

double x;
char string[32];

x = 1.231;

sprintf(string, "Wert: %f",x);


Gruß,
askazo

michas_rob
19.10.2007, 11:01
Dankeschön,

werd es heute gleich versuchen, ich hbae bis jetzt immer float verwendet und wenn ich diese in einen ASCII String umgewandlet hab, hat er nur 0 ausgegeben.

Danke
Michael

askazo
19.10.2007, 11:46
Wenn Du float mir itoa verwendet hast, kann's nicht gehen.
itoa ist nur für Integer-Typen gedacht. (itoa = Integer to Ascii)

askazo

michas_rob
19.10.2007, 16:09
Dankeschön...

es klappt endlich, zwar weiß ich nicht wieso es nicht mit float funktioniert, aber mit double funktionierts...

Danke
Michael