Hallo User, hoffentlich kann mir hier jemand weiter helfen. Ich versuche den Zeitpunkt des Sonnenaufgangs und des Sonnenuntergangs zu ermitteln. Leider berechnet mir mein ATMega 32 nicht den erwuenschten Wert. Hab es manuell nachgerechnet und komme auf in etwa eine Stunde Unterschied zu dem Ergebnis des Mikrocontrollers. Sieht jemand auf Anhieb den Fehler. Wuerde mich freuen wenn mir hier jemand weiterhelfen kann! Alle Variablen sind als float deklariert. Gruss Daniel void sunset(void) { unsigned int dd; b=3.141592654*(-26.4)/180; hh=-0.1145; dekli=0.4095*sin(0.016906*(330-80.086)); timedifferenz=12*acos((sin(hh)-sin(b)*sin(dekli))/(cos(b)*cos(dekli)))/3 .141592654; realtime=12-timedifferenz; sunrisetime=realtime+(15-28.08)*4/60;
...gib doch einfach mal zwischenwerte per uart aus?!?! mit soviel math.h knallt es bestimmt irgendwo. Klaus.
Ich würde auch auf die math.h setzen. Berechne lieber die meisten Werte im Vorraus und nur das nötigste in der Routine. Dann gibts weniger Fehler. Mit welchem Rechner rechnest du. Hast du nicht vergessen auf RAD umzustellen, und nicht mit DEG zu rechnen?
Da sind einige Integer-Konstanten drin - schreib die mal als Float, also z.B. anstelle 180 eine 180.0 Könnte sein, dass der Compiler das nicht richtig casted.
@ Benjamin Wo stell ich den Rechner auf Rad um. Ich dachte math.h rechnet schon in Rad. Weiterhin kann ich nicht viel vorher berechnen, da die Tage (hier sind es 330Tage) sich ja aendern und dann alles wieder neu berechnet werden muss. Die Umschreibung in float hat leider nichts bewirkt. Danke schon mal!!!! Gruss Daniel
timedifferenz kannst du zusammenfassen in ArcCos( Sec(b) Sec(dekli) Sin(hh) - Tan(b) Tan(dekli)) * 7.63944 (falls nicht bekannt, Sec ist der Sekans = 1/cos)
Du weisst ja, daß hier nur mit float gerechnet wird. Evtl. findest du ne Formulierung, die besser konditioniert ist. http://de.wikipedia.org/wiki/Gleitkommazahl#Ausl.C3.B6schung http://de.wikipedia.org/wiki/Fehlerschranke
Die Deklination ist offenbar konstant --> Ausrechnen und Konstante ins Programm eintragen. Rumrechnen vergrößert nur die Ungenauigkeit. Gleiches gilt für ihre sin- und cos-Werte und 12/pi d.h. anstatt
Berechnest du
...und das gilt auch für b Was an der Formel ist denn überhaupt variabel? Nur hh ? In dem Fall wäre zu berechnen
Die Rechnung mit RAD führt die math.h richtig aus. Ich meine ob du in deinem Taschenrechner oder in Windowsrechner oder auch unter Linux mit kcalc usw. den richtigen Modus für die Verifikation eingestellt hast. Oder liefert nur das Programm fehlerhafte Werte.
Danke an alle. Ich hab das Problem wieder mal mit eurer Hilfe geloesst. Ich hab teilweise eure Ratschlaege umgesetzt und die Genauigkeit der Werte erhoeht und nun ist die Rechnung Praezise. Danke und schoenen Tag Daniel
Moin Daniel Daniel K. wrote: > Danke an alle. Ich hab das Problem wieder mal mit eurer Hilfe geloesst. > Ich hab teilweise eure Ratschlaege umgesetzt und die Genauigkeit der > Werte erhoeht und nun ist die Rechnung Praezise. Ich bin auch gerade auf der Suche nach einer entsprechenden Berechnungsroutine. Kannst du deine Routine eventuell zur Verfuegung stellen oder mir zumindest privat zuschicken? Tausend Dank. Gruss Ansgar
Ich habe diese Routine mal getestet und sie funktionierte: http://www.mikrocontroller.net/attachment/30393/sun.c Gruß 900ss
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.