Fernschreib- und Morse-Telegrafie-"Decoder" mit den AVR-MicroControllern ATtiny2313 und ATtiny4313 |
Stand: 2012-12-11 (letzte Neuigkeiten bzgl. der Firmware RCrx1.54 vom 2012-02-10) |
Schaltung mit umprogrammiertem MicroController:
|
Zusatz-Schaltung (Converter)zum Wandeln des Ton's einer bestimmten Frequenz in einen Impuls: |
(Abb. 1) Eröffnungs-Meldung des Telegrafie-"Decoder's" beim Start Der Schaltplan ist auf der entsprechenden Pollin-Seite verfügbar. |
(Abb. 1A) Simpler PLL-Filter-Converter (Mark-only) zur Umsetzung des
NF-Signals aus einem Empfänger in ein TTL-Signal für den "Decoder". Das NF-Signal kommt vom NF-Ausgang des Empfängers in den NF-Eingang des Converter's. Der Ausgang des Converter's wird verbunden mit PB6 (Wannenstecker Pin9) des "Decoder's". --- Diese Schaltung ist nicht im Pollin-Spiel integriert! --- (Ein Klick auf das Schaltbild lädt dieses per Acrobat-Reader-PlugIn) |
Das hier verwendete Wort "Decoder" Ein Wort vorab um Mißverständnisse zu vermeiden: Das Wort "Decoder" steht in Gänsefüßchen da das Gerät nicht als Entschlüsselungsgerät codierter Funksprüche arbeitet. Die Entschlüsselung z.B. militärisch codierten Fernschreib- oder Morse-Textes ist mit der hier vorgestellten Firmware nicht möglich, und auch nicht beabsichtigt. Die von mir entwickelte Firmware ist für den Einsatz zu Amateurfunk- und/oder Demonstrations-Zwecken vorgesehen. Die hier vorgestellte Firmware wertet nicht direkt das akustische Signal aus einem Empfänger aus! Dazu wäre zwischen dem Telegrafie-Decoder und einem Empfänger ein sogenannter Converter zu schalten, der die akustischen Signale aus dem Empfänger in digitale Signale wandelt und zum Telegrafie-"Decoder" führt. Der Schaltplan (s. Abb. 1A) des einfach aufzubauenden PLL-Converter's steht hier zum Download bereit. |
(Video 1) RTTY/Fernschreib-"Decoding" mit dem ATtiny2313/ATtiny4313 Das im Empfänger empfangene Signal wird mittels eines RTTY-Filter-Converter nach DJ6HP (sichtbar unterhalb des Steckbretts) in Impulse gewandelt und zum Telegrafie-"Decoder" geführt. |
(Video 2) CW/Morse-"Decoding" mit dem ATtiny2313/ATtiny4313 Die Zeichen werden in diesem Video per Hand-Taste gegeben, aber auch Tests auf unterschiedlichen Amateurfunkbändern ergaben brauchbare Ergebnisse, auch bei unterschiedlichen Tempi. |
|
Nach Betätigung des Pausen-Symbols (in der Control-Leiste unten links) kann das entsprechende Video angehalten oder wiederholt werden. |
Der Telegrafie-"Decoder" |
|
Das "Tüdeln" das oft auf Kurzwelle zu hören ist können u.A. Fernschreib- oder Morse-Signale sein. Im kommerziellen Funk
(z.B. Deutscher Wetterdienst, Presseagenturen, Militär, etc.) und im Amateurfunk
werden in Abhängigkeit des Bandplans bestimmte Telegrafie-Arten gesendet, unter Anderem auch Fernschreib- und
Tastfunk-Telegrafie.
Fernschreib-Signale sind menschlich nicht interpretierbar. Morse-Signale hingegen, können von Menschen interpretiert werden.
Der von mir entwickelte Telegrafie-"Decoder" interpretiert das digitale Fernschreib-Telegrafie-Signal im Baudot-Code nach CCITT2 (im Folgenden RTTY genannt) und Tastfunk-Telegrafie-Signale im Morse-Code (sicher ein Frevel für einen eisernen CW-Enthusiasten), und schreibt die übersetzten Signale in menschen-lesbaren Text auf ein LC-Display. Das Display mit 8 Zeichen pro Zeile, in der hier verwendeten Schaltung, ist sicher zu klein und daher nicht praxisgerecht. Um explizit mein Programm auf der Pollin-Spiel-Elektronik zu demonstrieren habe ich den Bausatz im Original belassen. Dieser Aufbau ist daher nur zur Demonstration vorgesehen. Es kann jedoch ein größeres 2-zeiliges Display an diese Schaltung gelötet werden. Der Wert für die Anzahl der sichtbaren Zeichen pro Zeile ist im EEPROM abgelegt (für dieses Display ist an der EEPROM-Adresse $06 der Wert $08 abgelegt). Wie dieser Wert auf größere 2-zeilige Displays angepaßt wird ist auf dieser Seite im Abschnitt Das EEPROM des Controller's beschrieben. Displays mit mehr als 2 Zeilen werden von meiner Firmware nicht unterstützt. Später folgen jedoch weitere Projekte die auch 4-zeilige Displays unterstützen. Morse-Signale werden vom Telegrafie-"Decoder" automatisch synchronisiert. Manuelle Einstellungen sind daher nicht nötig. Es kann jedoch während des Empfangs mittels Taster3 und Taster4 manuell eine erneute Synchronisation angestoßen werden, falls Zeichen unsauber empfangen werden (Beide Taster haben die selbe Funktion).. Während des Morse-Empfangs gibt der Piezo-Schallwandler analog des Signals entsprechend einen Ton aus. Wird z.B. eine Morsetaste an PB6 und GND angeschlossen und diese entsprechend betätigt so ist beim Niederdrücken der Taste dieser Kontroll-Ton zu hören (= akustischer Monitor). Einen kleinen Wermutstropfen gibt es zur Zeit in der Routine zum "Decodieren" von Morse-Zeichen: Beginnt ein Funkspruch mit einem T so synchronisiert das Programm nicht. Dies liegt an der Referenzierungs-Routine, die ich in noch nicht absehbarer Zeit jedoch ändern werde. Alles Andere funktioniert aber recht gut. Zum Empfang von Fernschreib-Signalen sind die Baudrate (Taster4 und Taster3, hinten/links & -rechts) sowie die Signal-Polaritäts-Umschaltung (Taster2, vorn/rechts) entsprechend einzustellen. Diese Parameter sind während des Empfangs ebenfalls mit den o.g. Tastern zu ändern. Die Bedienung der Taster wird auf dieser Seite im Abschnitt Die Bedienung des Telegrafie-"Decoder's" beschrieben. In der Pollin-Spiel-Schaltung wird der ATtiny2313 mit dem internen Oszillator getaktet. Daher fällt die Genauigkeit etwas "mager" aus. Dies bedeutet daß bei höheren Schrittgeschwindigkeiten Fehler bei der Erkennung der empfangenen Zeichen auftreten können (Timing-Toleranz). Daher empfehle ich den Einsatz bis maximal 75 Baud. In meinen Tests wurde bis maximal 150 Baud korrekt interpretiert, dies setze ich jedoch nicht als Normal-Fall voraus. Die Darstellung am Display Die Display-Zeilen werden während des Empfangs im Wechsel beschrieben. Eine genauere Beschreibung erfolgt im Absatz Die Textausgabe am Display auf dieser Seite. |
Funktionen des Telegrafie-Decoder's: | |
Text-Empfang:
|
Folgende Parameter können verändert werden:
|
Vorsicht: Die Firmware aktiviert im MicroController den Pull-Up-Widerstand an PB6. PB6 ist somit gegen GND zu takten! |
Die Bedienung des Telegrafie-"Decoder's":
|
|||||||||||||||||||||||||||||||||||||||||||||
Der Controller startet mit einer Eröffnungsmeldung am LC-Display (s. Abb. 1). Nach ca. 1s erscheint
der Status: RCrxMenu/Rx RTTY (s. Abb. 2) oder RCrxMenu/Rx CW (s. Abb. 3). Der Controller
befindet sich jetzt im Menümodus und ist bereit zur Umschaltung zwischen der Modulations-Art RTTY oder CW.
In diesem Menümodus ist der Controller jedoch noch nicht empfangsbereit! Erst nach Betätigung des Tasters4 hinten/links kann der Controller Signale empfangen. Zur "Decodierung" von Telegrafie-Signalen wird vorausgesetzt daß an PB6 und GND entsprechend eine Signalquelle angeschlossen ist, beispielsweise der Ausgang eines Filter-Converter's dessen NF-Eingang mit dem -Ausgang eines Empfängers verbunden ist. Der Empfänger ist auf ein sauberes Telegrafie-Signal einzustellen. Die Qualität des Empfangs ist analog der Qualität des Signals. Nur ein sauberes Signal kann sauber "decodiert" werden. Diese Beschreibung bezieht sich nicht darauf wie eine gute Signal-Qualität zu erreichen ist. Es wird vom Benutzer erwartet daß er entsprechende Geräte verwendet und diese ordnungsgemäß einstellt sodaß ein sauberes Signal am MicroController anliegt. Ich verwende am Kopfhörer-Ausgang des IC-7000's einen Filterconverter. Der Empfang funktionierte bisher einwandfrei. |
(Abb. 2) Menü Mit Taster1 (links/unten) kann in den Modus CW gewechselt werden |
||||||||||||||||||||||||||||||||||||||||||||
Das Menü "RCrxMenu" beseht aus 2 Ebenen: |
|||||||||||||||||||||||||||||||||||||||||||||
Im Menü-Modus RCrxMenu ist der MicroController noch nicht empfangsbereit. Zuerst ist die Modulations-Art auszuwählen und anschließend Taster4 (hinten links) zu betätigen! Erst dann können die empfangenen Signale umgesetzt werden. |
(Abb. 3) Menü Mit Taster1 (links/unten) kann in den Modus RTTY gewechselt werden |
||||||||||||||||||||||||||||||||||||||||||||
Der CW-Empfang: Maschinell und konstant gegebene Zeichen werden ordnungsgemäß übersetzt, auch ist dies bei hand-gegebenen Zeichen möglich da das Programm die Ton- und Pausenlängen innerhalb einer Toleranz erwartet. Der Empfang von Tastfunk-Telegrafie kann jedoch sehr unterschiedlich ausfallen. Dies liegt daran daß CW-Zeichen auf unterschiedliche Weise gegeben werden können. So könnte der Decoder zum Beispiel innerhalb eines Wortes Leerzeichen zwischen den Buchstaben erkennen. Dies könnte daran liegen, daß die Pausen in Ralation der gegebenen Zeichen zu groß sind. Die Ursache kann entweder am Geben der Morsezeichen liegen oder es bedarf einer Optimierung meines Programms. Die Programmierung zum CW-Empfang war ohnehin nicht gerade sehr einfach, da Morsezeichen unterschiedlich lang sind und sie erst nach Ablauf einer bestimmten Pause übersetzt werden können. Ebenso ist die Länge von Pausen entscheidend für den Zusammenhalt des einzelnen Buchstabens/Zeichens, und zur Trennung von Wörtern. Es gibt verschiedene Algorithmen zum Decodieren von Morsesignalen. Das hier verwendete Synchronisations-Verfahren enthält leider einen "kleinen" Fehler: Ein Funkspruch darf nach erneuter Synchronisation nicht mit einem T beginnen. Tritt dieser Fall auf so ist manuell eine erneute Synchronisation durchzuführen, ebenso beim Empfang einer längeren Pause. Eine manuelle Neu-Synchronisation wird durch Betätigung des Tasters3 (oder des Tasters4) angestoßen. Das führt dazu daß nach einer Pause und Änderung der Gebe-Geschwindigkeit die Längen der Töne und Pausen in neue Relationen gesetzt werden und die Übersetzung der Zeichen wieder möglich ist. Somit ist das Programm zu Beginn eines Funkspruchs unabhängig von einer konstanten, langsamen oder schnellen Gebe-Geschwindigkeit. Sollte bei konstanter Geschwindigkeit dennoch keine korrekte Übersetung möglich sein so sind während des Empfangs Taster3 oder 4 zur erneuten Synchronisation zu betätigen. Dieser Vorgang muß evtl. häufiger durchgeführt werden.
|
(Abb. 4) "Decoder" beim CW-Empfang (Abb. 5) Der "Decoder" im RTTY-Empfangs-Modus 45.45 Baud/Normal |
||||||||||||||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||||||||||||||
Der RTTY-Empfang: 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.
Veränderungen der Signalpolarität und der Schrittgeschwindigkeit werden unmittelbar in der 2. Zeile des Displays angezeigt und beim weiteren Empfang überschrieben. |
(Abb. 6) Der "Decoder" im RTTY-Empfangs-Modus |
||||||||||||||||||||||||||||||||||||||||||||
Die Textausgabe am Display |
|||||||||||||||||||||||||||||||||||||||||||||
Der auf dem Display dargestellte Text beginnt in Zeile1 und wird vom linken Rand nach rechts geschrieben.
Ist der rechte Rand des Displays erreicht wird die Text-Darstellung vom linken Rand der 2.Zeile zu deren
rechten Rand fortgesetzt (s. Abb. 6). Ist das Ende der 2.Zeile erreicht wird die 1.Zeile gelöscht und dort die Darstellung fortgesetzt, die 2.Zeile bleibt währenddessen vorerst erhalten (s. Abb. 7). Beim Erreichen des Endes der 1.Zeile wird die 2.Zeile gelöscht und diese beschrieben, wobei die 1.Zeile vorerst erhalten bleibt. Etc. Ist das Ende der 2.Zeile erreicht wird die 1.Zeile gelöscht und dort die Darstellung fortgesetzt. Beim Erreichen des Endes der 1.Zeile wird die 2.Zeile gelöscht und anschließend beschrieben, usw. |
(Abb. 7) Die Display-Zeilen werden im Wechsel beschrieben |
Das EEPROM des Controller's Die im Folgenden beschriebenen Anpassungen sind nicht nötig wenn die Elektronik des "Pollin-Spiels" nicht verändert wird, sondern nur wenn z.B. ein größeres Display verwendet werden soll. |
|||||||||||||||||||||||||||||||||||||
Änderungen von Parametern |
|||||||||||||||||||||||||||||||||||||
Änderungen im EEPROM des MicroController's sind z.B. mit dem Pollin ATMEL Evaluations-Board & PonyProg2000 möglich.
Dort erfolgt die Darstellung des Speicherinhaltes 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! Zu Beginn des EEPROM-Speichers befinden sich in den Adressen $00-$0D einige Steuerungs-Parameter (Beschreibung s.u.). 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). |
(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. |
(Abb. 14) Der neue Wert ist hexadezimal, dezimal oder als ASCII-Zeichen anzugeben. |
||||||||||||||||||||||||||||||||||||
Die Steuerungs-Parameter |
|||||||||||||||||||||||||||||||||||||
Die ersten Bytes des EEPROM's von $00 bis $06 enthalten die unten aufgeführten abgespeicherten Parameter-Daten, immer als
Lo- und Hi-Byte. Dem 6. Byte (Anzahl der sichtbaren Zeichen/LCD-Zeile) gehört kein Hi-Byte!. Bei erster Inbetriebnahme ist der Speicher leer und enhält in allen Zellen den Wert $FF. Erst wenn
Parameter verändert wurden (z.B. durch Betätigung der Taster3 und/oder -4) werden sie entsprechend dort abgelegt. Nach erster Inbetriebnahme sind es Vorgabe-Parameter
z.B. $002D für die RTTY-Schrittgeschwindigkeit 45 Baud. |
(Abb. 15) Die farbig umrandeten Parameter werden im Folgenden beschrieben (s.u) |
||||||||||||||||||||||||||||||||||||
Positionen der Steuerungs-Parameter Die Bytes der Steuerungs-Parameter stehen immer in der Folge von Lo-Byte und Hi-Byte im EEPROM. PonyProg2000 führt das EEPROM ab Adresse $0800. (Die Farbe des Wertes ist analog der Umrandung der Bytes in Abb. 15)
Die Werte zur Erzeugung der Frequenz von 1000Hz für den CW-Monitor ist mittels folgender Formel zu errechnen: 65536 + Anzahl.Zyklen - (Taktfrequenz/(Prescaler* 2*Frequenz)) + Offset
Berechnungs-Beispiel:Zur Ermittlung des Wertes zur Erzeugung einer Frequenz von 1000 Hz ergibt sich folgende Berechnung:65536 + 13 Zyklen - (1.000.000Hz/(1* 2*1000Hz)) +2 = 65050 = $FE1A $FE1A ist der Wert der hier zur Erzeugung des Tones für den CW-Monitor nötig ist. s. $02-$03 |
|||||||||||||||||||||||||||||||||||||
Die Semaphoren Die Semaphoren bestehen jeweils aus einem Byte in welchem sich der Controller bestimmte Zustände "merkt". Das Semaphor2 enthält lediglich temporär-wichtige Informationen. Es ist daher flüchtig und befindet sich lediglich in einem Register. Das Semaphor1 wird beim Starten des Controller's als Word vom EEPROM gelesen und dessen Lo-Byte in ein Register übertragen. Die einzelnen Informationen des Semaphor1 sind im Folgenden beschrieben: Das Semaphor1:
Der Zustand des Semphor1 wird im EEPROM an Adresse $05 gespeichert. 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. |
Datum | Version | Bemerkung |
2012-02-10 | v1.54 | Auswertung der CW-Kombination SK und des Buchstaben ß als sz |
2011-10-17: | Bereitstellung der HEX-Files für ATtiny2313, ATtiny4313 und ATmega8. | |
2011-10-16 | v1.53 | Source-Anpassung auch für den ATtiny4313. |
2011-10-09 | v1.52 | Wechsel zwischen BU- und ZI-Ebene während des Fernschreib-Empfangs (RTTY). |
In eigener SacheEs geht hier nicht um die vollständige Elektronik eines Telegrafie-Empfängers, -Decoder's, -Demodulators oder wie auch immer man das Gerät nennen mag, sondern nur um dessen software-seitige Basis.Das Programm ist sicher "nichts Dolles". Hier ist dennoch mein aktueller Assembler-Source-Code 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 den Telegrafie-"Decoder" zum "Laufen" bringen möchten stehen hier folgende HEX-Files zum Flashen bereit um das "Pollin-Spiel" zum Telegrafie-"Decoder" zu ändern: HEX-File für ATtiny2313 HEX-File für ATtiny4313
HEX-File für ATmega8
Fragen zu diesem Projekt beantworte ich gerne per eMail s.u. 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! 73, de Jens (DL8OAS) eMail: dl8oas@gmx.de |