Hallo zusammen,
ich habe es jetzt endlich hinbekommen ein Programm zu schreiben, welches auf einem HP48 S/SX/G/GX (auch emuliert via EMU48) die Sonnenstände für einen Tag sehr genau berechnen kann.
Dabei können nahezu beliebige Ortskoordinaten eingegeben werden (etwa Längengrad -180°W bis +180°O), bei den Breitengraden habe ich das Programm aber auf -65°S bis +65°N beschränkt, weil zu diesen Breitengraden hin die Genauigkeit der Berechnungen bei nur noch kleiner/gleich 9 Minuten liegt.
Auch bis zu 6 Presets für eigene Ortsvorgaben sind möglich, dazu später mehr.
Als Ergebnisse werden neben den geographischen Angaben und der Zeitzone dabei zunächst immer die Zeiten für den Sonnenaufgang, den Meridian (die Sonne ist genau im Süden) und den Sonnenuntergang ausgegeben.
Zusätzlich gibt das Programm (je nach eigener Auswahl) auch die Dämmerungszeiten (vor und nach Sonnenaufgang/-Untergang) aus - entweder für die "Bürgerliche Dämmerung" (h=-6°), die "Nautische Dämmerung" (h=-12°) oder die "Astronomische Dämmerung" (h=-18°).
Sind die errechneten Dämmerungszeiten je nach Breitengrad und gewähltem Tag ungültig, weil das Ergebnis der Formel für die "Zeitdifferenz" mit der arccos-Funktion eine komplexe (imaginäre) Zahl ergibt, wird dann "FEHLER" für die Dämmerungszeiten ausgegeben - die Sonne kann dann halt gar nicht so weit unter den Horizont gehen und eine Berechnung der gewählten Dämmerung ist dann definitiv nicht möglich.
Hinweise:
1. Für einen Photographen ist im Grunde nur die "bürgerliche Dämmerung" interessant. Selbst mit sehr lichtstarken Objektiven kann dann nur vom Stativ und mit extrem langen Belichtungszeiten ein Bild gemacht werden. Umgangssprachlich ausgedrückt wird der Himmel ab der "bürgerlichen Dämmerung" überhaupt erst so langsam hell (bezogen auf das Sehvermögen gesunder menschlicher Augen).
2. Die sogenannte "blaue Stunde" ist dabei als Faustregel in etwa morgens die letzten 2/3 der Zeit zwischen bürgerlicher Dämmerung und Sonnenaufgang. Abends sind es dagegen in etwa die ersten 2/3 der Zeit zwischen Sonnenuntergang und bürgerlicher Dämmerung.
Allerdings muß dafür auch das Wetter mitspielen - ist der Himmel etwa stark bewölkt kommt es gar nicht zu einer "blauen Stunde" .
Insofern macht es m.E. auch keinen Sinn, die "blauen Stunden" via CHDK-Skript genau berechnen zu wollen.
Neben den Wetterverhältnissen kommen ja auch die jeweiligen geografischen Bedingungen dazu, und die entsprechen in der Praxis so gut wie nie den theoretischen Vorgaben.
3. Die "nautische Dämmerung" und "astronomische Dämmerung" sind für Photographen dagegen in der Praxis m.E. völlig irrelevant.
Diese via CHDK-Skript berechnen zu wollen ist zudem sehr problematisch, worauf ich bereits hingewiesen hatte (mögliche komplexe/imaginäre Ergebnisse bei der Formel für die "Zeitdifferenz"). Es macht also m.E. keinen Sinn, dafür überhaupt Zeit zu investieren.
Zurück zu meinem neuen Programm:
Das erfordert einen realen HP48 S/SX/G/GX oder eine Emulation dieser Rechner durch "EMU48".
Ich habe heute auf meiner Homepage zwei Downloads bereitgestellt, mit welchen EMU48 entweder mit einem HP48GX (empfohlen) oder einem HP48SX mit nur zwei simplen Kopiervorgängen installiert werden kann.
Zunächst die Links:
EMU48 mit HP48GXEMU48 mit HP48SXZusätzlich ist das Programm separat (als Verzeichnis) verfügbar für User, die etwa bereits EMU48 installiert haben. Der Link dazu ist
sun.zip.
Die Installation ist wie gesagt denkbar einfach, hier Details dazu:
Installationshinweise:
1. Entweder das ZIP-Archiv "emu48_v1.47_hp48gx.zip" von meiner HP herunterladen (empfohlen) oder aber die HP48-Vorgängerversion "emu48_v1.47_hp48sx.zip".
2. Das gewählte Archiv entpacken.
3. Den Ordner "EMU48" in den Ordner C:\Programme\ kopieren.
4. Die Datei "Emu48.ini" in den Windwos-Ordner kopieren.
Das wars schon. Allerdings sind dafür Administratorrechte nötig.
Zum Starten von EMU48 die EMU48.exe ausführen.
Mein neues Programm "Sun" liegt dabei im Unterordner "Sun".
Hier eine Programmbeschreibung:
Zunächst fragt das Programm, ob einer der maximal 6 verfügbaren Presets für Ortsangaben verwendet werden soll:
1 Bejaht man dies, werden kurz die in der globalen Variable "PRES" gespeicherten Orte im Display eingeblendet und man kann anschließend den gewünschten Ort numerisch auswählen.
Das Programm überprüft dann die für diesen Ort gespeicherten Werte für den Längen- und Breitengrad sowie die Zeitzone auf Plausibilität und bricht bei Werten, welche nicht den VORGABEN entsprechen, mit einer Fehlermeldung ab.
2. Verneint man die Verwendung eines Presets, können anschließend Längen- und Breitengrad sowie die Zeitzone manuell eingegeben werden.
Auch dabei werden alle Eingaben überprüft, ob sie den VORGABEN entsprechen, wobei bei ungültigen Eingaben jeweils Fehlermeldungen ausgegeben werden und die Eingabe mit einem gültigen Wert wiederholt werden muß, damit das Programm weiterläuft.
Danach fragt das Programm nach dem Tag für die Berechnung, wobei jeweils das aktuelle Datum inklusive des Jahres vorgeschlagen wird.
Nur bei Schaltjahren kann dabei der 29. Februar eingegeben werden!
Fehlerhafte Eingaben führen zu einer Fehlermeldung und die Eingabe muß anschließend solange wiederholt werden, bis ein korrektes Datum eingegeben wurde.
Anschließend fragt das Programm, ob die Sommerzeit (aktuelle Zeitzone + 1h) verwendet werden soll.
Für die Monate April bis Oktober wird dabei die Sommerzeit bei der Eingabe vorgeschlagen, ansonsten nicht, und hier gilt es aufzupassen!
Die genauen Daten für die Umstellung von Winterzeit auf Sommerzeit und umgekehrt sind ja jahresabhängig und finden immer in einer Nacht von einem Samstag zu einem Sonntag statt.
Meine aktuelle Programmversion enthält jedenfalls noch keine zusätzliche nötige Programm-Routine, um die Zeitumstellungen auch korrekt tagesgenau vorzuschlagen.
Als letzte Eingabe wird gefragt, ob für die Dämmerungswerte die "bürgerliche", die "nautische" oder die "astronomische" Dämmerung verwendet werden soll.
Dazu ein wichtiger Hinweis:
Die "nautische" und die "astronomische" Dämmerung können abhängig vom Breitengrad und Jahreszeit oft gar nicht ermittelt werden, weil die Sonne dann in der Nacht real gesehen (das betrifft insbesondere Breitengrade bereits ab etwa +/- 50 Grad) gar nicht 12° (nautische Dämmerung) oder 18° (astronomische Dämmerung) unter den Horizont absinken kann.
Auch das wird von meinem Programm überprüft, und bei ungültigen Ergebnissen für die Zeit der gewählten Dämmerung wird dafür jeweils "FEHLER" anstelle einer Uhrzeit im Ergebnis angezeigt.
Ausgabe der Ergbnisse:
Alle Ergebnisse werden sowohl am Display ausgegeben als auch zusätzlich in der globalen Variablen 'RESU'gespeichert.
Die Variable 'RESU' ist dabei eine Liste, in welcher alle Ergebnisse in Form von 7 Unterobjekten (jeweils alphanumerische Zeichenketten) gespeichert werden.
Die Variable 'RESU' wird dabei nach jeder neuen Berechnung mit den neuen Ergebnissen überschrieben und enthält somit immer nur die Ergebnisse der letzten Berechnung.
Die angezeigten Ergebnisse im Detail:
Zeile 1: Tag und Zeitzone, bei Verwendung von Presets zusätzlich noch vorangestellt der Ort (gegebenfalls abgekürzt)
Zeile 2: verwendeter Längen- und Breitengrad, jeweils gerundet auf zwei Nachkommastellen
Zeile 3: Dämmerungszeit vor Sonnenaufgang (je nach vorheriger Auswahl bürgerlich, nautisch oder astronomisch)
Zeile 4: Sonnenaufgang
Zeile 5: Erst der maximal zu erwartende Fehler ("G...;") in Minuten; danach die Meridianzeit (sprich die Sonne ist genau im Süden)
Zeile 6: Sonnenuntergang
Zeile 7: Dämmerungszeit nach Sonnenuntergang (je nach vorheriger Auswahl bürgerlich, nautisch oder astronomisch)
Hier die Bereichsgrenzen der möglichen VORGABEN (entweder manuell oder via Preset):
Dieses Programm erwartet folgende Vorgaben für die Eingabewerte.
Wird auch nur eine einzige Vorgabe über- oder unterschritten, muß etwa eine Eingabe wiederholt werden oder aber das Programm bricht mit einer Fehlermeldung ab (etwa bei der Verwendung fehlerhafter Presets).
Erlaubte Vorgabewerte
1. Längengrad: -180,0 bis +180,0 Grad
2. Breitengrad: -65,0 bis +65,0 Grad
3. Zeitzone: maximal -1 bis +1 Stunde Differenz zu der mathematisch zum eingegebenen Längengrad passenden Zeitzone
Achtung:
Für Längen- und Breitengrade erwartet das Programm bei der Eingabe DEZIMALE GRADWERTE, und dabei für Nord oder Ost positive Zahlen und für Süd oder West negative Zahlen!
Angaben in der Form xx°yy' (sprich in Grad und Minuten) können nicht verarbeitet werden und müssen ggfs. vorher umgerechnet werden.
Dazu gibt im Sun-Ordner das kleine Unterprogramm "GM->D" (Grad/Minuten zu einem dezimalen Gradwert):
Nach Eingabe eines Längen-/Breitengrads mit den Grad als als Vorkommastellen und den Minuten als Nachkommastellen wandelt dieses Programm diese Werte in eine gültige dezimale Gradangabe um (gerundet auf drei Nachkommastellen), welche für die Presets oder auch für freie Eingbaben verwendet werden kann.
Beispiel Berlin:
Längengrad = 13° 22´ O = +13,367 Grad
Breitengrad = 52° 33´ N = +52,550 Grad
Beispiel Rio De Janeiro:
Längengrad = 43° 14´ W = -42,233 Grad
Breitengrad = 22° 54´ S = -22,900 Grad
Hinweis:
Auch die Preset-Werte aus der globalen Variable 'PRES' werden diesbezüglich überprüft und führen zu einem Programmabbruch mit einer Fehlermeldung, wenn die Vorgabewerte für einen Preset unter- oder überschritten wurden.
Hier einige Infos, um die globale Variable "PRES" mit den bis zu 6 möglichen Presets an eigene Vorlieben anzupassen:
Die globale Variable "PRES" ist sehr einfach gestrickt:
Sie besteht aus einer Liste (in geschweiften Klammern), welche wiederum bis zu 6 Unterlisten (ebenfalls in geschweiften Klammern) mit Presets für Orte enthalten kann.
Diese Unterlisten hmüssen jeweils 4 Einträge enthalten:
1. Den Namen des Ortes als Alphastring (mit " als Begrenzungszeichen)
2. Den Längengrad von -180 bis + 180 (als dezimale Gradzahl mit positiven Werten für Ost und negativen Werten für West)
3. Den Breitengrad von -65 bis + 65 (als dezimale Gradzahl mit positiven Werten für Nord und negativen Werten für Süd)
4. Die Zeitzone von -12 bis +12 Stunden bezogen auf GMT bzw. UTC, wobei die gewählte Zeitzone nur -1h bis +1h von der zum Längengrad (2. Listeneintrag) passenden Zeitzone differieren darf.
Per default enthält die globale Variable "PRES" folgende Einträge:
{
{ "Hamburg" 10 53,55 1 }
{ "Berlin" 13,367 52,55 1 }
{ "Köln" 6,95 50,933 1 }
{ "Stuttgart" 9,183 48,767 1 }
{ "München" 11,583 48,15 1 }
}
Diese Liste kann man sich natürlich nach Belieben abändern, um etwa seinen Wohnort und/oder ein Urlaubsziel einzugeben etc.
Dazu muß man sich diese Liste unter Windows mit den Tastenkombinationen "STRG" und "F3" zunächst in den Stack in Ebene 1 holen.
Das geht auch mit der Maus über "Right Shift" und danach Klick auf "PRES" oder "F3".
Mit der "Taste nach unten" kommt man in den EDIT-Modus für diese Liste.
Nun können die numerischen Werte für Breiten- und Längengrad sowie Zeitzone der Unterlisten leicht geändert werden.
Um Die Ortsnamen zu ändern muß der sogenannte "Alpha-Modus" aktiviert werden:
Unter Windows geht das mit der Taste "Tab", per Maus mit Klick auf die "Alpha-Taste" oberhalb "Left Shift".
Dabei ist zunächst immer der Großschreibemodus aktiviert, auf Kleinschreibung kann mann dann (solange der Alpha-Modus noch aktiv ist, was im Display übrigens über ein griechisches Alpha-Symbol angezeigt wird) unter Windows mit der Taste "°" (üoberhalb der Tabtaste) bzw. mit der Maus mit der Eingabekombination "Left Shift" und "Alpha" auf Kleinbuchstaben wechseln und umgekehrt.
Nach den gewünschten Änderungen im EDIT-Modus befördert "Enter" die Liste wieder auf Ebene 1 des Stack.
Die geänderte Liste muß nun gesichert werden:
Unter Windows geht das mit "Shift" und "F3", per Maus mit "Left Shift" und "F3".
Beim nächsten Programmstart sollten dann die geänderten Presetwerte verfügbar sein.
Aber wie gesagt Achtung:
Eingaben zu einem Preset, welche nicht den VORGABEN entsprechen, führen anschließend zu einem Programmabbruch mit einer Fehlermeldung.
Anschließend noch einige Screenshots von diesem Programm.
1. Zunächst das Ergebnis zur Beispielsrechnung für Berlin am 30. Januar bei Verwendung der "bürgerlichen Dämmerung":

Hier fällt auf, daß der Sonnenaufgang (im Vergleich zur Beispielsrechnung) 1 Minute später erfolgt (07h51m statt 07h50m).
Das ist aber sachlich richtig, weil bei der Beispielsrechnung der Längen- und Breitengrad von Berlin relativ ungenau auf (vermutlich gerundete) 13,5° Ost und und 52,5° Nord festgelegt wurde.
Mein Preset für Berlin verwendet dagegen die genaueren Werte 13,367° Ost und 52,550° Nord (entsprechend 13° 22´ O und 52° 33´ N laut
http://www.astrologon.com).
Gibt man bei meinem Programm übrigens manuell 13,5° Ost und und 52,5° Nord ein, wird auch 07h50m als Sonnenaufgangszeit (wie in der Beispielsrechnung) errechnet.
Mein Programm rechnet also (im Rahmen des überhaupt möglichen) sehr genau und könnte als Referenz für CHDK-Skript-Berechnungen diesbezüglich verwendet werden.
Einfacher als mit diesem Programm können Fehler bei CHDK-Skript-Berechnungen momentan wohl kaum ermittelt werden.
2. Hier ein Screenshot mit "nautischer Dämmerung" (Köln, 01.07. mit MESZ):

Man beachte bitte die nahezu 2 Std. Differenz der "nautischen Dämmerung" zu Sonnenauf- und Untergang.
3. Hier ein Screenshot mit "astronomischer Dämmerung" (Köln, 01.07. mit MESZ):

Dort fallen die Meldungen "FEHLER" für die astronomischen Dämmerungen (morgens und abends) auf.
Das ist aber kein Fehler von meinem Programm - ganz im Gegenteil:
Die Sonne sinkt zu diesem Datum (bezogen auf diesen Ort) halt nicht so tief unter den Horizont (-18° für die astronomische Dämmerung), sodaß eine Berechnung der "astronomischen Dämmerung" dann schlichtweg unmöglich wird.
Soviel dazu zunächst von mir,
liebe Grüße
Werner_O