Seine Intension ist nun nicht, die größten Feuerwerke des Landes an unterschiedlichen Plätzen auszurichten, sondern in der Gastronomie seiner Eltern Festlichkeiten (große Familienfeiern, Betriebsfeiern) mit einem Feuerwerk ausklingen zu lassen, wenn der "Kunde" diese Leistung mit bestellt.
Das AVR-Programm für die Zünduhr wurde in AVR-Assembler im AVR-Studio von ATMEL geschrieben. Um das LCD anzusteuern, wurden die schon vorher geschriebenen LCD-Treiber-Routinen und eine Routinensammlung für formatierte Ausgabe eingebunden.
Damit die serielle Schnittstelle zum PC zuverlässig funktioniert, wurde ein Baudratenquarz mit 3,6864MHz eingesetzt.
Für den Dialog zwischen Benutzer und AVR wurde ein umfangreiches Menü implementiert, welches das Editieren von "Schusslisten" (Feuerwerk-Ablauflisten), den Datenaustausch mit dem PC und die Steuerung des Feuerwerkes nach Uhr und auch manuell ermöglicht. Da der Mega8535 über 512 Bytes internes EEPROM verfügt, ein Datensatz für einen "Zünd-Termin" 3 Bytes benötigt, kann eine Schussliste 170 Schuss verwalten.
Die Datenübertragung zu den Verteilern erfolgt seriell über den Tastgrad einer Rechteckspannung codiert. Tastgrad von 75% repräsentiert ein 0-Bit, Tastgrad von 25% ein 1-Bit. Die Rechteckspannung wird von Timer2 generiert, der mit Vorteiler 8 betrieben wird. Eine Periode dauert daher 2048 Takte (256 x 8) bzw. 555 µs. Das entspricht einer Frequenz von etwa 1,8 kHz. Ein Telegramm besteht aus einer Präambel von 16 Nullbits, einem Einsbit als Startbit, 8 Datenbits mit der Schussnummer und 8 Prüfbits mit der invertierten Schussnummer. Ein komplettes Telegramm dauert etwa 18,3 ms. Jedes Telegramm wird etwa eine Sekunde lang wiederholt, das sind etwa 54 Wiederholungen. Der Verteiler muss zwei aufeinanderfolgende identische Telegramme mit gültigem Prüfbyte empfangen und decodieren um einen Schuss auszulösen.
Die serielle Schnittstelle zum PC arbeitet mit 9600 Baud, 8 Datenbits, 2 Stopbits. Die Daten werden hexadezimal codiert als ASCII-Text übertragen. Dabei wird zuerst der Zeitstempel (16 Bit, 4 Hex-Ziffern) gesendet, dann ein Leerzeichen, dann die Schussnummer (8 Bit, 2 Hex-Ziffern), dann ein Semikolon als Ende-Kennung des Datensatzes. Während des Datentransfers wird der Fortschritt auf dem LCD und dem PC-Programmfenster angezeigt.
Ein Datensatz (Zünd-Termin) besteht aus dem Zeitstempel (16 Bit), der die Anzahl der Sekunden seit dem Start definiert, und der Schussnummer (Nummer des Zündkreises), die gezüdet werden soll.
Der Zeitstempel wird der Einfachheit halber als unsignierte 16-Bit-Zahl (0...65535) geführt, wobei die oberen 256 Werte (Highbyte=255) als "ungültig" definiert sind und als "--:--:--" dargestellt werden. Die Umrechnung in das Format "hh:mm:ss" erfolgt nur bei der Ausgabe auf das LCD, welches im Feuerwerk-Modus nur einmal pro Sekunde aktualisiert wird, im Edit-Modus nur nach jedem Tastendruck, der eine Änderung des Displayinhalts bewirkt.
Die Schussnummer wird in einem Byte gehalten, wobei die oberen 3 Bit das Zündgerät repräsentieren und die unteren 5 Bit die Nummer innerhalb des Gerätes. Die Schussnummer 255 gilt als "ungültig" und wird als "---" dargestellt. Die Umrechnung in darstellbare Zeichen erfolgt erst bei der LCD-Ausgabe.
Jedes Gerät der Züdanlage hat damit einen Bereich von 32 Schussnummern, von dem das Hauptgerät (die Zünduhr) nur 16 (0..15) nutzen kann, ein Verteiler nur 31 (0..30). Die einzelnen Zündgeräte werden dabei mit Buchstaben (A...H) bezeichnet, wobei A die Uhr ist, B der erste Verteiler usw. H ist reserviert für gleichzeitige Zündung auf Verteiler B und C, um symmetrische Zündungen räumlich entfernter Feuerwerkskörper realisieren zu können.
Auch dieses Programm für den AT90S8515 ist mittels AVR-Sudio in AVR-Assembler geschrieben worden.
Anfangs war das Teil als Schrittschaltwerk konzipiert. Deshalb gibt es einen extrem stark entprellten Eingang, an dem innerhalb 100ms (64 Abfragen lang) ein stabiler Pegel anliegen muss, damit ein Steuer-Impuls akzeptiert wird. Dies ist sehr störsicher, kann also nicht durch irgendwelche elektromagnetischen Störimpulse ausgelöst werden. Jeder Impuls am Eingang zählt einen Zähler hoch, der die Schussnummer repräsentiert. Dabei wird der betreffende Zündkreis für etwa eine Sekunde eingeschaltet. Bei der späteren Nachrüstung mit der seriellen Steuerung von der Zünduhr wurde entschieden, den Zähleingang beizubehalten. Dies schafft die Möglichkeit, neben der automatischen Steuerung per Uhr einige weitere Kreise (die ersten Schussnummern) mittels einer weiteren Steuerleitung von Hand zu züden.
Zum Auswerten der seriellen Steuerimpulse von der Zünduhr wurde der ICP-Eingang in Verbindung mit dem Input-Capture-Interrupt des Timer1 genutzt. Damit ein Zündbefehl akzeptiert und ausgeführt wird, müssen einige Bedingungen erfüllt sein:
Jeder Verteiler bekommt im Header des Quelltextes zwei Basisadressen (für Schussnummern) zugewiesen. Die erste Basisadresse ist exklusiv für diesen Verteiler (B,32 oder C,64), die zweite Basisadresse (H,224) wird zwei Verteilern (B und C) zugewiesen. Auf einen Schussbefehl für Verteiler B oder C reagiert dann nur der eine Verteiler, auf einen Schussbefehl für (den fiktiven) Verteiler H reagieren Verteiler B und C gleichzeitig. Dies ermöglicht synchrone Zündungen an unterschiedlichen Standorten.
Das PC-Programm wurde mittels VB6 erstellt und benötigt daher die üblichen VB6-Runtime-Dateien. Es ist noch nicht endgültig fertig. Bisher enthält es Funktionen zum:
Die Schusslisten haben die Datei-Extension ".fsl" (Feuerwerk-Schussliste). Es sind aber reine Textdateien. Deren erste Zeile enthält eine "Echtheitskennung", die zweite Zeile einen Kommentar zur Schussliste, dann folgen 4 Zeilen mit zusammengefassten Daten zur Liste, dann die 170 Datensätze im hexadezimalen Format (4 Hex-Ziffern für den Zeitstempel, Leerzeichen, 2 Hex-Ziffern für die Schussnummer. Dieses Format wurde gewählt, damit beim Browsen mittels Dateimanager die Kopfdaten (Kennung, Kommentar) im Klartext gelesen werden können und die Dateien somit eindeutig identifiziert werden können.