Archiv der Kategorie: Betriebsarten

Datenübertragung im Subaudiobereich

Im Amateurfunk wird es auf den frequenzmodulierten VHF und UHF-Bändern immer enger. Die Bandbreiten schrumpfen. Wenn man also mal eine Datenübertragung parallel zum Träger und der Sprachsignale übertragen will (ähnlich RDS im UKW-Rundfunk), bleibt eigentlich nur noch der Bereich unter 300 Hertz. Normalerweise ist dieser Bereich für CTCSS-Töne “reserviert”. Also nutzen wir sie doch experimentell… Sprachfrequenzen werden im Audiobereich 300 … 2700 Hz übertragen. Da stört sich also nix.

Hier eine Idee, wie man z.B. einen Arduino Nano beibringen könnte Daten in diesem Bereich dem Trägersignal hinzuzusetzen. Die eingebaute Tone()-Funktion erzeugt 5V-Rechtecksignale von 31 … 65535 Hz. So also mal schnell ein Arduino-Sketch niedergeschrieben und in den Nano geschoben:

Fakt ist: Die tone()-Funktion des Arduino kann nur unsigned int Werte annehmen. Bis hinunter zu 31 Hz kann ein Signal unterhalb 300 Hz erzeugt werden. Aber eben nur ganzzahlige Werte. Ein CTCSS-Pilotton von 88,5 Hz ist demnach nicht darstellbar. Was bleibt ist die Erzeugung der 10-fachen Frequenz und dann mit einem Teiler-IC durch 10 zu teilen. Das kann dann ein CD4018 erledigen, also 885 : 10 = 88,5.

Hier die Idee:

CD 4018 Beschaltung als Teiler durch 10

CD 4018 Beschaltung als Teiler durch 10

Hier der aktuelle Arduino-Sketch:

/*
  Dieser Sketch wurde mit dem Arduino Nano entwickelt
  und sollte aber auch auf allen anderen Arduinotypen lauffähig sein.
  Ich hatte eben keinen anderen, die Dinger sind so saubillig geworden...
  Natürlich kann man immer etwas verbessern, also tu es, ich tu auch was
  
  Carsten Koch, DL8AAP - Letzter Stand 22.9.2016
*/

// Der Timer muss eingebunden werden
#include "TimerOne.h"

//            0   1   2   3   4   5   6   7   8   9  Beg End
int T[12] = {915,693,710,719,744,770,797,825,854,885,670,2541}; // CTCSS-Frequenzen mal 10 in Hertz, werden später durch Hardware durch 10 geteilt
int dur = 180;                                                  // Dauer eines Datenbits in ms
int dur_roger = 120;                                            // Dauer des Rogerbeep in ms
int freq_roger = 3000;                                          // Frequenz des Rogerbeep in Hertz
int dur_break = 500;                                            // Pause zum nächsten Datenwort in ms
int pin_id = 10;                                                // Ausgabepin für die zu sendende String-ID
int pin_roger = 11;                                             // Ausgabepin für den Rogerbeep
String ID = "1234567890";                                       // zu sendende Ziffern
String zeichen = "";                                            // Puffervariable
int x;                                                          // Puffervariable
int pttPin = 7;                                                 // Pin 7 ist HIGH, schaltet nach Masse auf LOW als PTT gedrückt
int ledPin = 13;                                                // Visuelle Darstellung des PTT-Status
long intervall = 10000;                                         // Timerintervall in µsek
int send_id = 1;                                                // 0=String-ID aus, 1=String-ID an
int send_roger = 1;                                             // 0=Rogerbeep aus, 1=Rogerbeep an
int play = 0;                                                   // Zusatzvariable für den Rogerbeep

void setup() {
  pinMode(pttPin, INPUT_PULLUP);             // pttPin wird als Input mit einem Pullup-Widerstand auf HIGH gesetzt
  pinMode(ledPin, OUTPUT);                   // ledPin wird als Output gesetzt
  Timer1.initialize(intervall);              // Der Timer wird mit dem Timerintervall gesetzt
  Timer1.attachInterrupt(switch_ptt_state);  // Die Funktion switch_ptt_state wird als Timer-Funktion gesetzt
}

void loop() {
  // In der loop() wird der ID-String an der pin_id ausgegeben
  // aber nur, wenn der Schalter send_id auf 1 steht
  if (send_id == 1) {
    start_id();
    for(int i = 0; i<ID.length(); i++) {
      zeichen = ID[i];
      x = zeichen.toInt();
      play_id(T[x]);
    }
    end_id();
    pause_id();
  }
}

// Weitere eigene Funktionen

void switch_ptt_state() {
  // Diese Funktion wird vorrangig vor der loop()-Funktion aufgerufen
  //digitalWrite(ledPin,digitalRead(ledPin)^1);
  if (digitalRead(pttPin) == LOW) {
    // Wenn die PTT getastet wird = LOW, dann sind wir im TX-Modus
    //ptt = tx;
    digitalWrite(ledPin,HIGH); // Lass die TX-Lampe brennen
    play = 1; // Um den Rogerbeep später auszulösen, wird play auf 1 gesetzt
  }
  else {
    //ptt = rx;
    // Sobald wir im RX Modus sind und der Rogerbeep gesendet werden soll, dann tu das
    if (play==1) {
      // Wenn der Rogerbeep gesendet werden soll,
      if (send_roger == 1) {
        // Dann unterbreche den Pin bei dem, was er grad spielt
        noTone(pin_id);
        // und spiele den Rogerbeep
        play_roger(); 
      }
      // Der Rogerbeep wurde erzeugt, play kann wieder auf 0 gesetzt werden
      play = 0;
    }
    // Schalte die TX-Lampe aus
    digitalWrite(ledPin,LOW);
  }
}

void start_id() {
  // Startsignal für Datenwort
  // wird doppelt so lange gespielt, wie ein Datenbit
  tone(pin_id,T[10],dur*2);
  delay(dur*2+10);
}

void play_id(unsigned int f) {
  // Datenbit eines Datenworts
  // f=übergebene Frequenz des Tones
  tone(pin_id,f,dur);
  delay(dur+10);
}

void end_id() {
  // Endsignal für Datenwort
  // wird doppelt so lange gespielt, wie ein Datenbit
  tone(pin_id,T[11],dur*2);
  delay(dur*2+10);
}

void pause_id() {
  // Pause zum nächsten Datenwort
  noTone(pin_id);
  delay(dur_break);
}

void play_roger() {
  // Rogerbeep
  tone(pin_roger,freq_roger,dur_roger);
  delay(dur+10);
}

Danach durchläuft das Signal einen aktiven Tiefpassfilter 4. Ordnung mit einer Grenzfrequenz von 300 Hz nach vorheriger Verstärkung von 3 dB. Das Signal des Rogerbeeps (ca. 1 … 3 kHz) wird daran vorbei geschleust. Damit werden dann alle Obertöne des Rechtecksignals unterdrückt. Im Idealfall bleibt ein (relativ) sauberer Sinus als Nutzsignal.

Auf http://www.analog.com/designtools/en/filterwizard/ kann man sich seinen Filter zusammen stellen. Die Ergebnisse für meine Zwecke sehen dann in der Theorie wie folgt aus:

TP-Filter Vorgaben

TP-Filter Vorgaben 3dB Verstärkung mit 300 Hz Grenzfrequenz, 40 dB Dämpfung bei 1 kHz

TP-Filter 4. Ordnung nach Sallen Key

TP-Filter 4. Ordnung nach Sallen Key

TP-Filter 2 x 2. Ordnung

TP-Filter 2 x 2. Ordnung

TP-Filter zu erwartende Kurve

TP-Filter zu erwartende Kurve

Eine entsprechende Schaltung habe ich mal mit LTSpice simuliert. Dabei habe ich die Werte eines TL084 OP benutzt und komme auf die gleichen Filterergebnisse.

300 Hz Tiefpassfilter in der Spice-Simulation

300 Hz Tiefpassfilter in der Spice-Simulation

250 Hz-Signal - rot=Input, grün = Output,

250 Hz-Signal – rot=Input, grün = Output,

Das 500 Hz-Signal (grün) wird schon deutlich vom Eingangssignal (rot) gedämpft

Das 500 Hz-Signal (grün) wird schon deutlich vom Eingangssignal (rot) gedämpft

Deutlich ist die Dämpfung des Signals von fast 50 dB bei 1 kHz zu erkennen.

Deutlich ist die Dämpfung des Signals von fast 50 dB bei 1 kHz zu erkennen.

Blockschaltbild Subaudio-Encoder

Blockschaltbild Subaudio-Encoder mit Rogerbeep

Soweit die Theorie…

Wohlgemerkt, es handelt sich hier zunächst erstmal um einen Encoder. Um das Decodieren kümmern wir uns an anderer Stelle.

Nun geht’s an die Praxis!

Soundkarten-Interface für digitale Betriebsarten

Das ist sie nun, meine neue Errungenschaft:

Ein Interface zwischen der Soundkarte meines Laptops und dem Kenwood TS-870S.

Soundkarten-Interface PSK10 von SEC

Soundkarten-Interface PSK10 von SEC

Im Lieferumfang ist eine 12 Volt Zuleitung mit einem passenden Hohlstecker, zwei 3,5 mm Klinkenkabel in Stereoausführung für Line-Out und Line-In (Mic-In) und das Signalkabel zum Transceiver. In meinem Fall habe ich gleich den passenden 13-poligen Stecker für den ACC2-anschluss des Kenwood TS-870 mitbestellt. Eine Bedienungsanleitung ist ebenfalls dabei. Eigentlich wollte ich mir ein solches Interface mal selbst bauen. Aber bis der Warenkorb im Internet mit dem Kleinkram gefüllt ist, dauert es ewig. Deshalb habe ich mich zum Kauf aus der Nachbarschaft für einfaches kleines Geld entschieden. Ich hätt’s nicht besser machen können.

Verschaltung PSK10 Interface

Verschaltung PSK10 Interface

Das Interface trennt den Rechner vom TRX mittels NF-Übertrager, in beiden Richtungen. Aus dem Soundkarten-Signal wird durch eine VOX-Schaltung über Optokoppler die PTT getastet.

Nun betreibe ich es zur Zeit mit der Software FLDIGI und habe bereits BPSK31 und RTTY Verbindungen bestätigt bekommen. Auch JT65 habe ich mit der JT65HF-Software getätigt. Natürlich könnte man damit auch CW machen, aber dafür habe ich immer noch meine Taste, zumal ich auf der Interradio 2013 in Hannover der Arbeitsgemeinschaft Telegrafie AGCW-DL e.V. beigetreten bin und immer noch gern jeden Dienstag abend um 20 Uhr auf 80m dem QRSNET auf 3556 kHz folge.

Beschaltung des Funkgeräteanschlusses des PSK-Interfaces

PSK-10 Funkgeräteanschluss

PSK-10 Funkgeräteanschluss

NC: Liegt bei Empfang auf Masse (wird für einige Funkgeräte benötigt)
PTT: Liegt beim Senden gegen Masse
TXD: Sendeton, wird am Funkgerät an MIC oder AF-Input angeschlossen
RXD: Empfangston, wird am Lautsprecher oder AF-Output am Funkgerät angeschlossen
GND: Gerätemasse / Masse

Der Nachfolgetyp des Interfaces besitzt mittlerweile eine engebaute Soundkarte, eine vollständige galvanische Trennung und einen USB-Anschluss, der das Gerät auch mit Strom versorgt. Selbst die Spannungsversorgung ist galvanisch getrennt.

QRSNET – CW für Einsteiger und Wiedereinsteiger

Durch Zufall erfahre ich (natürlich wieder über das Internet), dass eine kleine Gruppe um Mike, DF2OK, existiert, die sich mit dem Erlernen bzw. Auffrischen der Morsetelegrafie beschäftigt.

DF2OK ruft hier aus der AGCW-DL (Arbeitsgruppe CW in Deutschland) jeden Dienstag abend um 20:00 Uhr Ortszeit auf der Frequenz 3556 kHz (+/- QRM) CW-Interesssierten in langsamer Geschwindigkeit mit ungefähr 40 Zeichen/Minute dazu auf, das Morsen zu verinnerlichen oder Wiedereinsteigern es ermöglichen ihre Kenntnisse wieder aufzufrischen.

Bereits um 19:30 drehe ich gestern abend mich auf die Frequenz ein und warte, was passiert. Um kurz vor acht ruft DF2OK die Teilnehmer auf sich zu melden. Noch traue ich mich nicht und entschließe mich erstmal zuzuhören. Einen Teilnehmer konnte ich leider im QRM nicht ausmachen. Aber ich schreibe etwas mehr als eine Stunde mit, was da so gegeben wird. Ein Spiel mit verdrehten Buchstaben eines Wortes. Das Zuhören und Niederschreiben macht einen Heidenspaß. Ein Teilnehmer wird während dieser Stunde immer schneller, und ich merke, wie ich (noch) an meine Grenzen stoße. Aber am Ende habe ich vier Seiten A4 (Schmierpapier) vollgeschrieben und den Inhalt der Durchgänge erkannt.

Hier ein Auszug aus DK5KEs Internet-Seite:

Lernplateaus beim Lernen der Morsetelegrafie

Lernplateaus beim Lernen der Morsetelegrafie

Nachdem sich alle verabschiedet haben, bedanke ich mich und gebe mich in CW als Zuhörer zu erkennen. In diesem Moment habe ich beschlossen, dass ich versuchen werde, jeden Dienstag Abend diese Zeit einzuhalten und bei der nächsten Runde teilzunehmen. Ein besseres “Fairständnis” für Einsteiger und Auffrischer kann man nicht finden. Hier sind Gleichgesinnte, die man oft vergeblich in einem alt eingesessenen OV findet, in dem die dortigen Funkamateure schon längst über dieses Stadium hinaus sind.

An dieser Stelle einen wirklichen Dank an DF2OK für sein Engagement zur Aufrechterhaltung der Betriebsart CW, der Morsetelegrafie, dem ich hier einen Link auf die Organisation spendiere – ich hoffe hiermit auf sein Einverständnis:

DF2OK: http://www.df2ok.privat.t-online.de/afu01a.htm#OBEN

Arbeitsgemeinschaft Telegrafie e.V. (AGCW-DL): http://www.agcw.org/

 

Achtung A1A! oder Was ist denn nun mit CW bei DL8AAP?

Seit langem schon plage ich mich mit dem Gedanken an die Morse-Telegrafie, oder auch CW genannt. Es ist dies wohl die ureigenste Betriebsart, die mit den Anfängen der Funkübertragung einhergeht.

Samuel Morse Gedenktafel

Samuel Morse Gedenktafel

Hier ein Wikipedia-Link: http://de.wikipedia.org/wiki/Morsecode

Nun habe ich in den letzten Tagen immer schon mal vorsichtig “test de dl8aap” und auch schon mal mit QRP-Leistung “cq cq cq de dl8aap dl8aap dl8aap pse k” gerufen, war aber eigentlich immer froh, dass sich niemand meldete. Puhhh…

Bis auf gestern abend! Ich höre in einem eigentlich ermüdend langsamen Tempo (ca. 40 Zeichen/Min) ein irische Station und traue mich sie anzurufen. Auf einmal war ich mitten drin, kein zurück! Und ich bin froh, dass der OM weiterhin sehr lesbar für mich und in einem für mich richtigen Tempo zum Mitschreiben ein einfaches aber auch individuelles QSO in CW mit mir abwickelt. So schrieb ich ihm: “first time cw qso ever”. Nun, das stimmt nicht ganz. Ich habe immerhin in den Anfangsjahren meiner Aktivitäten so gut wie fast fünf Telegrafie-Verbindungen getätigt. Aber nach dieser langen Abstinenz von fast einem viertel Jahrhundert kann man das durchaus vernachlässigen. Was sind schon fünf QSOs nach fast 30 Jahren Besitz einer Amateurfunklizenz?!?

Eigentlich war es nicht das erste QSO, denn zwei Tage zuvor versuchte ich mit DJ7YR auf 80m unter den schlechtesten Bedingungen ein CW QSO zustande zu bringen. Dies scheiterte jedoch an massiven Störungen aus nachbarschaftlichen TV-Geräten. Trotzdem hörten wir uns gegenseitig und DJ7YR bestätigte mir, dass er nach dem ihm von mir gegebenen Rapport ein vollständiges QSO loggt und mir über das DARC-Büro eine QSL-Karte senden möchte. Mögen sich hier die Meinungen teilen. Meine Meinung: zu einem QSO gehört der Anruf, der Rapport und mindestens eine Verabschiedung. Da das letztere fehlte kann ich diese Verbindung für mich nicht ganz als vollständig ansehen. Aber… wir hatten Kontakt, und DAS zählt! Danke Heinz!

Was bleibt nun übrig zu sagen?
CW macht Spaß, CW macht Freude, ich werde wieder dabei sein…. Und ich werde diese Betriebsart weiter missionieren. Danke an Louis EI8KI, hpe cuagn sn es vy 73!