Forum: Mikrocontroller und Digitale Elektronik Sonnenaufgang


von Daniel K. (danielk91)


Lesenswert?

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;

von Klaus R. (klaus2)


Lesenswert?

...gib doch einfach mal zwischenwerte per uart aus?!?!

mit soviel math.h knallt es bestimmt irgendwo.

Klaus.

von Benjamin S. (recycler)


Lesenswert?

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?

von Marvin M. (Gast)


Lesenswert?

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.

von Daniel K. (danielk91)


Lesenswert?

@ 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

von Daniel C. (cagara)


Lesenswert?

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)

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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

von Johann L. (gjlayde) Benutzerseite


Lesenswert?

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

von Benjamin S. (recycler)


Lesenswert?

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.

von Daniel K. (danielk91)


Lesenswert?

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

von Ansgar S. (ansi)


Lesenswert?

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

von 900ss (900ss)


Lesenswert?

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
Noch kein Account? Hier anmelden.