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.
BJ-Keyer/Documents/Dokumentation BJ-Keyer.tex

688 lines
34 KiB
TeX

\documentclass[
11pt,
a4paper,
% twoside,
parskip=full-,
bibliography=totoc,
listof=totoc,
listof=entryprefix,
toc=sectionentrywithdots
]{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{pgfplots}
\usepackage{ccicons}
\usepackage{amsmath}
\usepackage{amssymb}
\usepackage{amsfonts}
\usepackage{siunitx}
\usepackage{verbatimbox}
%\usepackage{unicode-math, polyglossia}
\usepackage{lmodern}
\usepackage{unicode-math}
% Settings
\pgfplotsset{compat=1.17}
\renewcaptionname{ngerman}{\contentsname}{Inhalt}
\renewcaptionname{ngerman}{\listfigurename}{Abbildungen}
\renewcaptionname{ngerman}{\listtablename}{Tabellen}
\renewcaptionname{ngerman}{\figurename}{Abb.}
\renewcaptionname{ngerman}{\tablename}{Tab.}
\BeforeStartingTOC[lof]{\def\autodot{:}}
\BeforeStartingTOC[lot]{\def\autodot{:}}
\sisetup{locale = DE}
%% 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{SauceCodeProNerdFontPropo-Regular}
% \setsansfont{SauceCodeProNerdFontPropo-Regular}
% \setmathfont{SourceCodePro}
% \setmonofont{SauceCodeProNerdFontMono-Regular}
% \urlstyle{same}
\defaultfontfeatures{Scale=MatchLowercase}
\setmainfont{TeX Gyre Pagella}
% \setmathfont{TeX Gyre Pagella Math}
\setmathfont{Asana Math}
% \usepackage{placeins}
\definecolor{fond}{RGB}{240,240,240}
\begin{document}
\newcommand{\step}{.5}
\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.03 vom \today \\
Tom, DL7BJ \\
\vspace{0.1cm}
Mail \href{mailto:tom@dl7bj.de}{tom@dl7bj.de} \\
Site \url{https://isnix.de} \\
\vspace{2cm}
\normalsize
\dictum{}
\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, Anschluß für eine PC Tastatur, dutzende Speicher und LC-Display und kosten viel Geld. Andere sind sehr günstig, haben aber nur einen Anschluß für eine Taste. Wer 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, sich woanders umzuschauen.
Wer aber einen kleinen stationären 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 im oder beim Code nicht anders angegeben.
Viel Spaß!
Tom, DL7BJ
% \newline
\tableofcontents
\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{Funktionsübersicht}
%%\begin{itemize}
%%\item{BJ-Keyer Funktionsübersicht}
\begin{itemize}
\item{Transceiver 1 oder 2 oder beide wählbar}
\item{Iambic A, Iambic B und Ultimatic Mode}
\item{Mithörton als Sinus, abschaltbar}
\item{Anzeige der Geschwindigkeit in WpM oder BpM}
\item{linkes/rechts Paddle vertauschen (Links- oder Rechtshänder)}
\item{Punkt/Strich Verhältnis von 1:2 bis 1:4 einstellbar}
\item{Punkt/Strich Gewichtung einstellbar}
\item{Punkt/Strich Speicher abschaltbar (Iambic Modes)}
\item{Frequenz des Mithörtons von 300-1000Hz einstellbar}
\item{Anstieg (Attack) des Mithörtons einstellbar (kein Klicken im LS)}
\item{Entprellzeit für Handtasten einstellbar}
\item{Anschluß für 3 Handtasten und 3 Paddle}
\item{Ausgänge für die Ansteuerung von 2 Transceivern}
\item{optionales Tastenfeld für Speicher und Transceiver Umschaltung}
\item{Speicherprogrammierung über USB}
\item{Stromversorgung 7-15V}
\item{Integrierter Lautsprecher für Mithörton}
%% \end{itemize}
\end{itemize}
\chapter{Grundlagen}
\section{Betriebsarten eines Morse-Keyers}
Ein Morse-Keyer, die Tastelektronik, hat verschiedene Betriebsarten, die sich in der automatischen Erzeugung der Zeichen unterscheiden. Je nach Betriebsart gibt es einen Punkt- und Strichspeicher oder die direkte Erzeugung der Zeichen.
Bei einem zweiarmigen Paddle erzeugt ein Paddle (genauer die Tastelektronik) die Punkte und das andere Paddle die Striche. Diese Art von Paddle werden auch als Iambic oder Squeeze Paddle bezeichnet.
\subsection{Iambic A}
Im Iambic Mode A wird wird immer nur das Zeichen gegeben, dessen Paddle gerade betätigt wird. Wird das Paddle zu früh losgelassen, ergänzt die Tastelektronik das Zeichen auf die erforderliche Länge. Es wird kein weiteres Zeichen gesendet. Werden beide Paddle gleichzeitig gedrückt gehalten, ergibt sich eine Punkt-Strich-Folge. Wird der Kontakt wieder geöffnet, stoppt die Punkt-Strich-Folge. Es wird nur das Zeichen mit der erforderlichen Länge gesendet, welches beim Öffnen der Kontakte gerade gesendet wurde.
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
DIT\ & lhhhhhhhhhhlllll \\
DAH\ & 0.25llhhhhhhhhh0.75hlllll \\
Mode A\ & lhlhhhlhlhhhllll \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\node[anchor=south east,inner sep=0pt]
at (9,-4) {\tiny Ausgabe};
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Iambic Mode A}
\end{figure}
\subsection{Iambic B}
Im Iambic Mode B verhält es sich im Prinzip wie im Iambic Mode A, nur dass beim gleichzeitigen Öffnen der Kontakte das entgegengesetzte Zeichen des zuletzt geöffneten Kontakts angefügt wird.
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
DIT\ & lhhhhhhhhhhlllll \\
DAH\ & 0.25llhhhhhhhhh0.75hlllll \\
Mode B\ & lhlhhhlhlhhhlhll \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\node[anchor=south east,inner sep=0pt]
at (9,-4) {\tiny Ausgabe};
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Iambic Mode B}
\end{figure}
Wie im Diagramm zu sehen ist, wird erst das DIT Paddle betätigt, dann das DAH Paddle, es sind also beide Paddle gleichzeitig betätigt. Es wird eine Folge von DIT und DAH, beginnend mit einem DIT gegeben, solange beide Paddle betätigt werden. Werden die Kontakte gleichzeitig gelöst, wird das entgegengesetzte Zeichen des zuletzt ausgebenen Zeichens, angefügt. Hier ist das ein DIT.
\subsection{Ultimatic}
Beim Ultimatic Mode wird im Gegensatz zu den Iambic Modes bei der gleichzeitigen Betätigung beider Paddles ein DIT oder DAH und eine Folge des jeweiligen entgegengesetzten Zeichens erzeugt. Es wird zuerst das Zeichen erzeugt, dessen Paddle zuerst betätigt wurde. Im Anschluß wird kontinuierlich das Zeichen erzeugt, dessen Paddle zuletzt betätigt wurde.
Werden die Paddle gleichzeitig losgelassen, stoppt die Aussendung der Zeichen ohne die Ausgabe eines weiteren Zeichens wie beim Iambic Mode B. Wird ein Paddle losgelassen, wird die Aussendung mit dem noch betätigten Paddle fortgesetzt. Es kann somit eine ganze Folge von dem entgegengesetzten Zeichen in den Zeichenstrom des zuerst betätigten Paddles eingefügt werden. Damit können mehr Zeichen mit der Squeeze Technik gesendet werden, als es bei den Iambic Modes möglich ist.
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
DIT\ & lhhhhhhhhhhhllll \\
DAH\ & 0.25llhhhhhhh0.75hlllllll \\
Ultimatic\ & lhlhhhlhhhlhllll \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\node[anchor=south east,inner sep=0pt]
at (10,-4) {\tiny Ausgabe};
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Ultimatic Mode}
\end{figure}
Im Diagramm ist dieses Verhalten am Beispiel des Buchstabens P dargestellt. Zuerst wird das DIT Paddle betätigt, es wird ein DIT erzeugt. Noch während das DIT gesendet wird, kann das DAH Paddle betätigt werden und obwohl das DIT Paddle gehalten wird, erfolgt eine Aussendung von Strichen, so lange, wie das DAH Paddle gehalten wird. Wird der Kontakt nach zwei Strichen geöffnet, wird ein DIT gesendet, weil die DIT Taste immer noch gehalten wird. Nach dem Öffnen der Kontakte beide Paddles stoppt die Sendung sofort.
\subsection{Gewichtung}
Mit der Gewichtung der einzelnen Symbole kann die Länge von Punkten und Strichen verändert werden. Die Gewichtung verändert nicht die Gebegeschwindigkeit, weil im gleichen Maße einer Verkürzung von Punkten und Strichen, die Pausen verlängert werden.
Ein Wert kleiner 50 verringert die Gewichtung, ein Wert größer 50 erhöht die Gewichtung. Bei der Verringerung werden Punkte und Striche kürzer, die Pausen länger. Bei der Erhöhung werden Punkte und Striche länger, aber die Pausen kürzer.
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
$<$50\ & ll0.75h1.25l0.75hhh1.25l0.75h1.25l \\
Normal\ & llhlhhhlhll \\
$>$50\ & ll1.25h0.75l1.25hhh0.75l1.25h0.75l \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Gewichtung}
\end{figure}
\subsection{Punkt/Strich Ratio}
Das Ratio gibt das Verhältnis der Punktlänge zur Strichlänge an. Beim Standard Ratio von 1:3 ist ein Strich genau 3 Punkte lang. Vermindert sich das Ratio zu 1:2 wird der Strich um einen Punkt kürzer. Erhöht sich das Ratio zu 1:4, wird der Strich um einen Punkt länger. Die Länge der Pausen und der Punkte verändert sich nicht.
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
1:2\ & llhl0.66h0.66h0.66hlhl \\
Normal 1:3\ & llhlhhhlhll \\
1:4\ & llhl1.33h1.33h1.33hlhl \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Punkt/Strich Ratio}
\end{figure}
\subsection{Punkt/Strich Speicher}
Der Punkt/Strich Speicher dient dazu, dass der Keyer sich die Betätigung eines Paddles merkt, während ein Symbol ausgegeben wird. Nach Abschluss des Symbols wird dann das gemerkte Symbol ausgegeben.
Ein Beispiel mit dem Buchstaben Q:
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
Ausgabe ohne Speicher\ & lhhhlhhhlhlhhhl \\
Paddle ohne Speicher\ & lhlllhlllhlhllll \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\node[anchor=south east,inner sep=0pt]
at (0.85,-1.5) {\small R};
\node[anchor=south east,inner sep=0pt]
at (2.85,-1.5) {\small R};
\node[anchor=south east,inner sep=0pt]
at (4.85,-1.5) {\small L};
\node[anchor=south east,inner sep=0pt]
at (5.85,-1.5) {\small R};
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Punkt/Strich Speicher abgeschaltet}
\end{figure}
Das rechte Paddle wird betätigt und gehalten, bis der zweite Strich (Dah) ausgegeben wird. Am Ende des zweiten Strichs wird das linke Paddle betätigt und es wird ein Punkt ausgegeben. Das linke Paddle wird wieder losgelassen und das rechte Paddle betätigt, für den letzten Strich vom Zeichen Q. Ohne Punkt/Strich Speicher müssen die Betätigungen der Paddles synchron zur Ausgabe der Zeichen sein.
Wird der Punkt/Strich Speicher verwendet ist das anders. Zuerst wird wieder das rechte Paddle betätigt und gehalten. Wenn nun aber während der Ausgabe des zweiten Strichs kurz das linke Paddle für einen Punkt (Dit) betätigt wird, so merkt sich der Keyer dies und gibt den Punkt nach der Ausgabe des zweiten Strichs aus, unter Beachtung des Timings, also der korrekten Punkt- und Strichlängen sowie Einhaltung der Pausen zwischen den Symbolen. Das rechte Paddle kann man während der Ausgabe des Punktes loslassen, da der Speicher aktiv ist und der Keyer sich auch den Strich gemerkt hat während der Punkt ausgegeben wird und diesen noch anfügt.
\begin{figure}[!ht]
\begin{tikztimingtable}[
timing/slope=0,
timing/coldist=0.25pt,
xscale=5.0,yscale=3.1,
thick
]
%% Timing
Ausgabe mit Speicher\ & lhhhlhhhlhlhhhl \\
Paddle mit Speicher\ & lhlllhlhlhllllll \\
\extracode
\makeatletter
\begin{pgfonlayer}{background}
\begin{scope}[gray,semitransparent,semithick]
\horlines{}
\vertlines{0,0.5,...,8}
\end{scope}
\node[anchor=south east,inner sep=0pt]
at (0.85,-1.5) {\small R};
\node[anchor=south east,inner sep=0pt]
at (2.85,-1.5) {\small R};
\node[anchor=south east,inner sep=0pt]
at (3.85,-1.5) {\small L};
\node[anchor=south east,inner sep=0pt]
at (4.85,-1.5) {\small R};
\end{pgfonlayer}
\end{tikztimingtable}
\caption{Diagramm Punkt/Strich Speicher eingeschaltet}
\end{figure}
Mit dem Punkt/Strich Speicher können einige Zeichen einfacher gegeben werden, weil das Timing der Betätigung der Paddles unkritischer ist.
\subsection{Handtaste}
Die Handtaste wird vom Keyer nicht beeinflusst. Wird die Taste betätigt, wird sofort der Ausgang des Transceivers geschaltet. Es gibt für die Handtastenanschlüsse eine gemeinsame Entprellzeit, die in den Einstellungen bestimmt werden kann. Ich hatte beim Test Handtasten, die geprellt haben, d.h. während dem Betätigen der Taste wurden mehrere Impulse am Port registriert, weil die Taste langsamer schaltet, als der Port vom Controller geprüft wird. Um dies zu verhindern ist eine Einstellung möglich, um einen Impulswechsel am Port der Handtaste für einige Millisekunden nicht zu registrieren.
Die Anschlüsse für eine Handtaste sind nicht nur für die normale Handtaste (Straight Key, Klopftaste), sondern auch für eine Cootie oder Sideswipber und einen mechanischen Bug.
\chapter{Die Bedienung}
\section{Bedienelemente}
Als Bedienelemente stehen ein Drehencoder für diverse Einstellungen und ein Potentiometer für die Lautstärke des Mithörtons zur Verfügung. Optional kann ein Tastenfeld mit max. 5 Tastern für Zusatzfunktion wie Textspeicher angeschlossen werden. Zur Ausgabe von eingestellten Parametern wird ein 0,96$"$ OLED Display mit 128x64 Pixeln verwendet.
\section{Menuestruktur}
Das Menue ist von der Struktur sehr einfach gehalten, damit auf dem OLED Display auch größere Schriften verwendet werden können. So gibt es für jede Einstellung einen eigenen Menuepunkt ohne weitere Untermenues. Um in das Menue für die Einstellungen zu gelangen, ist der Drehencoder einmal kurz zu drücken.
Parameter, die ausgewählt, bzw. ein- oder ausgeschaltet werden können, werden auf dem Display mit eckigen Klammern dargestellt, wenn diese gewählt oder eingeschaltet sind.
Parameter, bei denen Zahlenwerte eingestellt werden, können mit dem Drehencoder gewählt werden.
\section{Einstellungen}
\subsection{Transceiversteuerung}
Es gibt für die Einstellung der Transceiversteuerung zwei Menuepunkte. Um diese zu ändern, ist der Drehencoder einmal kurz zu drücken. Die Einstellungen der Transceiversteuerung sind Punkt 1 und 2 im Menue.
Um den Transceiver 1 für die Ausgabe von Zeichen auszuwählen, ist mit dem Drehencoder der Punkt 1 zu wählen und dann muss dieser kurz gedrückt werden. Möchte man die Einstellung speichern und das Menue verlassen, ist der Drehencoder lang zu drücken.
Obiges gilt analog für den Menuepunkt 2, die Einstellung für den Transceiver 2.
Es können beide Transceiver für die Ausgabe gewählt werden, bei der Tastung werden beide Ausgänge gleichzeitig angesteuert, wenn dies der Fall ist.
\subsection{Mithörton}
Für den Mithörton gibt es ebenfalls zwei Menuepunkte, 3 und 4. Mit dem Menuepunkt 3 wird der Ton ein- und ausgeschaltet. Der Menuepunkt 4 dient der Einstellung der Frequenz des Mithörtons von 400-1000Hz.
Um den Ton ein- oder auszuschalten, ist mit dem Drehencoder der Menuepunkt 3 auszuwählen und mit einem kurzen Druck auf den Drehencoder wird der Ton ein- oder ausgeschaltet. Zum Speichern muss der Drehencoder lang gedrückt werden.
Die Frequenz wird mit dem Menuepunkt 4 eingestellt, der mit dem Drehencoder ausgewählt wird. Mit einem kurzen Druck auf den Drehencoder kann die Frequenz in Schritten von 10Hz eingestellt werden. Die Funktion zum Ändern der Frequenz (das ist bei allen Zahlenwerten so) wird oben rechts im Display vor der Menuenummer statt dem - ein * angezeigt. Mit einem langen Druck auf den Drehencoder kann diese Einstellung wieder verlassen werden und mit einem anschließenden langen Druck auf den Drehencoder werden die neuen Werte gespeichert.
\subsection{Iambic und Ultimatic Mode}
Für die Betriebsarten des Keyers gibt es drei Menuepunkte, die zum Einstellen der Modi dienen. Es kann Iambic A, Iambic B oder Ultimatic als Mode ausgewählt werden. Dies sind die Menuepunkte 5 bis 7.
Die Unterschiede der Modi sind in dem Grundlagenkapitel erläutert. Um einen der Modi zu aktivieren, ist dieser mit dem Drehencoder auszuwählen. Ein kurzer Druck auf den Drehencoder aktiviert den jeweiligen Mode, dies wird durch die eckigen Klammern dargestellt.
\subsection{Punkt/Strich Speicher}
Der Punkt/Strich Speicher wird mit dem Menuepunkt 8 ein- und ausgeschaltet. Es erscheint im Display "Memory". Wenn der Punkt/Strich Speicher aktiviert ist, dann wird dies durch "[Memory]" angezeigt. Ein kurzer Druck auf den Drehencoder ändert die Einstellung.
\subsection{Links- und Rechtshänder}
Mit diesem Menuepunkt kann die Funktion der Paddles umgekehrt werden. Normalerweise ist auf dem linken Paddle der Punkt, auf dem rechten Paddle der Strich. Möchte man dies anders herum haben, kann dies mit diesem Menuepunkt durch einen kurzen Druck auf den Drehencoder umgeschaltet werden. Die jeweilige Einstellung wird im Display symbolisch dargestellt.
\subsection{Punkt/Strich Verhältnis}
Mit dem Menuepunkt 9 wird das Punkt/Strich Verhältnis oder Ratio eingestellt. Dieses läßt sich in einem Bereich von 1:2 bis 1:4 einstellen. Mit einem kurzen Druck auf den Drehencoder wird oben rechts ein "*" angezeigt und mit dem Drehencoder kann der Wert verändert werden. Ein langer Druck auf den Drehencoder übernimmt die Einstellung.
\subsection{Gewichtung}
\subsection{Geschwindigkeitsanzeige}
\subsection{Anstiegszeit Mithörton}
\subsection{Entprellung für Handtasten}
\section{Einstellen der Geschwindigkeit}
\section{Lautstärke Mithörton}
\chapter{Die Schaltung}
\section{Spannungsversorgung}
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.4]{../Pictures/Spannungsversorgung.jpg}
\caption{Schaltung Spannungsversorgung}
\end{figure}
\section{Mikrocontroller ATMega328P}
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.5]{../Pictures/Mikrocontroller.jpg}
\caption{Schaltung Mikrocontroller}
\end{figure}
\section{USB Controller FT230}
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.6]{../Pictures/USB.jpg}
\caption{Schaltung USB}
\end{figure}
\section{Class D NF-Verstärker}
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.6]{../Pictures/ClassD-Verstärker.jpg}
\caption{Schaltung ClassD Verstärker}
\end{figure}
\subsection{Cauer-Filter}
\section{Class D NF-Verstärker}
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.6]{../Pictures/Cauer-Filter.jpg}
\caption{Schaltung Cauer Filter}
\end{figure}
\section{Beschreibung}
\chapter{Die Software}
\section{Timer 2}
Der Timer 2 läuft in der Betriebsart Pulsweitenmodulation und erzeugt das PWM Signal für den Mithörton.
\section{Timer 1}
Mit dem Timer 1 werden die Zeiten für die Nachladewerte für Timer 2 zur Erzeugung des Sinussignals für den Mithörton erzeugt.
\section{Timer 0}
Der Timer 0 läuft mit einem Takt von einer Millisekunde. Im Timer Interrupt werden 3 Zähler verwendet, so dass Zeiten von 1ms, 10ms und 20ms für diverse Abläufe zur Verfügung stehen.
\subsection{Timer einstellen}
\begin{align}
f_{OCnA} = \frac{f_{clk\_I/O}}{2 \cdot \mathbb{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=5, xscale=1.5]
\ & 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{Pulswellenmodulation}
\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. Je länger die Einschaltzeit ist, desto höher ist die effektive Spannung
des erzeugten Rechtecksignals, bis zu $V_{SS}$ bei einem Tastgrad von 100\%.
\subsubsection{Pulsweitenmodulation}
Das PWM Signal wird mit Timer 2 des ATMega328P erzeugt. Das PWM Signal wird an PortB Pin 3, OC2A ausgegeben.
Es wird der Fast PWM Mode 7 des Controllers verwendet, dabei ist der obere Wert des Timers der Wert
im Register OCR2A. Der Ausgang OC2A wird auf den Ausgangswert Toggle konfiguriert, d.h. jedes Mal, wenn der
Timer 2 den Wert in OCR2A erreicht, wird der Port umgeschaltet. Es wird ein Rechteck-Signal an PB3 erzeugt,
dessen Tastgrad durch OCR2A eingestellt wird. Als Taktquelle wird der CPU Takt verwendet. Dies bedeutet,
der Timer 2 läuft ohne einen Vorteiler.
Der maximale Wert für FastPWM berechnet sich wie folgt:
\begin{align}
f = \frac{f_{Quarz}}{\mathbb{N} \cdot 256}
\end{align}
Der maximale Wert bei einem Quarz mit 16MHz und der minimalen Vorteilung von 1 beträgt somit:
\begin{align}
\frac{16MHz}{1 \cdot 256} = 62,5\si{\kilo\Hz}
\end{align}
Am Ausgang von PB3 liegt so bei einem Tastgrad von 50\% ein symmetrisches Rechtecksignal mit 62,5\si{\kilo\Hz} an. Der Effektivwert beträgt bei einer Betriebsspannung $V_{SS}$ von 5V = 2,5V. Die 256-1 sind der maximale Wert (256 Werte von 0-255), den OCR2A haben kann (Timer 2 ist ein 8 Bit Timer).
\begin{figure}[!ht]
\centering
\begin{tikzpicture}[yscale=1.0]
\begin{axis}[
width=10cm,
height=4cm,
x axis line style={-stealth},
y axis line style={-stealth},
xticklabels={},
ymax = 6,xmax=7.5,
axis lines*=center,
ytick={2.5,5},
xlabel={Zeit $\rightarrow$},
ylabel={+5V $\rightarrow$},
xlabel near ticks,
ylabel near ticks]
\addplot+[thick,mark=none,const plot]
coordinates{(0,0) (0,5) (1,0) (2,5) (3,0) (4,5) (5,0) (6,5) (7,0)};
\end{axis}
\end{tikzpicture}
\caption{Symmetrisches Rechtecksignal an PB3}
\end{figure}
Das ist aber nicht das Ziel, da der Keyer ein sinusförmiges Signal ausgeben soll. Um das zu erreichen, muss der Effektivwert der Rechteckspannung an PB3 veränderbar sein. Dies erreicht man durch eine Änderung des Tastgrades. Nun kann ein Mikrocontroller an einem digitalen Ausgangsport keinen Sinus erzeugen, einzig eine Treppe mit einer bestimmten Anzahl an Stufen, an- und absteigend ist möglich.
Wenn der obere Zählwert des Timers 2 in OCR2A verändert wird, ändert sich auch der Effektivwert der Rechteckspannung, durch die Änderung des Tastgrades. Läßt man OCR2A von 0 bis 255 zählen, ändert der Tastgrad sich von 0\% bis 100\%. Wenn dies über eine Zeitdauer $\tau$ durch Änderung von OCR2A passiert, dann steigt die effektive Spannung über diese Zeitdauer $\tau$ von 0V-{$V_{SS}$.
\begin{align}
V_{eff} = U_{max} \cdot \sqrt{Tastgrad}
\end{align}
Da der digitale Port nur zwischen Low und High wechseln und keine negativen Spannungen erzeugen kann, legt man eine virtuelle Nulllinie auf die Mitte, also auf 2,5V\footnote{es wird im weiteren Verlauf immer von $V_{ss}$ = 5V ausgegangen}. Die 2,5V werden bei einem Tastgrad von 50\% erreicht, entsprechend einem Wert von 128 in OCR2A.
Erhöht man den Wert von OCR2A in Form einer Sinusfunktion von 128 auf 255 über eine Zeitdauer $\tau$, ergibt sich eine ansteigende effektive Spannung in Form einer Sinusfunktion von 2,5V auf 5,0V. Verringert man den Wert von OCR2A von 255 auf 0 in Form einer Sinusfunktion, fällt die effektive Spannung auf 0V. Durch die passende Änderung von OCR2A in Form einer Sinusfunktion über die Zeitdauer $\tau$ können somit Effektivspannungen mit 256 Werten dargestellt werden. Je mehr Werte es über die Zeitdauer $\tau$ sind, umso genauer ist die resultierende Hüllkurve in Form eines Sinus.
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.7]{../Pictures/pwm_duty_cycle}
\caption{PWM - Tastgrad - Sinus}
\end{figure}
Die Zeitdauer $\tau$, mit der OCR2A mit den Werten einer Sinusfunktion geladen wird, legt die Frequenz des Mithörtons fest. Für die Zeitdauer $\tau$ wird ein weiterer Timer benötigt. Für einen Mithörton von 600Hz müssen 600 \cdot 256 Werte pro Sekunde über einen Interrupt in OCR2A geladen werden. Je mehr Werte es sind, um so genauer ist die Kurvenform. Für den Timer kann die Zeit wie folgt berechnet werden:
\begin{align}
600\si{Hz} \cdot 256 = 153,6\si{\kilo\Hz}
\end{align}
Die Timer 1 läuft im CTC Modus und es wird ein Output Compare Match Interrupt ausgelöst. Das bedeutet, der Timer läuft bis zum Wert in OCR1A hoch und dann erfolgt der Interrupt. Der Wert für OCR1A wird wie folgt berechnet:
\begin{align}
f_{OCR1A} = \frac{fclk_{I/O}}{\mathbb{N} \cdot (1+OCR1A)}
\end{align}
Daraus folgt, daß sich ein Wert von
\begin{align}
OCR1A = \left( \frac{16\si{\mega\Hz}} {8 \cdot 153,6\si{\kilo\Hz}}\right) - 1 = 12
\end{align}
12 für OCR1A ergibt. Allerdings bedeutet eine Frequenz von 153,6\si{\kilo\Hz} für den Timer, dass alle 6,5µs ein Interrupt ausgelöst wird, bei 800\si{Hz} Mithörton sind es alle 5µs.
Der Controller läuft mit 16\si{\mega\Hz}, ein Taktzyklus dauert 62,5ns. Damit bleiben ungefähr 80 Taktzyklen für alle restlichen Aufgaben, wie Tasten abfragen, Display ansteuern, Drehgeber abfragen, CW Zeichen ausgeben. Das ist sehr wenig und die Gefahr besteht, dass Interrupts der Tasteneingänge verloren gehen\footnote{was auch in der Praxis bei den Tests so war}. Der einzige Weg zur Verlängerung der Zeit zwischen 2 Interrupts besteht in einer Verringerung der Werte für die Sinusfunktion. Mit den 256 Werten ist die Kurvenform zwar fein abgestuft, aber der Controller ist damit am Limit.
Bei einer Verringerung auf 64 Werte für den Sinus ergibt sich dann bei 600\si{Hz} eine Zeit von 26µs, das entspricht ungefähr 416 Taktzyklen, was mehr als ausreichend ist. Das der Mithörton dadurch etwas rauher im Klang wird, muss das nachfolgende RLC Filter ausgleichen.
\begin{align}
600\si{Hz} \cdot 64 = 38,4\si{\kilo\Hz}
\end{align}
Mit einer Tabelle von 64 Werten ergibt sich für den Timer 1 eine Frequenz von 38,4\si{\kilo\Hz} und für OCR1A ein Wert von 51 bei einem Prescaler von 8.
\begin{align}
OCR1A = \left( \frac{16\si{\mega\Hz}} {8 \cdot 38,4\si{\kilo\Hz}}\right) - 1 = 51
\end{align}
Die Berechnung der Werte für OCR1A für unterschiedliche Frequenzen des Mithörtons erfolgt nach dieser Formel mit $f_{Sinus}$ als gewünschte Frequenz des Mithörtons.
\begin{align}
OCR1A = \left( \frac{f_{clk\_I/O}} {\mathbb{N} \cdot 64 \cdot f_{Sinus}}\right) - 1
\end{align}
\begin{table}[!ht]
\centering
\begin{tabular}{|l|l|}
$f_{Sinus}$ & OCR1A\\ \hline
1000Hz & 30 \\
800Hz & 38 \\
600Hz & 51 \\
400Hz & 77 \\
\end{tabular}
\caption{OCR1A Werte für verschiedene Frequenzen des Mithörtons}
\end{table}
\subsection{Sinustabelle}
Über den Overflow-Interrupt vom Timer 1 wird der jeweils nächste Wert einer Sinustabelle in OCR2A
geladen. Die Sinustabelle wurde mit einem einfachen Python3 Script erzeugt.
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.5]{../Pictures/sinewave-line.jpg}
\caption{Sinus nach Tabelle vom Python3 Script als Linie}
\end{figure}
Die 64 Werte vom Python3 Script ergeben sich wie folgt:
\begin{verbnobox}[\tiny]
const unsigned char sinewave[] PROGMEM = {
0x80,0x8d,0x99,0xa5,0xb1,0xbd,0xc8,0xd2,0xdb,0xe3,0xeb,0xf1,0xf6,0xfa,0xfd,0xff, // 16
0xff,0xfe,0xfc,0xf8,0xf4,0xee,0xe7,0xdf,0xd6,0xcd,0xc2,0xb7,0xab,0x9f,0x93,0x86, // 32
0x7a,0x6d,0x61,0x55,0x49,0x3e,0x33,0x2a,0x21,0x19,0x12,0x0c,0x08,0x04,0x02,0x01, // 48
0x01,0x03,0x06,0x0a,0x0f,0x15,0x1d,0x25,0x2e,0x38,0x43,0x4f,0x5b,0x67,0x73,0x80 // 64
};
\end{verbnobox}
In dieser Grafik sind die 64 Werte als Stützpunkte eingezeichnet.
\begin{figure}[!ht]
\centering
\includegraphics[scale=0.5]{../Pictures/sinewave-dots.jpg}
\caption{Sinus nach der Tabelle vom Python3 Script mit Stützpunkten}
\end{figure}
\chapter{Entwicklungsumgebung}
Als Entwicklungsumgebung verwende ich mehrere, ausschließlich kostenfreie und überwiegend Open Source Programme:
\begin{itemize}
\item{Editor neovim}
\item{Shell bash}
\item{Filemanager mc}
\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 ;-)
\listoftables
\listoffigures
\appendix
\end{document}