Gast
#4024813
1 | |
2 | |
3 | |
4 | |
5 | |
Wieso kommt hierbei -0.4177479 raus und nicht die erwarteten 0.997 ?
|
Anzeige
|
Microchip PIC24 cos() function
Gast
#4024813
Wieso kommt hierbei -0.4177479 raus und nicht die erwarteten 0.997 ?
Gast
#4024820
Simon schrieb: > #include <math.h> > > float f; > f = 356.1398; > f = cos(f); > > Wieso kommt hierbei -0.4177479 raus und nicht die erwarteten 0.997 ? Weil es das korrekte Ergebnis ist. Stichwort: Bogenmaß.
Gast
#4024821
Das Ergebnis ist korrekt. sin und cos erwarten ein Winkel in rad, nicht in °. Du musst also den Winkel zunächst umrechnen.
Gast
#4024822
Simon schrieb: > Wieso kommt hierbei -0.4177479 raus und nicht die erwarteten 0.997 ? weil Computer allgemein nicht mit grad sondern mit radians arbeiten.
Gast
#4024842
Gibt es da ein einfachen weg um das umzurechnen? Folgendes soll berechnet werden: Vielleicht das man das irgendwie auch optimiert und keine math.h braucht
Gast
#4024846
Simon schrieb: > Folgendes soll berechnet werden: > Vielleicht das man das irgendwie auch optimiert und keine math.h braucht feste Tabelle: f sollte auch kein float sein und in einen überschaubaren Wertebereich liegen. word costab[] = {0,2,3,4,65,76,78,98,9, .... } w = costab[f];
Gast
#4024854
Moin Simon, schau dir auch mal den Link an: Beitrag "Winkelberechnung mit PIC" Gruß Beast
Gast
#4024866
Die Multiplikation f *= 0.0703; kann ich lassen wie gewohnt? eventuell kann man das ja aufbohren auf 703 so hat man dann ein höheren wert. Nur da kommt auch ein anderes cos() ergebnis raus. Wie funktioniert das mit der Tabelle genau? welche werte werden da vorher abgelegt?
Gast
#4024869
Simon schrieb: > Wie funktioniert das mit der Tabelle genau? welche werte werden da > vorher abgelegt? sinnvoller weise die cos werte. Das ist doch dir überlassen, es ist einfach eine Tabelle die aus einem wert einen anderen macht also eine Vorberechnung. Wenn bei dir nur ein paar hundert Winkel möglich sind, dann kann man für diese Winkel sich einfach vorher die Daten berechnen.
Gast
#4024870
BeastyK schrieb: > Moin Simon, > > schau dir auch mal den Link an: > > Beitrag "Winkelberechnung mit PIC" Hier gehts um einen PIC24, 16 Bit 16MHz oder mehr, da macht man keine Klimmzüge (da war ein IBM AT viel langsamer). MfG Klaus
Gast
#4024885
Es geht um die Berechnung von einem versatz zwischen Spannung und strom. also sprich dem cos(phi) im Wechselstromnetz. Ich bekomme von einem chip den Wert geliefert. Als 16Bit WORD, z.B. ebend 5066 und möchte das auf einen Winkel Umrechnen. Ich bin mir also nicht sicher ob das mit so einer Tabelle ausreichend genau ist. Vorallem wie groß soll die Tabelle den sein? Ich spare mir damit CPU leistung zu lasten von Speicher.
Gast
#4024895
Simon schrieb: > Ich spare mir damit CPU leistung zu lasten von Speicher. Für nicht benutzte CPU Takte gibt es keine Rückvergütung. Wenn es also gerechnet schnell genug ist, ist alles gut. MfG Klaus
Gast
#4024896
Simon schrieb: > Als 16Bit WORD, z.B. ebend 5066 und möchte das auf einen Winkel > Umrechnen. und was ist der wert 5066? > Ich spare mir damit CPU leistung zu lasten von Speicher. genau das ist der Sinn einer Tabelle.
Gast
#4024900
Klaus schrieb: > Für nicht benutzte CPU Takte gibt es keine Rückvergütung. für nicht genutzten Flash auch nicht. außerdem wollte er ja scheinbar nicht rechnen: > keine math.h braucht Die gesuchte funktion waere dann arccos. Wie genau muss es an denn sein? Bitte keinen 0.1 Grad Furz...
Gast
#4024916
Also rauskommen soll ein WORD, also wenn cos phi 0.99 ist könnte ich gut mit 99 leben z.B.
Gast
#4024922
Simon schrieb: > Also rauskommen soll ein WORD, also wenn cos phi 0.99 ist könnte ich gut > mit > 99 leben z.B. 99 was? ein cos phi 0,99 sind doch keine 99Grad Phasenverschiebung.
Gast
#4024938
Peter II schrieb: > ein cos phi 0,99 sind doch keine 99Grad Phasenverschiebung. Nein nein, ich hätte es nur *100 genommen um es in ein WORD ohne komma zu bekommen also die 99 würden 0.99 entsprechen
Gast
#4024942
und welchen Wert bekommst du extern rein? Wird doch wohl kein float sein? Wie ist diese Wertebreich definiert?
Gast
#4024950
Simon schrieb: > Ich bekomme von einem chip den Wert geliefert. > > Als 16Bit WORD, z.B. ebend 5066 und möchte das auf einen Winkel > Umrechnen. Das ist der Schlüssel. Was liefert der Chip? Bananen? RAD? Was sagt das Datenblatt zum "Chip"? Weshalb braucht man denn einen Gradwert ? Meist kann man mit proportionalen Werten weiterrechnen. Dh 2345 ist ebensogut wie 89, meist eher schneller und genauer. Ich rechne nur fuer Benutzerinteraktionen auf Bentuzerwerte wie Grad-winkel, oder Grad-Celsius um, die Rechnungen sind in integer, meist Longint.
Gast
#4024972
Also das was er ausgibt ist ebend dieser 16 Bit wert 5066 z.B. Der wird anhand der formel unten berechnet
Gast
#4024986
Also alles Integer. 703 mal den Registerwert und das Komma an die richtige Stelle... ...Fertig.
Gast
#4024994
Ich meine Longint. (STM32 geschädigt ;-) )
Gast
#4025014
War wohl etwas voreilig. Das ist dann erst der Phasenwinkel. Davon brauchts dann noch den cos. Würde ich als Tabelle mit 000 bis 100 für cos Phi anlegen und dem Registerwert als Index.
Gast
#4025027
hp-freund schrieb: > Also alles Integer. > 703 mal den Registerwert und das Komma an die richtige Stelle... Willst du mir damit sagen, ich hab so nen aufriss gemacht, obwohl es so leicht hätte sein können. oh man
Gast
#4025033
Nein, sorry hatte erst den Phasenwinkel im Hinterkopf. Du willst aber den cos davon.
Gast
#4025036
Ich habs gerade bemerkt, ja das ergebnis stimmt schon, aber ebend erspart mir das den cos() nicht Antwort schreibenBitte melde dich an, um einen Beitrag zu schreiben. |
Anzeige
|