Zurück

Frank Sperber, DL6DBN/AA9KJ

FOXCTRL-2/FOX51

Programmierbare Zeitsteuerung für Funkpeilbaken
auf Microcontrollerbasis

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:

1. Startsequenz nach RESET

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.

 

2. Hauptzustandsschleife und Vorlauf, Sender aus

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.

 

3. Aktive Minute

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.

 

4. TIMER-Interrupt

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.

 

5. SYNC-Interrupt

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.

 

6. Die Batterieüberwachung

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.

 

7. Ausgabe

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:

 

8. Eingabe V.24 seriell

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.

 

9. Eingabe intern

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

 

10. Eingabe extern

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.

Schieberegister (7.9 kB)

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    - - - - -

11. Anschlüsse

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.


Anhang

Schaltplan

Schaltplan (25.1 kB)


FOX51 - Stückliste

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


Bestückungsplan

Bestückungsplan (15.6 kB)


FOX51-Platinenlayout Bestückungsseite

Platinenlayout (23.7 kB)

FOX51-Platinenlayout Lötseite

Platinenlayout (22.8 kB)


EPROM-Inhalt

als BIN-Datei herunterladen (1611 Bytes)


Quellcode

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