You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
392 lines
13 KiB
TeX
392 lines
13 KiB
TeX
\documentclass[10pt,a4paper,twoside,parskip=full-]{scrbook}
|
|
\usepackage[T1]{fontenc}
|
|
\usepackage{fontspec}
|
|
\usepackage[ngerman]{babel}
|
|
\usepackage{color}
|
|
\usepackage{graphicx}
|
|
\usepackage{longtable}
|
|
\usepackage{subfig}
|
|
\usepackage{floatflt,epsfig}
|
|
\usepackage{nicefrac}
|
|
\usepackage{units}
|
|
\usepackage{keystroke}
|
|
\usepackage{pstricks}
|
|
\usepackage{pst-node}
|
|
\usepackage{rotating}
|
|
\usepackage{bbding}
|
|
\usepackage{tikz}
|
|
\usepackage{tikz-timing}
|
|
\usepackage{ccicons}
|
|
\usepackage{amsmath}
|
|
\usepackage{amssymb}
|
|
\usepackage{unicode-math, polyglossia}
|
|
|
|
|
|
%% PDF Meta Information und Links
|
|
\usepackage[
|
|
colorlinks=true,urlcolor=blue,linkcolor=black,
|
|
pdftitle={BJ-Keyer},
|
|
pdfsubject={An electronic morse keyer},
|
|
pdfauthor={Thomas 'Tom' Malkus, DL7BJ},
|
|
pdfkeywords={Software, Hardware, Electronic CW Keyer, Amateur Radio, Open Source, Open Hardware},
|
|
pdfcreator={Neovim \& LuaLaTeX(Linux)},
|
|
pdfproducer={LaTeX}]
|
|
{hyperref}
|
|
|
|
% Getestete und funktionierende Fonts.
|
|
% \setmainfont{Rosario} - Schöner, eleganter Font.
|
|
% \setmainfont{Roboto} - Schnörkelos
|
|
% \setmainfont{QTAntiquePost}
|
|
% \setmainfont{QTFloraline}
|
|
% \setmainfont{BaskervilleF}
|
|
% \setmainfont{EB Garamond} - ähnlich Rosario
|
|
|
|
\setmainfont{DejaVuSansMNerdFont-Regular}
|
|
\setsansfont{DejaVuSansMNerdFont-Regular}
|
|
% \setmathfont{SourceCodePro}
|
|
\setmonofont{CaskaydiaCoveNerdFont-Regular}
|
|
\urlstyle{same}
|
|
|
|
% \usepackage{placeins}
|
|
\definecolor{fond}{RGB}{240,240,240}
|
|
|
|
\begin{document}
|
|
\begin{titlepage}
|
|
\raggedright
|
|
\begin{figure}[h]
|
|
\centering
|
|
\hfill %
|
|
\subfloat{\includegraphics[scale=0.4]{../Pictures/dl7bj}}
|
|
\hfill %
|
|
\subfloat{\includegraphics[scale=0.75]{../Pictures/dl7bj-logo}}
|
|
\hfill %
|
|
\end{figure}
|
|
\huge
|
|
\vspace{2cm}
|
|
BJ-Keyer\\
|
|
Dokumentation \\
|
|
\small
|
|
ab Version 1.00 vom \today \\
|
|
Tom, DL7BJ \\
|
|
\vspace{0.1cm}
|
|
Mail \href{mailto:tom@dl7bj.de}{tom@dl7bj.de} \\
|
|
Site \url{https://isnix.de} \\
|
|
\vspace{2cm}
|
|
\normalsize
|
|
\end{titlepage}
|
|
|
|
|
|
\section*{Vorwort}
|
|
|
|
Was ist ein elektronischer Morsezeichengeber? Das ist ein Gerät, welches wir Funkamateure besser
|
|
unter dem Namen Morse-Keyer kennen. Kurzgesagt, ein Morse-Keyer erzeugt elektronisch Punkte, Striche
|
|
und Pausen. Während dies mit der Handtaste zum Morsen manuell gemacht werden muss, wird ein Morse-Keyer
|
|
in Verbindung mit Ein- oder Zweihebeltasten verwendet und erzeugt bei Betätigung die Punkte und Striche
|
|
sowie die Pausen selbständig.
|
|
|
|
Ist das neu?
|
|
|
|
Nein, Morse-Keyer gibt es schon sehr lange. Als Fertiggeräte, als Bausätze und auch nur als Bauanleitungen
|
|
in vielen verschiedenen Varianten. Etwas, das man quasi an jeder Straßenecke bekommt, in unterschiedlichen
|
|
Preisklassen.
|
|
|
|
Warum noch ein Morse-Keyer?
|
|
|
|
Einige der erhältlichen Morse-Keyer sind in großen Gehäusen untergebracht, mit vielen Funktionen, Abschluß für eine Tastatur, dutzende Speicher und LC-Display und kosten viel Geld. Andere sind sehr günstig, haben aber nur einen Anschluß für eine Taste. Wenn man nicht gerade der Contester und DX-Jäger ist, gerne mal diverse Tasten an mehr als einem Transceiver verwendet und weder Steuerung über den PC noch Anschluß für Tastaturen benötigt, findet fast nichts am Markt.
|
|
|
|
Deswegen der BJ-Keyer, einfach, simpel, klein und trotzdem können mehrere Tasten und 2 Transceiver angeschlossen werden. Alles, was ich nicht benötige, habe ich auch weggelassen. Wer also auf der Suche nach einem Morse-Keyer mit ganz vielen Funktionen ist, dem empfehle ich eher sich woanders umzuschauen.
|
|
|
|
Wer aber einen kleinen Keyer mit wenigen aber praktischen Funktionen sucht, sollte hier weiterlesen.
|
|
|
|
Alle Unterlagen, wie Dokumentation, Schaltpläne und Software - kurz gesagt das gesamte Werk mit allem was dazu gehört, unterliegt der Attribution-NonCommercial-ShareAlike 4.0 International \href{https://creativecommons.org/licenses/by-nc-sa/4.0/legalcode.de}{\ccbyncsa} Lizenz, wenn nicht anders angegeben.
|
|
|
|
Viel Spaß!
|
|
Tom, DL7BJ
|
|
|
|
% \newline
|
|
|
|
\renewcommand\contentsname{Inhalt}
|
|
\tableofcontents
|
|
|
|
\chapter{Funktionen}
|
|
\begin{itemize}
|
|
\item{BJ-Keyer Funktionsübersicht}
|
|
\begin{itemize}
|
|
\item{Iambic A und Iambic B Mode}
|
|
\item{Anschluß für Handtaste und Paddle}
|
|
\item{Ausgang für Key-Eingang TRX}
|
|
\item{Ausgang für PTT}
|
|
\item{Stromversorgung 7-15V}
|
|
\item{Integrierter Lautsprecher für Mithörton}
|
|
\item{Mithörton als Sinussignal}
|
|
\end{itemize}
|
|
\end{itemize}
|
|
|
|
\chapter{Hinweise zur Dokumentation}
|
|
|
|
In dieser Dokumentation werden diverse gleichbleibende Darstellungsweisen verwendet. Dies erleichtert Dir das Verständnis der Bedeutung. Texte, die auf dem Display erscheinen, werden in der Bedienungsanleitung so \texttt{dargestellt}. Quellcode wird in einer farbigen Code-Darstellung eingebunden.
|
|
|
|
\chapter{Grundlagen}
|
|
|
|
\section{Betriebsarten eines Morse-Keyers}
|
|
|
|
\subsection{Zeitverhalten}
|
|
|
|
\begin{figure}[!ht]
|
|
\begin{tikztimingtable}[
|
|
timing/slope=0,
|
|
timing/coldist=2pt,
|
|
xscale=5.0,yscale=3.1,
|
|
semithick
|
|
]
|
|
%% Timing
|
|
DIT\ & LH 1{2C} \\
|
|
DAH\ & 0.5LLHH 1{2C} \\
|
|
Mode A\ & LHLHH 1{2C} \\
|
|
\extracode
|
|
\makeatletter
|
|
\begin{pgfonlayer}{background}
|
|
\begin{scope}[gray,semitransparent,semithick]
|
|
\horlines{}
|
|
\vertlines{1,...,7}
|
|
\end{scope}
|
|
\node[anchor=south east,inner sep=0pt]
|
|
at (10,-4) {\tiny Output};
|
|
\end{pgfonlayer}
|
|
\endextracode
|
|
\end{tikztimingtable}
|
|
\caption{Diagramm Mode A}
|
|
\end{figure}
|
|
|
|
\begin{figure}[!ht]
|
|
\begin{tikztimingtable}[
|
|
timing/slope=0,
|
|
timing/coldist=2pt,
|
|
xscale=5.0,yscale=3.1,
|
|
semithick
|
|
]
|
|
%% Timing
|
|
DIT\ & LH 1{2C} \\
|
|
DAH\ & 0.5LLHH 1{2C} \\
|
|
Mode B\ & LHLHHLH 1{2C} \\
|
|
\extracode
|
|
\makeatletter
|
|
\begin{pgfonlayer}{background}
|
|
\begin{scope}[gray,semitransparent,semithick]
|
|
\horlines{}
|
|
\vertlines{1,...,7}
|
|
\end{scope}
|
|
\node[anchor=south east,inner sep=0pt]
|
|
at (10,-4) {\tiny Output};
|
|
\end{pgfonlayer}
|
|
\end{tikztimingtable}
|
|
|
|
\caption{Diagramm Mode B}
|
|
\end{figure}
|
|
|
|
|
|
\chapter{Bedienung}
|
|
|
|
\section{Tastaturbelegung}
|
|
|
|
\subsection{Übersicht}
|
|
|
|
|
|
|
|
\chapter{Schaltung}
|
|
|
|
\section{Beschreibung}
|
|
|
|
\section{Schaltplan}
|
|
|
|
% \begin{figure}
|
|
% \centering
|
|
% \includegraphics[scale=0.7, angle=90]{../CAD/Schematic-Page-1}
|
|
% \caption{Mikrocontroller}
|
|
% \end{figure}
|
|
|
|
% \begin{figure}
|
|
% \centering
|
|
% \includegraphics[scale=0.7, angle=90]{../CAD/Schematic-Page-2}
|
|
% \caption{Filter \& NF-Verstärker}
|
|
% \end{figure}
|
|
|
|
% \begin{figure}
|
|
% \centering
|
|
% \includegraphics[scale=0.7, angle=90]{../CAD/Schematic-Page-3}
|
|
% \caption{Spannungsversorgung}
|
|
% \end{figure}
|
|
|
|
% \begin{figure}
|
|
% \centering
|
|
% \includegraphics[scale=0.7, angle=90]{../CAD/Schematic-Page-4}
|
|
% \caption{Zusatzplatine mit Klinkenbuchsen}
|
|
% \end{figure}
|
|
|
|
\begin{table}[!ht]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{|p{1cm}|p{5cm}|p{5cm}|l|}
|
|
Prg. & Beschreibung & Wertebereich & Standard \\ \hline
|
|
\end{tabular}
|
|
\caption{Programmierpunkte Teil 1}
|
|
\end{table}
|
|
|
|
\chapter{Beschreibung der Hardware}
|
|
\begin{table}[!ht]
|
|
\centering
|
|
\small
|
|
\begin{tabular}{|l|l|l|l|}
|
|
Klemme & Funktion & Beschreibung & Prg.-Punkt\\ \hline
|
|
\end{tabular}
|
|
\caption{Klemmenbelegung}
|
|
\end{table}
|
|
|
|
\chapter{Beschreibung der Software}
|
|
\section{Timer 1}
|
|
|
|
Der Timer 1 ist ein 16Bit Timer. Dieser wird für die Erzeugung von 2 Zeiten verwendet.
|
|
Der Timer löst jeweils beim Erreichen der Zeit einen Interrupt aus. Die Interrupts werden
|
|
alle 1ms und 20ms ausgelöst. So können einfach Interrupt gesteuerte Zeiten verwendet werden.
|
|
|
|
|
|
\subsection{Timer einstellen}
|
|
|
|
\begin{align}
|
|
f_{OCnA} = \frac{f_{clk\_I/O}}{2 \cdot N \cdot (1+OCRnA)}
|
|
\end{align}
|
|
|
|
|
|
\section{Sinus Mithörton durch Pulsweitenmodulation}
|
|
|
|
Der BJ-Keyer erzeugt einen Mithörton mit Sinuskurve, statt dem vielfach verwendeten Rechtecksignal.
|
|
Der Klang eines Sinussignals ist angenehmer. Um mit dem Mikrocontroller ein Sinussignal zu erzeugen,
|
|
wird die Pulsweitenmodulation verwendet.
|
|
|
|
\subsection{Grundlagen}
|
|
|
|
Die Pulsweitenmodulation, kurz PWM genannt, ist eine digitale Modulationsart, bei der eine Spannung
|
|
zwischen zwei Werten wechselt.
|
|
|
|
\begin{figure}[!ht]
|
|
\centering
|
|
\begin{tikztimingtable}[timing/slope=.005, yscale=3]
|
|
\ & 4L N(A1) 4H N(A2) 5L N(A3) 4H N(A4) 8L\\
|
|
\extracode
|
|
\begin{pgfonlayer}{background}
|
|
\begin{scope}[gray,semitransparent,semithick]
|
|
\vertlines{4,13}
|
|
\end{scope}
|
|
\end{pgfonlayer}
|
|
\draw [<->] (A1|-row1.mid) --node[below]{\tiny Duty Cycle} (A2|-row1.mid);
|
|
\draw [<->] (4,1.5) --node[below]{\tiny Period} (13,1.5);
|
|
\end{tikztimingtable}
|
|
\caption{PWM Ausgangssignal}
|
|
\end{figure}
|
|
|
|
Mit einer konstanten Frequenz wird ein Rechteckimpuls moduliert, bei
|
|
dem die Weite variert. Das Verhältnis zwischen Impuls und Pause wird Tastgrad (Duty Cycle) genannt.
|
|
|
|
Bei einer Rechteckschwingung gilt für den Tastgrad D:
|
|
\begin{align}
|
|
D = \frac{\tau}{T}
|
|
\end{align}
|
|
mit $\tau$ als Impulsdauer und T als Periodendauer. Mit einem Tastgrad D = 0,5 = 50\% würde ein
|
|
symmetrischer Impuls erzeugt werden. Der Mikrocontroller schaltet den Ausgang zwischen $V_{SS}$ und $V_{DD}$.
|
|
|
|
Die resultierende Ausgangsspannung berechnet sich wie folgt:
|
|
\begin{align}
|
|
U_{Out} = \frac{\tau}{T} \cdot U_{In}
|
|
\end{align}
|
|
Dabei ist $U_{In}$ gleich $V_{SS}$. Bei einem Tastgrad von 50\% und einer Spannung $V_{SS}$ von 5V
|
|
beträgt $U_{Out}$ = 2,5V.
|
|
|
|
\subsubsection{Pulsweitenmodulation}
|
|
|
|
Das PWM Signal wird mit einem Timer erzeugt. Um die Frequenz des PWM Signals zu verändern, wird
|
|
die Taktrate und der obere Grenzwert des Zählers eines Timers verändert. Eine Änderung des Output-
|
|
Compare-Registers ändert das Pausenverhältnis. Der PWM Ausgang des ATMega328 ist High bis der Wert
|
|
im zugehörigen OCR erreicht ist und Low bis der obere Zählwert erreicht wird. Das ist der Fast-PWM
|
|
Mode des ATMega328.
|
|
|
|
Für die Erzeugung des Sinussignals wird der Timer 2 im Fast-PWM Mode verwendet. Der PWM Ausgang des
|
|
Timers 2 ist OC2A. Die Taktquelle des Timers 2 wird eingestellt und der PWM Mode ausgewählt, so dass
|
|
OC2A geschaltet wird. Weiter wird der Overflow-Interrupt aktiviert.
|
|
|
|
Der maximale Wert für FastPWM berechnet sich wie folgt:
|
|
|
|
\begin{align}
|
|
f = \frac{f_{Quarz}}{2 \cdot 1 \cdot 256}
|
|
\end{align}
|
|
|
|
Der maximale Wert bei einem Quarz mit 8MHz und der minimalen Vorteilung von 1 beträgt somit:
|
|
|
|
\begin{align}
|
|
\frac{8.000000Hz}{2 \cdot 1 \cdot 256} = 15.625Hz
|
|
\end{align}
|
|
|
|
15625Hz entspricht einer Periodendauer von 64µs.
|
|
|
|
Diese 15.625Hz wären die Samplerate. Für einen Sinuston von 800Hz bei 256 Schritten für die Einzelwerte
|
|
der PWM wären aber 800 \cdot 256 = 204.800Hz erforderlich. Die einzige Möglichkeit, mit dieser niedrigen
|
|
Samplerate ist die Verringerung der Schritte. Auf jeden Fall wird die Pulsbreitenänderung im hörbaren Bereich
|
|
liegen, dies soll das RLC Filter am Ausgang des Controllers bereinigen.
|
|
|
|
Bei 16 Schritten würde eine Samplerate von 800Hz \cdot 16 = 12.800Hz erforderlich sein.
|
|
Da ich 800Hz als Mithörton zu hoch empfinde und damit die PWM und die Nachladefrequenz
|
|
möglichst synchron laufen, habe ich 32 Schritte gewählt. Dies führt dann dazu, dass bei
|
|
32 Teilschritten der Sinusperiode pro Teilschritt 4 PWM Impulse erzeugt werden. Damit ist die Nachladefrequenz
|
|
und die PWM Frequenz synchron und es ergibt sich ein Mithörton mit einer Frequenz von 488.28Hz.
|
|
|
|
|
|
\begin{align}
|
|
\frac{\frac{15.625}{32}} = 488.28Hz
|
|
\end{align}
|
|
|
|
\subsection{Sinustabelle}
|
|
|
|
Über den Overflow-Interrupt vom Timer 2 wird der jeweils nächste Wert einer Sinustabelle in OCR2A
|
|
geladen. Die Sinustabelle wurde mit einem einfachen Perl-Script erzeugt und wird als Include Datei
|
|
eingebunden. Bei jedem Interrupt wird der nächste Wert nach OCR2A geladen. Die Sinustabelle hat 32
|
|
Werte. Die Frequenz für das Sinussignal berechnet sich wie folgt:
|
|
|
|
\begin{align}
|
|
f = \frac{Samplerate}{32}
|
|
\end{align}
|
|
|
|
Jeder Eintrag der Sinustabelle bestimmt das Pausenverhältnis von Timer 2. Jetzt müssen die 32 Werte
|
|
zum richtigen Zeitpunkt in OCR2A geladen werden. Dies übernimmt der Timer 0. Timer 0 ist ein 8-Bit
|
|
Timer und der nötige Werte wären \begin{align}\frac{8.000000Hz}{15625Hz} = 512\end{align}.
|
|
|
|
|
|
\listoftables
|
|
\listoffigures
|
|
\appendix
|
|
\chapter{Entwicklungsumgebung}
|
|
|
|
Als Entwicklungsumgebung verwende ich mehrere, ausschließlich kostenfreie und überwiegend Open Source Programme:
|
|
|
|
\begin{itemize}
|
|
\item{Editor vim \& neovim}
|
|
\item{Shell bash}
|
|
\item{Filemanager mc}
|
|
\item{Terminalmultiplexer tmux}
|
|
\item{RS232 Terminal minicom}
|
|
\item{Dokumentation lualatex}
|
|
\item{PDF Reader zathura}
|
|
\item{Compiler avr-gcc}
|
|
\item{Flashprogrammer avrdude}
|
|
\item{Layout \& Schaltplan KiCad 7.xx}
|
|
\item{Bohrschablonen FrontDesigner}
|
|
\item{Softwareverwaltung Git}
|
|
\item{Softwaredokumentation Doxygen}
|
|
\item{Website Nginx \& Dokuwiki}
|
|
\item{Website Sourcecode Gitea}
|
|
\item{Betriebssystem Entwicklung MX-Linux}
|
|
\item{Betriebssystem Webserver Debian}
|
|
\end{itemize}
|
|
|
|
Wie man sieht, sind das bis auf die CAD Anwendungen und dem PDF Reader alles Anwendungen für die Textconsole. Ich finde, richtig produktiv kann man nur mit der Textconsole arbeiten ;-)
|
|
|
|
\end{document}
|