FOXCTRL/2 ist eine Steuerung für Peilbakensender für Amateurfunkpeilwettbewerbe. Das Projekt wurde primär für den Eigenbedarf und als Programmierstudie angelegt. Dementsprechend dürftig ist leider die Dokumentation ausgefallen. Für den Nachbau und die spätere Benutzung sind elementare Kenntnisse der Digitalttechnik hilfreich (HIGH sollte von LOW unterschieden werden können). Außerdem sollte man schon einmal mit Bakensendern für eine Fuchsjagd/Amateurradionavigationslauf zu tun gehabt haben. Das Programm hat folgende, grobe Struktur und Ablauffunktion, aus der sich auch die Bedienung ergibt.
Besonderheiten dieser Steuerung:
Nach einem RESET wird die Startupsequenz bearbeitet. Hier werden einige intern benötigte Konstanten und Variablen gesetzt. Außerdem werden die Einstellungen der Kennungen und Vorlaufzeiten über Port 1 eingelesen. Sollte das DTR-Flag (Pin 3.2) auf HIGH liegen, werden über die serielle I/O-Erweiterung 3 Bytes eingelesen. Sofern das 3. Byte gleich 0 ist, werden die Daten als gültig anerkannt und ausgewertet (Kennung, Vorlauf, 30/60 s, Call, Batteriekontrolle, 48/60 BpM). Ist das DTR-Flag während dieser Sequenz auf LOW, wird zu einer Einlese routine für asynchrone V.24 Kommunikation verzweigt. Diese Routine ist noch nicht funktionsfähig implementiert und führt keine Funktion aus.
Standardmäßig sind folgende Einstellungen für nicht über Port 1 bestimmbare Parameter vorgegeben.
Batteriekontrolle: 1 (am Ende der Ruhephase wird geprüft)
Rufzeicheneinblendung: aus
Geschwindigkeit: wird aus dem Label 'speed0' geholt
Kennung, Zyklus, Vorlauf, 30/60 Sekunden und Einblendzeit werden über die an Port 1 eingestellten Bits aus den Tabellen 'codes' und 'times' bestimmt.
Sind die extern eingelesenen Werte gültig, so werden die vorbesetzten und via Port 1 eingelesenen Werte überschrieben.
Am Ende der Startsequenz verharrt das Programm in einem Zustand, in dem auf die Synchronisation gewartet wird und die Batterieüberwachung bei Be- darf erfolgt. Für einen Timerablauf geht der Prozessor in den IDLE-Modus, um Energie zu sparen. Während dieser Wartephase blinkt die Kontroll-LED.
Wurde eine Synchronisation ausgelöst (SYNC-Interrupt) geht das Programm in die Hauptzustandschleife. Hier wird überprüft, ob die Vorlaufzeit abgelaufen ist. Während der Vorlaufperiode blinkt die LED alle 5 Sekunden kurz auf (Routine 'vorlf'). Ist der Vorlauf beendet, werden die Timerzähler für Minuten- und Stundendauer in Zähler für Phasendauer (slot) und Zyklus (cycle) umgewandelt. Als nächstes wird überprüft ob die aktive Minute im Zyklus erreicht ist oder nicht. Sollte sie nicht erreicht sein, leuchtet die LED alle 5 Sekunden für 1 Sekunde auf (routine 'txoff'). Danach erfolgt sowohl bei Vorlauf wie inaktiver Minute die Kontrolle des Batteriezustands (wenn eingeschaltet). Hiernach geht der Prozessor in IDLE-Modus. Wird der IDLE-Modus durch Interrupt (TIMER oder SYNC) verlassen, muß das Watchdogbit gesetzt sein, um zum Beginn der Hauptzustandsschleife zu verzweigen. Anderenfalls werden alle Ports inaktiv geschaltet und ein Software-RESET aus- gelöst.
In der aktiven Minute (Routine 'txon') wird zunächst der Sender angeschaltet, dann der Watchdog bedient und in einer etwa 1-sekündigen Warteschleife auf das Auftreten eines Interrupts und damit rücksetzten des Watchdogs gewartet. Bleibt dieser IR aus, erfolgt ein RESET und alle Ausgabeports werden inaktiv gesetzt. In ordnungsgemäßem Zustand wird die Kennung zum Sender und zur LED gegeben. Es wird überprüft, ob nach vorgegebener Zeit ein Rufzeichen oder die Lowbatt-Kennung einzublenden sind. Am Ende der Routine wird zur Hauptzustandschleife zurückgekehrt, die nicht in den IDLE-Modus geht.
Die Timer-Interruptroutine überprüft zunächst, ob der Watchdog in der Hauptzustandschleife oder 'txon' korrekt bedient wurde. Falls nein, wird ein RESET initiiert. Falls aus der SYNC-Routine direkt in die TIMER-Behandlung gesprungen wird, wird die Watchdogfunktion einmalig nicht überprüft, da beide Routinen auf gleicher Watchdogflanke arbeiten und anderenfalls die Timerroutine den obigen RESET auslösen würde. Der RESET wird durch Verbiegen der Rücksprungadresse auf dem Stack erzeugt. Im Normalfall stellt die Routine fest, ob eine Sekunde (nach 8 oder 10 Tics) abgelaufen ist und erhöht gegebenfalls den Sekundenzähler. Nach Ablauf einer Minute (bzw. 30 Sekunden) wird der Minuten/Phasenzähler erhöht und nach Ablauf einer Stunde bzw. eines Zyklus dessen Zähler. Die Hauptroutine wertet diese Zählerstände aus. Abschließend wird der Watchdog bedient.
Der SYNC-Interrupt dient der Synchronisation der Ablaufsteuerung. In der zugehörigen Routine werden die Timer-Zählerstände zurückgesetzt und der Timer neu initialisiert und gestartet. Zudem wird der Watchdog vorbesetzt.
Die Batteriespannung des Senders kann überwacht werden. Sollte die Spannung je nach gewählten Modus (irgendwann, am Ende einer Sendepause, während des Sendens) unter eine Schwellwert fallen (über R6 einstellbar) wird an der Stelle wo normalerweise das Rufzeichen eingeblendet wird die Kennung BAT gesendet. Die Modusauswahl kann nur über die externe Eingabe erfolgen. Intern kann sie nur ein- bzw. ausgeschaltet werden. Ist sie an, wird am Ende der Sendepause die Spannung kontrolliert, wenn die Batterien sich erholt haben und unbelastet sind.
Ausgegeben werden an Port 3.5 die Signale der Kontroll-LED (low-aktiv), an 3.6 das Sender an Signal (low-aktiv), an 3.7 die CW-Kennung (low-aktiv).
Die Funktionen der LED:
In der Praxis hat sich die Eingabe über Schalter (siehe 10.) bewährt. Ein Notebook zur Kommunikation mit der Bakensteuerung ist in den seltensten Fällen im Gelände einsetzbar. Daher wurde die menügesteuerte Programmierung über die V.24/RS-232 Schnittstelle nicht mehr implementiert.
Die Eingabe erfolgt intern über 4 Bits für Kennung und Zyklusdauer sowie 4 Bits für Vorlauf und evtl. Phasendauer (30/60s). Die Pegel sind für DIP-Schalter oder HEX-Drehschalter mit ON = gechlossen = low-aktiv ausgelegt. Die Werte werden aus den folgenden Tabellen gewonnen:
DIP/HEX-Schalter an Port 1 des 80C51 (O = on, - = aus) Bit 0 1 2 3 HEX-Dreh Dauerläufer MO- O O O O F MOI, 2er Zyklus O O O - 7 MOE O O - O B MOS, 3er Zyklus O O - - 3 MOI O - O O D MOE O - O - 5 MOH, 4er Zyklus O - - O 9 MOS O - - - 1 MOI - O O O E MOE - O O - 6 MO5, 5er Zyklus - O - O A MOH - O - - 2 MOS - - O O C MOI - - O - 4 MOE - - - O 8 Dauerläufer MO - - - - 0 Vorlauftabelle, Sendedauer und Einblendzeitpunkt h, m, Dauer, Rufzeicheneinblendung Bit 4 5 6 7 HEX-Dreh 03, 00, 30, 12 O O O O F 02, 00, 30, 12 O O O - 7 01, 30, 30, 12 O O - O B 01, 00, 30, 12 O O - - 3 00, 30, 30, 12 O - O O 5 00, 15, 30, 12 O - O - D 00, 01, 30, 12 O - - O 9 00, 00, 30, 12 O - - - 1 18, 00, 60, 27 - O O O E 07, 00, 60, 27 - O O - 6 06, 00, 60, 27 - O - O A 03, 00, 60, 27 - O - - 2 02, 00, 60, 27 - - O O C 01, 00, 60, 27 - - O - 4 00, 30, 60, 27 - - - O 8 00, 00, 60, 27 - - - - 0
Die externen Eingaben werden in zwei 8-Bit Schieberegistern gespeichert und seriell zum Controller übertragen. Dazu kann folgende Schaltung verwendet werden. Es gilt die gleiche Logik wie bei der internen Eingabe.
Es können auch CMOS-Bausteine verwendet werden. Die externe Eingabe muß vor dem Einschalten der Steuerung angeschlossen sein, da die Werte bei Programmstart eingelesen werden.
Die 16 Bits haben folgende Zuordnung MSB LSB A B C D E F G H A B C D E F G H --------- ---------- | --- --- | Kenn/Zykl Vorlauf 60 Call | 60 30 Bat 48 sec BpM 30/60 Sekunden Phase C 60 Sekunden O 30 Sekunden - 48/60 BpM CW-Tempo H 60 BpM O 48 BpM - Call D E Call-3 O O Call-2 O - Call-1 - O keine Calleinbl. - - Batteriekontrolle F G (vorläufig) Immer an O O Sendepause O - (am Ende der Pause) Sendephase - O Immer aus - - Aktivtabelle A B C D E Dauerläufer MO- - O O O O MOI, 2er Zyklus - O O O - MOE - O O - O MOS, 3er Zyklus - O O - - MOI - O - O O MOE - O - O - MOH, 4er Zyklus - O - - O MOS - O - - - MOI - - O O O MOE - - O O - MO5, 5er Zyklus - - O - O MOH - - O - - MOS - - - O O MOI - - - O - MOE - - - - O Dauerläufer MO - - - - - MOT, 6er Zyklus O O O O O MO5 O O O O - MOH O O O - O MOS O O O - - MOI O O - O O MOE O O - O - MO0, 10er Zyklus O O - - O MO---- O O - - - MOO O - O O O MOM O - O O - MOT O - O - O MO5 O - O - - MOH O - - O O MOS O - - O - MOI O - - - O MOE O - - - - Vorlauftabelle h, m F G H A B 24, 00 O O O O O 23, 00 O O O O - 22, 00 O O O - O 21, 00 O O O - - 20, 00 O O - O O 19, 00 O O - O - 18, 00 O O - - O 17, 00 O O - - - 16, 00 O - O O O 15, 00 O - O O - 14, 00 O - O - O 13, 00 O - O - - 12, 00 O - - O O 11, 00 O - - O - 10, 00 O - - - O 09, 00 O - - - - 08, 00 - O O O O 07, 00 - O O O - 06, 00 - O O - O 05, 00 - O O - - 04, 30 - O - O O 04, 00 - O - O - 03, 30 - O - - O 03, 00 - O - - - 02, 30 - - O O O 02, 00 - - O O - 01, 30 - - O - O 01, 00 - - O - - 00, 45 - - - O O 00, 30 - - - O - 00, 15 - - - - O 00, 00 - - - - -
Die Bedeutung der Lötterminals:
Die Signale der 10-poligen Stiftleiste können über ein Flachbandkabel z.B. mit einer 9-poligen SUB-D Buchse verbunden werden. Dann stehen alle Steuer- und Meßsignale aus der Peilbake an einem einzigen Anschluß bereit. Außer eines generellen Ein/Aus-Schalters (z.B. Sicherung) und der Antennenanschlüsse bedarf es keiner weiteren äußeren Elemente an der Bake. Zusammen mit der externen Einstellung brauch sie im Normalfall nicht geöffnet zu werden.
Die erste Ziffer in Klammern gibt die Pinnummer an der Stiftleiste an. Die zweite Ziffer entspricht der Pinnummer am SUB-D Verbinder.
Teil Wert Bemerkung (Typ/Bauform) --------------------------------------------------------------- IC1 80C51 Microcontroller (sockeln) IC2 74HC573 8-Bit Latch (direkt einlöten) IC3 78L05 5V Festspannungsregler IC4 CMOS-EPROM 27C64, 27C128, 27C256 oder 27C512 (sockeln) IC5 LM339 4-fach Komparator D1 1N4148 D2 1N4148 D3 1N4148 QU1 Quarz 3,000 MHz HC-18/U R1 2k7 evtl. an LED-Typ anpassen R2 10k R3 10k R4 10k R5 10k R6 ??? experimentell an untere Batteriespannung anpassen C1 100nF C2 10nF C3 33pF C4 33pF C5 100nF C6 10uF C7 10uF C8 10uF C9 100nF LED 2mA Low-Current
als BIN-Datei herunterladen (1611 Bytes)
Die Firmware zur FOX51 ist nie in ihrer letzten Version mit der Möglichkeit der menügestützten Programmierung über die asynchrone, serielle Schnittstelle fertiggestellt worden (s.o.). Falls dennoch der Wunsch zur Erweiterung besteht, ist das Quellcodelisting hier als Textdatei herunterzuladen (48.1 kB). In dieser Datei ist auch ersichtlich wie die drei möglichen Einblendrufzeichen am Ende des EPROM-Inhalts zu ändern sind. Dabei steht das jeweils erste Byte für die Gesamtlänge des Call in 'Bits'. Über Änderungsmitteilungen würde ich mich freuen.
Stand: 1997, © www.dl6dbn.de