www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Sonnenaufgang


Autor: Daniel K. (danielk91)
Datum:

Bewertung
0 lesenswert
nicht 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;

Autor: Klaus R. (klaus2)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
...gib doch einfach mal zwischenwerte per uart aus?!?!

mit soviel math.h knallt es bestimmt irgendwo.

Klaus.

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Marvin M. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel K. (danielk91)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Daniel Cagara (cagara)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Benjamin S. (recycler)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Daniel K. (danielk91)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ansgar Schmidt (ansi)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: 900ss D. (900ss)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe diese Routine mal getestet und sie funktionierte:
http://www.mikrocontroller.net/attachment/30393/sun.c

Gruß 900ss

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.