Fernschreib- und Morse-Telegrafie-Bake
mit dem AVR-MicroController ATtiny2313
Stand: 2011-12-11 (letzte Neuigkeiten bzgl. der Firmware RC.1.43 vom 2011-07-14 s.u. unterhalb des Lochstreifen's)

Bild 0
(Abb. 1) Eröffnungs-Meldung beim Start

Die Telegrafie-Bake

Die Telegrafie-Bake sendet einen Text wahlweise in Fernschreib-Telegrafie (RTTY/CCITT2/Baudot) oder in Tastfunk-Telegrafie (CW/Morse-Code). Der Text kann als Dauersendung (Delay=0) oder mit einer einstellbaren Pause (Delay=n) zum Text-Ende gesendet werden. Folgender Vorgabe-Text ist im Flash abgelegt:
vvv zczc
AVR-Beacon by DL8OAS (Only Default-Text in EEPROM)
nnnn
Bei erstmaliger Inbetriebnahme wird dieser Text in das EEPROM kopiert. Bei der Aussendung des Textes wird dieser immer aus dem EEPROM gelesen! Daher ist er individuell vor der Aussendung im EEPROM zu ändern! Die Vorgehensweise wird weiter unten erklärt.
Ebenso wie der Bakentext können auch Parameter angepaßt werden. Die gängigsten Werte können im Menü geändert werden.

Die Funktionen der Telegrafie-Bake:

Die Bake sendet einen Text
  • wahlweise in RTTY (Shift 170Hz)
  • oder in CW

  • durchgehend in einer Endlosschleife
  • oder mit einer Sende-Pause
Folgende Parameter können verändert werden:
  • (RTTY) Fernschreibtelegrafie-Schrittgeschwindigkeit in Baud
  • (RTTY) Signal-Polarität (Normal/Revers)
  • (CW) Tastfunktelegrafie-Geschwindigkeit in WpM
  • Sendepause in Minuten
  • Bakentext im EEPROM (wenn auch etwas umständlich)
Folgende Parameter können nicht geändert werden:
  • Tonhöhen von Mark & Space
  • RTTY Shift
  • CW-Tonlage
Grund: Obwohl das Programm in platzsparendem Assembler geschrieben ist fehlt der Platz im Flash-Speicher für weitere Anweisungen zur Editierung und Berechnung dieser Daten.

Anschlüsse:

Die hier aufgeführten Anschlüsse sind von den Controller-Pins über einen ca. 4,7k großen Widerstand mit der Basis eines NPN-Transistors zu verbinden. Emitter an GND, sodaß der Transistor vom Collector gegen GND schalten kann.

(ATtiny2313-Pin7) PD3 = PTT
(ATtiny2313-Pin8) PD4 = FSK (Signal für RTTY & CW)

Für meine internen Testzwecke lasse ich das FSK-Signal synchron an PB6 ausgeben sodaß über Pin9 des ISP-Anschlusses daß FSK-Signal abgreibbar ist. Sicher wäre es hier vorteilhaft auch die PTT am ISP abzugreifen, aber das kommt später da der Code dann nicht mehr in den Flash des ATtiny2313 passen würde und eine neue Optimierung vorzunehmen wäre.

(ISP-Pin9) PB6 = FSK (Taktung synchron zu PD4)



Die Steuerung (allgemein):

Eingaben:
Taster1 (vorn links):Umschaltung: RTTY/CW
Taster "Ein" (vorn Mitte):Umschaltung Menü-Modus/Sendung
Taster2 (vorn rechts):Umschaltung:In RTTY Normal/Reverse
In CW: Einstellung d.Sendepause
Taster4 (hinten links):- Numerischen Wert vermindern
Taster3 (hinten rechts):+ Numerischen Wert erhöhen
 
Ausgaben:
LED4 (hinten links):FSK
LED3 (hinten rechts):PTT
Buzzer:NF-Signal (RTTY oder CW)
Bild 5
(Abb. 5) Die Eröffnungsmeldung

Die Bedienung der Telegrafie-Bake:

Der Controller startet mit einer Eröffnungsmeldung am LC-Display (s. Abb. 5). Nach ca. 1s erscheint der Status: MenuMode/RTTY45N (s. Abb. 6). Der Controller befindet sich jetzt im Menümodus, und ist bereit für Parameter-Änderungen oder zur Sendung in RTTY (170Hz Shift), 45,45 Baud mit normaler Signal-Polarität.
Alle Meldungen im Display folgen der Kompatibilität halber in englischer Sprache.

Bild 6
(Abb. 6) Der erste Start
(Voreinstellungen RTTY, 45,45Bd, Normal)

Der Menü-Modus (MenuMode):

Die Parameter Geschwindigkeit, Signal-Polarität oder Länge der Sendepause können nur im Menü-Modus verändert werden. Die Veränderungen werden unmittelbar durchgeführt. Eine Bestätigung ist nicht erforderlich. Der neue Wert wird sofort am Display angezeigt. Alle Parameter-Einstellungen werden im EEPROM abgelegt und stehen zur nächsten Sitzung weiterhin zur Verfügung, auch der Modus (Menü- oder Sendung) wird wieder aufgenommen, falls ein Stromausfall eintritt.
Der Menü-Modus beseht aus 2 Ebenen:
  • der RTTY-Ebene und
  • der CW- und Delay-Ebene
 
Funktionen in der Fernschreib-Ebene (RTTY):
Bedienelement:Funktion:
Taster1 (vorn links):Umschaltung zw. RTTY- und CW-Ebene
Taster "Ein" (vorn Mitte):Umschaltung zw. Menü-Modus/Sendung in RTTY
Taster2 (vorn rechts):Umschaltung der Signalpolarität Normal/Reverse
Taster4 (hinten links):- Baudrate vermindern
Taster3 (hinten rechts):+ Baudrate erhöhen
Bild 7
(Abb. 7) RTTY mit veränderten Parametern: 75Bd, Reverse
 
Funktionen in der Tastfunk-Telegrafie-Ebene (CW):
Die CW-Ebene dient auch zur Umschaltung der Sendepause (Delay)
Bedienelement:Funktion:
Taster1 (vorn links):Umschaltung zw. CW- und RTTY-Ebene
Taster "Ein" (vorn Mitte):Umschaltung Menü-Modus/Sendung
Taster2 (vorn rechts):Umschaltung:zur Delay-Ebene (Sendepause)
bzw. zurück zur CW-Ebene
Taster4 (hinten links):- CW-Geschwindigkeit vermindern
Taster3 (hinten rechts):+ CW-Geschwindigkeit erhöhen
Bild 8
(Abb. 8) CW mit Voreinstellung 20 WpM
 
Funktionen in der Delay-Ebene (Sendepause):
Bedienelement:Funktion:
Taster1 (vorn links):Umschaltung von Delay- auf RTTY-Ebene
Taster "Ein" (vorn Mitte):Umschaltung zw. Sendung in CW/Menü-Modus
Taster2 (vorn rechts):Umschaltung zurück zur CW-Ebene
Taster4 (hinten links):- Dauer (Min.) vermindern (0=Dauersendung!)
Taster3 (hinten rechts):+ Dauer in Minuten erhöhen
Bild 9
(Abb. 9) Veränderte Sendepause: 10 Minuten
Aus der Delay-Ebene kann nur in CW gesendet werden !!!
Soll der CW-Status dabei im Display erscheinen so ist mit Taster2 zur CW-Ebene umzuschalten!

Der Sende-Modus (Tx....Lp):

Der Sendemodus wird mit dem Taster "Ein" (Mitte) gestartet oder abgebrochen. Mit demselben wird die Sendung auch während der Sendepause abgebrochen! Dabei kehrt der Controller in den Menü-Modus zurück. Es wird entweder in der RTTY-Ebene oder in der CW-Ebene entsprechend gesendet. Während der Sendung können keine Parameter geändert werden! In der ersten Displayzeile erscheinen dabei links "Tx" (Sendung) und rechts "Lp" ("Loop" = Wiederholungs-Schleife) (s. Abb. 10).
In der zweiten Zeile bleibt der Status sichtbar: Z.B. RTTY75R (RTTY, 75Baud, reverse Signal-Polarität). Hier gibt es nur die Möglichkeit die Sendung mit Taster "Ein" abzubrechen um in den Menü-Modus zu gelangen, oder analog erneut zu beginnen.
Nach der Sendung des Textes erfolgt die Sendepause. Der Prozeß beginnt erneut bis die Dauer-Schleife durch den Taster "Ein" (Mitte) abgebrochen wird.


Die Sender-Steuerung:

Die Sendung erfolgt entsprechend der zuletzt anzeigten Ebene in RTTY oder CW, im Delay-Modus ebenfalls in CW (s. Absatz "Besonderheit im Delay-Modus"):
  • Ein NF-Signal ertönt über den Buzzer. Dieses kann hier abgegriffen werden (ggf. Buzzer ablöten). Hier entsteht ein Rechteck-Signal! Soll dies gesendet werden so ist es in ein Sinus-Signal zu wandeln.
  • Die PTT-LED leuchtet statisch, parallel zur Sendung. Hiermit kann die PTT eines Senders über einen Transistor/Opto-Koppler gesteuert werden.
  • Die FSK-LED leuchtet analog des gesendeten Zeichens. Über einen Transistor kann hiermit die FSK eines Senders gesteuert werden.
Bild 10
(Abb. 10) Bake während der Sendung in RTTY, 75Bd, Reverse
 

Die Sendepause:

Nachdem der Text gesendet wurde stoppt die Aussendung. PTT und FSK fallen auf Low-Pegel und das NF-Signal verstummt. Entsprechend der eingestellten Sendepause (Vorgabe-Wert 1Min) bleibt der Controller in Sendebereitschaft. Er ist somit noch immer im Sende-Modus und nicht im Menü-Modus!
Die Sendepause läßt sich ebenfalls mit dem Taster "Ein" abbrechen um in den Menü-Modus zu gelangen. Während der Sendepause läuft in der oberen linken Ecke des LC-Display's ein Sekunden-Countdown (s. Abb. 11. Hier sind es noch 55 Sekunden bis zum Beginn der nächsten Sendung).
Wird als Delay eine Pause von 0 Minuten eingestellt wird eine Dauersendung durchgeführt. Dabei erscheint kein Sekunden-Coundown, sondern "Tx" in der linken, oberen Ecke des Display's.

  • Die Sendepause wird immer in Minuten eingestellt!
  • Im Countdown werden jedoch immer nur die Sekunden angezeigt!
Bild 11
(Abb. 11) Sendepause.
Noch 55 Sekunden bis zur nächsten Sendung.
 

Besonderheit im Delay-Modus:

Befindet sich der Controller während der Sendung in der Delay-Ebene wird in CW gesendet ohne Anzeige des CW-Status' am Display. Soll dieser angezeigt werden so ist mit dem Taster "Ein" in den Menü-Modus zurückzukehren um anschließend mit dem Taster2 den CW-Status anzuzeigen, und erneut der Taster "Ein" zu betätigen um die Sendung wieder aufzunehmen.
Bild 12
(Abb. 12) Sendung aus der Delay-Ebene in CW

Das EEPROM des Controller's

Änderungen von Parametern und Baken-Text:
Der ATtiny2313 bietet zu wenig Flash-Speicher um noch einen Editor dazu zu integrieren. Daher fällt besonders die Änderung des Bakentextes hier etwas spartanisch aus. Dies ist z.B. mit dem Pollin ATMEL Evaluations-Board & PonyProg2000 möglich. Im PonyProg erfolgt die Darstellung des Speicherinhalts hexadezimal und im rechten Bereich in ASCII. Der Flash-Speicher wird in grüner und der EEPROM-Speicher in blauer Farbe dargestellt. Der Flash-Speicher darf nicht manuell verändert werden, sonst funktioniert das Programm im MicroController nicht mehr ordnungsgemäß!

Vorsicht beim Editieren!
Der Text befindet sich nicht am Beginn des EEPROM's!


Zu Beginn des EEPROM-Speichers befinden sich in den Adressen $0800-$080D Steuerungs-Parameter (Beschreibung s.u.). Der zu sendende Text befindet sich an Adresse $080E-$087E. Wenn der Bereich leer ist ($FF) wird vom Controller folgender Vorgabe-Test-Text dort abgelegt:
vvv zczc
AVR-Beacon by DL8OAS (Only Default-Text in EEPROM)
nnnn
Der Text beginnt demnach mit den Bytes (hexadezimal): 76 76 76 20 7A 63 7A 63 .... Dieser kann z.B. mit PonyProg2000 geändert werden. Wichtig ist, daß er immer mit $00 endet! (im Beispiel s. Adresse $0850). Der Text im EEPROM darf maximal bis Adresse $087E reichen, da sein letztes Byte mit $00 enden muß, welches maximal in $087F abgelegt werden kann.

Im Text dürfen sich nur Zeichen befinden die sich auch in RTTY umsetzen lassen! Alle anderen Zeichen würden vom Programm mit dem Baudot-Code "ignore" (nur Transport-Lochung) übersetzt und gesendet werden, oder verursachen in CW eine kurze Pause.

Zum Ändern des EEPROM-Speichers muß PonyProg2000 zuerst vermittelt werden daß der Speicher überhaupt geändert werden darf. Dazu ist im Programm der Menüpunkt Edit anzuklicken und anschließend Edit Buffer enabled zu wählen (Das Häkchen links muß dabei gesetzt sein, s. Abb. 13).
Bild 13
(Abb. 13) Zuerst ist der Schreibschutz aufzuheben mit /Edit/Edit Buffer enabled !
Anschließend ist das zu ändernde Byte anzuklicken.
 
Anschließend ist auf das zu ändernde Byte zu klicken (s. Abb. 14). Es öffnet sich ein kleines Fenster namens Edit Buffer. Hier wird das Byte auf 3 verschiedene Weisen dargestellt und kann in den entsprechenden Eingabefeldern geändert werden. Nach Betätigung der Schaltfläche OK wird die Änderung von PonyPro2000 übernommen. Damit sind die Daten aber noch nicht im EEPROM des MicroController's! Um die Daten nun zum Chip zu übertragen ist aus dem Menü der Punkt Command zu wählen und anschließend der Menüpunkt Write Data (EEPROM). Die darauf folgende Meldung zum Überschreiben ist mit Yes zu bestätigen. Bild 14
(Abb. 14) Der neue Wert ist hexadezimal, dezimal oder als ASCII-Zeichen anzugeben.
 

Die Steuerungs-Parameter

Die ersten Bytes des EEPROM's von $0800 bis $080D enthalten folgende abgespeicherte Parameter-Daten, immer als Lo- und Hi-Byte. Bei erster Inbetriebnahme ist der Speicher leer und enthält in allen Zellen den Wert $FF. Erst wenn in RTTY und/oder CW gesendet wurde werden die entsprechenden Parameter dort abgelegt. Zu Beginn sind es Vorgabe-Parameter z.B. $2D für die RTTY-Schrittgeschwindigkeit 45 Baud.
Bild 15
(Abb. 15) Die farbig unrandeten Parameter werden im Folgenden beschrieben (s.u)

Positionen der Steuerungs-Parameter (Lo-Byte/Hi-Byte):

(Die Farbe ist analog der Umrandung der Bytes in Abb. 15)
Adresse (Lo/Hi-Byte)Wert/FarbeBedeutung des Wertes
$0800 - $0801$00011sLänge der Sendepause in Minuten (nur Lo-Byte!)
$0802 - $0803$002D45BdFernschreib-Geschwindigkeit (RTTY) in Baud (nur Lo-Byte!)
$0804 - $0805$001420 WpMTastfunk-Telegrafie-Geschwindigkeit in WpM (nur Lo-Byte!)
$0806 - $0807$FE1ANF-Tonhöhe 1000Hz für CW (ist zu errechnen)
$0808 - $0809$FEB4RTTY Mark 1445Hz (ist zu errechnen)
$080A - $080B$FE86RTTY Space 1275Hz (ist zu errechnen)
$080C - $080D$00E0s. u.Semaphor (internes Byte zur Steuerung s.u.. (nur Lo-Byte!)

Die Werte zur Erzeugung der Frequenzen für CW, Mark und Space sind mittels folgender Formel zu errechnen:

65536 + Anzahl.Zyklen - (Taktfrequenz/(Prescaler* 2*Frequenz)) + Offset

Zyklen = Anzahl der Zyklen innerhalb der ISR-Routine für Timer1, (* 13 inkl. Einsprung)
Taktfrequenz= System-Takt des MicroController's (* 1.000.000 Hz)
Prescaler= Teiler für Timer1 (* 1)
Frequenz= Frequenz die erzeugt werden soll
Offset= Wert bei Abweichung (* 1)

  • * Der folgende Wert bezieht sich auf den System-Takt und die im Programm festgelegte
    Timer1-Einstellung sowie auf die ISR-Routine, die mit dem Einsprung Befehle (in Summe)
    die Zeit von 13 Takt-Zyklen braucht.
  • Offset ist ein Wert zur Kompensation der Frequenzabweichung.

Berechnungs-Beispiel:

Zur Ermittlung des Wertes zur Erzeugung einer Frequenz von 1445 Hz ergibt sich folgende Berechnung:

65536 + 13 Zyklen -(1.000.000Hz/(1* 2*1445Hz)) +1 = 65204 = $FEB4

$FEB4 ist der Wert der hier zur Erzeugung des Tones der Mark-Frequenz für RTTY nötig ist s. $0808-$0809
 

Das Semaphor

Das Semaphor ist ein Byte in welchem sich der Controller folgende Zustände "merkt":

Stelle:Bedeutung:Mögliche Zustände:Bemerkung:
Bit 0Sende-Status0 = Rx / 1 = TxManuelle Änderung möglich
Bit 1Modulationsart0 = RTTY / 1 = CWManuelle Änderung möglich
Bit 2Signalpolarität0 = normal / 1 = reversManuelle Änderung möglich
Bit 3Modus in CW-Ebene0 = CW-WpM ändern / 1 = Bakenpause ändernManuelle Änderung unsinnig
Bit 4BuZiBitStatus ob zuletzt Bu(0) oder Zi(1) gesendetÄnderung nur durch das Programm
Bit 5Anzeige der Sendepause1 = Sendepause in Sekunden anzeigenManuelle Änderung möglich
Bit 6SendStop1 = 1,5-faches Stop-Bit sendenÄnderung nur durch das Programm
Bit 7LocalBitTemporäres BitÄnderung nur durch das Programm

Einzelne Bits können mit PonyProg2000 nicht geändert werden sondern nur das ganze Byte!
Daher ist nach Änderung der Bits das Byte zu bilden und der daraus entstandene hexadezimale Wert mit PonyProg2000 in das EEPROM des ATtiny2313 zu übertragen.




Letzte Änderungen/Neuigkeiten bzgl. der Firmware

Seit Firmware-Version RC.1.43 vom 2011.07.14:
  • Zum einen wurde der Source-Code der LCD-Routinen geändert.
  • Weiterhin kann nun, ursprünglich für interne Testzwecke vorgesehen, PB6 als FSK-Ausgang am ISP-Anschluß genutzt werden. So braucht man nicht an der Platine herumzulöten. Die PTT (falls benötigt) ist jedoch weiterhin an (ATtiny2313-Pin7) PD3 abzugreifen. Nur auf Wunsch wird die Programmierung zur Ausgabe der PTT am ISP gern vorgenommen.

In eigener Sache

Es geht hier nicht um die vollständige Elektronik einer Telegrafie-Bake, sondern nur um deren software-seitige Basis. Zu einer vollständigen Bake ist die Wandlung vom Rechteck- zum Sinus-Signal nötig, die hardware-seitige PTT-Steuerung und die Anbindung an einen Sender, etc.

Das Programm ist sicher "nichts Dolles". Hier ist dennoch mein Assembler-Source-Code (V RC.1.43, Stand 2011-07-14) für das Hauptprogramm und die LCD-Routinen.

Für diejenigen die sich nicht für den Source-Code interessieren und nicht programmieren wollen sondern lieber die Telegrafie-Bake zum "Laufen" bringen möchten steht hier das HEX-File zum Flashen in den ATtiny2313 bereit um das "Pollin-Spiel" zur Telegrafie-Bake zu ändern.

Weder die Source-Codes noch das HEX-File sind verkäuflich, und dürfen nur im Rahmen des HAM-Spirit's weitergegeben werden! Die weitere Elektronik zum Senden möge man sich ausdenken. Wer möchte, kann mir ja seine Vorschläge dazu per eMail senden. Auf Wunsch werde ich diese gerne veröffentlichen.

Für Schäden die mit der hier beschrieben Technik an Geräten, Personen oder der Umwelt verursacht werden übernehme ich keine Verantwortung und Haftung!
Die Zeichenfolge DL8OAS innerhalb des Bakentextes dient nur zu Demonstrationszwecken. Wird diese Telegrafie-Bake an einem Sender betrieben so ist der Baken-Text entsprechend zu ändern und nicht in der Form zu senden wie im Source-Code und im .HEX-File angegeben!


73, de Jens (DL8OAS)
eMail: dl8oas@gmx.de