steckbrief kls365

 

                        Firmware (BASCOM-Quelltext für Atmel ATmega32)

 

Youtube-Video

In einem meiner Videos auf Youtube zeige ich die Aktualisierung unserer Kirchenbeleuchtung und gehe auf einige Highlights der Software ein.

 

Hintergrund

Im Zuge der Erneuerung unserer Kirchenbeleuchtung entschieden wir uns 2013 für eine moderne LED-Beleuchtung. Da diese LEDs nun etliche verschiedene Lichtstimmungen erlauben, kam die Idee einer Steuerung, die passend zum jeweiligen Tag eine Beleuchtung gemäß der liturgischen Farben einstellt. Zudem sollte jeweils die aktuelle Zeit des Sonnenauf- und -untergangs berücksichtigt werden. Als Resultat kam dann das hier beschriebene Gerät heraus. Über die Jahre wurden jedoch durch Regen und UV-Licht zahlreiche Lampen beschädigt, sodass ich 2023 alle Lampen durch neue RGBW-Lampen ersetzt habe. Die aktuelle Version 2.0 der Steuerung kommt somit nun auch mit RGBW-Lampen zurecht. Derzeit werden 8 Eurolight RGBW-Bars mit 6 Kanälen unterstützt. Die Kanalbelegung und auch die unterstützten Lampen können natürlich dann im Sourcecode selbst angepasst werden.

 

So sieht das Gerät in einem Hutschienen-Gehäuse aus:

 

Technische Eigenschaften

  • Funkuhrempfang über DCF77-Empfänger (somit unabhängig vom Internet)
  • Einbeziehung der Sonnenauf- und -untergangszeiten mit Hilfe von Lookup-Table für jeden Monat
  • Berechnung aller hohen kirchlichen Feiertage im aktuellen Jahr basierend auf Ostern und dem ersten Advent
  • Einblendung der Szenen zu jeweiligen Sonnenuntergangszeiten mit Hilfe eines Schedulers
  • Ansteuerung von 8 Hochleistungs-LED-Leisten mit je R,G,B und W via DMX512
  • Speicher im EEPROM für 15 einzelne Szenen
  • Relaisausgang zum Ein- und Ausschalten der LED-Leisten
  • Vollständig implementierter Dimmerkernel für beliebige Fadezeiten für jeden einzelnen Kanal

 

Eine vollständige Bedienungsanleitung mit Anschlussplan kann hier heruntergeladen werden:

KLS365 Anleitung v1.0 vom 30.07.2011

 

Mikrocontroller und Firmware

Als Mikrocontroller wird ein ATmega32 verwendet, welcher zuletzt mit der BASCOM Version 2.0.8.6 kompiliert wurde. Der Flash wird derzeit zu 63% ausgenutzt (BASCOM Verison 2.0.8.6, frühere Versionen höhere Ausnutzung!), sodass auch noch Platz für eigene Anpassungen wären. Es kann aber mit geringen Änderungen später auch problemlos auf den nächstgrößeren und pinkompatiblen ATmega644 gewechselt werden, welcher mit 64kB Flash doppelt soviel Platz, sowie mit 4kB RAM auch doppelt soviel Arbeitsspeicher bereitstellt. Es muss dann lediglich die Definitionsdatei in BASCOM geändert werden. Der Sourcecode und das Excel-Berechnungs-Blatt für die Sonnenauf- und -untergangszeiten, sowie der Feiertage kann hier heruntergeladen werden:

Download des Sourcecodes (BASCOM v2.0.8.6 - Achtung: für BASCOM vor v2.0.7.0 muss der Code ggfs. angepasst werden)

Download des Formelblattes für Sonnenzeiten (Excel 2003-Format)

 

Das Programm des Mikrocontrollers macht nun folgendes:

Hauptschleife

Im Sekundentakt wird die aktuelle Uhrzeit mit der berechneten Sonnenuntergangszeit verglichen. Die Information über den Sekundentakt und die aktuelle Uhrzeit wird dabei von der DCF77-Empfangsroutine erzeugt. BASCOM hat hier eine hervorragende Bibliothek, welche die ganzen Informationen in folgenden Variablen zur Verfügung stellt: _hour, _min, _day, _month, _year. Zudem wird in der Interrupt-Routine des DCF77-Empfängers die Funktion sectick gesetzt, die dann in der Hauptfunktion als Sekundeninformation ausgewertet wird.

Wird die Ein- oder Ausschaltzeit überschritten, wird die Kirchenbeleuchtung entweder ein- oder entsprechend ausgeschaltet. Zusätzlich wird noch auf Neujahr geprüft wo dann ein wenig Partylicht ab 0:00 Uhr für ca. 5 Minuten abgespielt wird.

Alle fünf Minuten wird dann zur Sicherheit die Sonnenauf- und untergangszeiten berechnet, die Dimmer- und Strobokanäle auf korrekte Werte gesetzt und die Hintergrundbeleuchtung des LCD abgeschaltet.

Menüfunktionen

Zahlreiche Funktionen sind für die Menüführung zuständig. Unter anderem werden die einzelnen Tastendrücke ausgewertet, aber auch das jeweils aktuelle Submenü angezeigt. Auch die Konfigurationsfunktionen werden damit realisiert, um z.B. manuell Kanäle ein- oder auszuschalten oder Szenen zu speichern oder zu laden: Refreshscreen und Performkeypress(byval key as Byte)

Berechnung des Sonnenauf- und untergangs

Sonnenauf- und untergangszeiten sind im EEPROM für das nordhessische Dorf Knüllwald-Remsfeld abgelegt - und zwar lediglich 12 Werte für die einzelnen Monate. Die Software berechnet darauf basierend für den aktuellen Tag des Monats über eine lineare Interpolation den Zeitpunkt des Sonnenauf- oder untergangs. Dies ist zwar nicht perfekt, aber für die aktuelle Anwendung sicherlich mehr als ausreichend. Man braucht also keinen Helligkeitssensor, sondern kann relativ zuverlässig die Kirchenbeleuchtung zur passenden Zeit einschalten lassen. Die lineare Interpolation macht dabei einen ausreichend guten Job, wie der Vergleich zwischen ideal berechneter Zeit und Interpolation über 12 Stützstellen zeigt:

Sonnenuntergangszeit

Damit die Kirche in jedem Fall beleuchtet wird, habe ich während der Winterzeit zur Sicherheit die Einschaltzeit um 30 Minuten zum berechneten Zeitpunkt nach vorne verlegt. Sicher ist sicher.

Besondere kirchliche Feiertage

Da viele kirchliche Feiertage von dem variablen Osterfest abhängen, habe ich die Gaußsche Osterformel implementiert, um darüber das aktuelle Datum von Ostern berechnen zu können. Darauf basierend berechnet die Software dann eine Reihe von hohen Feiertagen, die dann entsprechend mit eigenen Szenen beleuchtet werden: Gründonnerstag, Karfreitag, Karsamstag, Ostern, Pfingsten, Fronleichnam, etc. Auch der Reformationstag, Rosenmontagm Silvester, Weihnachten, etc. sind bedacht. Folgende besondere Tage sind derzeit im Programm hinterlegt:

  • Ostersonntag
  • Rosenmontag (Ostern - 48)
  • Karfreitag (Ostern - 2)
  • Karsamstag (Ostern - 1)
  • Gründonnerstag (Ostern - 3)
  • Ostermontag (Ostern + 1)
  • Himmelfahrt (Ostern + 39)
  • Pfingstsonntag (Ostern + 49)
  • Pfingstmontag (Ostern + 50)
  • Fronleichnam (Ostern + 60)
  • 1. Advent, 2. Advent, 3. Advent, 4. Advent
  • Reformationstag (31.10.)
  • Volkstrauertag (1. Advent - 14)
  • Buß- und Bettag (1. Advent - 11)
  • Ewigkeitssonntag (1. Advent - 7)
  • Weihnachten (24.12.)
  • 1. Weihnachtstag (Weihnachten + 1)
  • 2. Weihnachtstag (Weihnachten + 2)
  • Silvester (Weihnachten + 7)

Zu regulären Tagen werden abwechselnd die ersten fünf Szenen im Wechsel über eine Zufallsfunktion abgerufen.

DMX-Funktionen

Neben der obligatorischen DMX512-Ausgabe über die UART sind auch grundsätzliche Lichtmischpultfunktionen implementiert. So können alle Kanäle beliebig ein- oder ausgeblendet werden und Szenen gestartet werden. Alles läuft dabei zentral über die Funktion setdmxch(Kanal, Startwert, Zielwert, Einblendzeit). Diese Funktion berechnet die notwendige Schrittweite, die dann vom Dimmerkernel (eine Interrupt-Service-Routine des TIMER2) im Millisekundentakt abgearbeitet wird. Dabei ist die minimale Einblendzeit 255ms. Alles darunter wird direkt geschaltet. Die maximale Einblendzeit pro Kanal liegt aufgrund der 1ms-Zeit für die Abarbeitung der Queue und der verwendeten Variablengröße eines Long (32-Bit-Wert) bei max. 2147483 Sekunden (24 Tage) - also ein theoretischer Wert, den wohl keiner brauchen wird.

DMX wird dann über einen Interrupt der UART erzeugt. Hier schalte ich die UART zwischen 90,9kBaud für das Break-Signal und 250kBaud für reguläre Bytes um. Die Interbyte-Gap-Zeit liegt bei festen 10 Mikrosekunden. Wer das ändern möchte, kann dies direkt in der ISR der UART tun.

 

Schaltplan

Der Schaltplan besteht hauptsächlich aus einer Grundschaltung für einen Atmel-Prozessor (Mitte), einem kleinen Spannungswandlerteil zur Erzeugung von +5Vdc aus einem Spannungsbereich von 7V bis 30V (Links) und der Peripherie. Hierzu zählen zum Einen die vier Taster für die Menüführung (Rechts oben), die drei Status-LEDs (Mitte rechts), dem LCD-Anschluss nebst Transistor für die Displaybeleuchtung und Kontrastregler (Mitte), sowie dem DCF77-Empfänger mit einer kleinen Spannungsteilerschaltung zur Erzeugung von 3Vdc. Zusätzlich ist noch ein Transistor zum Ansteuern eines kleinen +5Vdc Relais vorgesehen. Der DMX512-Sender befindet sich schließlich am unteren Rand der Schaltung.

 

Elektrischer Anschluss

 

Die Lampen werden dann entsprechend gängiger DMX512-Verdrahtung als Bussystem hintereinander angeschlossen: