\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}
