summaryrefslogtreecommitdiff
path: root/Dokumentation/doc.tex
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2021-03-20 01:25:13 +0100
committerLeonard Kugis <leonard@kug.is>2021-03-20 01:25:13 +0100
commit25860253f70884069179b3e7d8487af73311a905 (patch)
treec0acdfecb933088fffa7bdbf1f7898a30839e0f2 /Dokumentation/doc.tex
parent422b75afa7d0abc675dc7c64668bb159bde356fe (diff)
Dokumentation
Routinen erläutert.
Diffstat (limited to 'Dokumentation/doc.tex')
-rw-r--r--Dokumentation/doc.tex197
1 files changed, 193 insertions, 4 deletions
diff --git a/Dokumentation/doc.tex b/Dokumentation/doc.tex
index 8e2c504..b7c4d18 100644
--- a/Dokumentation/doc.tex
+++ b/Dokumentation/doc.tex
@@ -2,9 +2,13 @@
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
\usepackage{graphicx}
+\usepackage{amsmath,amssymb,amsfonts}
\usepackage[table,dvipsnames]{xcolor}
+\usepackage{array}
+\usepackage{makecell}
\definecolor{tablehead}{hsb}{0,0,0.9}
+\newcolumntype{C}[1]{>{\centering\arraybackslash}p{#1}}
\title{Pinlock: Dokumentation}
\subtitle{Mikrocontroller-Seminar}
@@ -32,6 +36,32 @@
Das Programm wurde in AVR-Assembler geschrieben, mit Assemblerdirektiven
für den \emph{Avra}-Assembler.
+Grundsätzlich wurden für dieses Programm die in Tabelle~\ref{tbl:registermap}
+Register-Neudefinitionen vorgenommen, um den Code lesbarer zu gestalten.
+
+\begin{table}[!htb]
+ \centering
+ \begin{tabular}{|C{0.2\linewidth}|C{0.2\linewidth}|C{0.5\linewidth}|}
+ \hline
+ \rowcolor{tablehead} ATmega16A Register & Neu definierte Registerbezeichnung & Funktion \\ \hline
+ \texttt{r16} & \texttt{tmp0} & Temporäres Pufferregister 0 \\ \hline
+ \texttt{r17} & \texttt{par0} & Parameterregister 0 \\ \hline
+ \texttt{r18} & \texttt{par1} & Parameterregister 1 \\ \hline
+ \texttt{r19} & \texttt{tmp1} & Temporäres Pufferregister 1 \\ \hline
+ \texttt{r20} & \texttt{tmp2} & Temporäres Pufferregister 2 \\ \hline
+ \texttt{r21} & \texttt{ret0} & Rückgaberegister 0 \\ \hline
+ \texttt{r22} & \texttt{ret1} & Rückgaberegister 1 \\ \hline
+ \texttt{r23} & \texttt{par2} & Parameterregister 2 \\ \hline
+ \texttt{r24} & \texttt{par3} & Parameterregister 3 \\ \hline
+ \texttt{r25} & \texttt{par4} & Parameterregister 4 \\ \hline
+ \texttt{r26} & \texttt{ret2} & Rückgaberegister 2 \\ \hline
+ \texttt{r27} & \texttt{heart} & Debug \\ \hline
+ \texttt{r28} & \texttt{dig0} & Pufferregister für Ziffern 0 und 1 \\ \hline
+ \texttt{r29} & \texttt{dig1} & Pufferregister für Ziffern 2 und 3 \\ \hline
+ \end{tabular}
+ \caption{Neu definierte Registerbezeichnungen für Register des ATmega16A}
+ \label{tbl:registermap}
+\end{table}
\subsection{Grundprinzip}
@@ -57,11 +87,10 @@ periodisch ausführt:
\item Puffere den neuen Tastenstatus.
\end{enumerate}
+Die einzelnen Routinen, die dabei aufgerufen werden, werden genauer in Sektion~\ref{sec:functions} erläutert.
+
Die Behandlung der (neu) gedrückten Taste bezüglich des aktuellen Zustandes erfolgt nach der
in Abbildung~\ref{fig:states} dargestellten \emph{Finite-State-Machine} (FSM).
-Dabei folgt die Notation der Transitionsbedingungen dem Schema \colorbox{lightgray}{\texttt{<Taste> / <Wesentliche Aktionen>}}.
-Die Tastendarstellungen innerhalb des Programmes unterliegen dabei der Zuordnung in
-Tabelle~\ref{tbl:keymap}.
Die Zustände sind dabei nach folgendem Schema benannt:
\begin{tabular}{r@{: }l r@{: }l}
@@ -71,6 +100,11 @@ Die Zustände sind dabei nach folgendem Schema benannt:
\texttt{C} & \emph{Change}, Benutzer ändert den Zugriffscode
\end{tabular}
+Dabei folgt die Notation der Transitionsbedingungen dem Schema \\
+\colorbox{lightgray}{\texttt{<Taste> / <Wesentliche Aktionen>}}.
+Die Tastendarstellungen innerhalb des Programmes unterliegen dabei der Zuordnung in
+Tabelle~\ref{tbl:keymap}.
+
\begin{figure}[!htb]
\centering
\includegraphics[width=0.7\linewidth, keepaspectratio]{resources/states}
@@ -92,13 +126,168 @@ Die Zustände sind dabei nach folgendem Schema benannt:
\label{tbl:keymap}
\end{table}
-\subsection{Funktionen}
+\subsection{Routinen}\label{sec:functions}
+
+\subsubsection{\texttt{wait}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Wartezyklen Stufe 1, \\ \texttt{par1}: Wartezyklen Stufe 2, \\ \texttt{par2}: Wartezyklen Stufe 3} \\
+ Rückgabe & -
+\end{tabular}
+
+Warte über drei verschachtelte Schleifen mit verschiedenen Durchlaufzahlen.
+Die gesamte, zu wartende Zyklendauer beträgt somit
+$\Delta t_\text{ges} = \text{\texttt{par0}} \cdot \text{\texttt{par1}} \cdot \text{\texttt{par2}}$.
+
+\subsubsection{\texttt{write\_code}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & - \\
+ Rückgabe & -
+\end{tabular}
+
+Schreibe statisch die Werte 0x01 und 0x23 (entspricht der Zahlenkombination \texttt{0123})
+in das EEPROM an die Adressen 0x00 und 0x01.
+
+\subsubsection{\texttt{load\_code}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & - \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Ziffern 0 und 1, \\ \texttt{ret1}: Ziffern 2 und 3}
+\end{tabular}
+
+Lese die gespeicherte Zahlenkombination aus dem EEPROM (Adressen 0x00 und 0x01) aus.
+
+\subsubsection{\texttt{shift\_out}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Zu schreibendes Byte, \\
+ \texttt{par1..par2}: Adresse zur Funktion, um 0 zu schreiben, \\
+ \texttt{par3..par4}: Adresse zur Funktion, um 1 zu schreiben} \\
+ Rückgabe & -
+\end{tabular}
+
+Schreibe ein Byte Bit für Bit durch Funktionsaufrufe, welche das Schreiben
+des 0- und 1-Bits implementieren. Das können beispielsweise Funktionen sein,
+die 0 bzw. 1 an ein Schieberegister anlegen.
+
+\subsubsection{\texttt{shift\_in}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0..par1}: Adresse zur Funktion, um einen Clockzyklus zu durchlaufen, \\
+ \texttt{par2..par3}: Adresse zur Funktion, das zugehörige Bit zu lesen} \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Gelesenes Byte}
+\end{tabular}
+
+Lese ein Byte Bit für Bit aus einem Schieberegister. Das Durchlaufen eines Clockzyklus und Lesen des
+Bits ist in übergebenen Funktionen implementiert.
+
+\subsubsection{\texttt{eeprom\_write}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0..par1}: Zieladresse, \\
+ \texttt{par2}: Zu schreibender Wert} \\
+ Rückgabe & -
+\end{tabular}
+
+Schreibt ein Byte an die gegebene Adresse in das interne EEPROM.
+
+\subsubsection{\texttt{eeprom\_read}}
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0..par1}: Adresse} \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Gelesener Wert}
+\end{tabular}
+
+Liest ein Byte von der gegebenen Adresse im internen EEPROM.
+
+\subsubsection{\texttt{status}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Statusbits} \\
+ Rückgabe & -
+\end{tabular}
+
+Gibt die gegebenen Statusbits über die LEDs aus.
+Dabei wird das Schieberegister dafür benutzt.
+
+\subsubsection{\texttt{display}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Displaynummer, \\ \texttt{par1}: Darzustellende Ziffer} \\
+ Rückgabe & -
+\end{tabular}
+
+Zeige die gegebene Ziffer auf dem gegebenen Display.
+
+\subsubsection{\texttt{set\_digit}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Ziffernstelle, \\ \texttt{par1}: Ziffer} \\
+ Rückgabe & -
+\end{tabular}
+
+Schreibt die Ziffer an die Ziffernstelle des internen Puffers.
+
+\subsubsection{\texttt{get\_digit}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Ziffernstelle} \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Ziffer an der Stelle}
+\end{tabular}
+
+Liest die Ziffer der gegebenen Stelle von dem internen Puffer.
+
+\subsubsection{\texttt{input}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & - \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Tastenstatus mit Belegung: \texttt{0852*741}, \\
+ \texttt{ret1}: Tastenstatus mit Belegung: \texttt{DCBA\#963}}
+\end{tabular}
+
+Liest den Tastenstatus aller Tasten aus. Ein 1-Bit entspricht einer gedrückten,
+ein 0-Bit einer nicht gedrückten Taste.
Das Auslesen der Tasten der Eingabematrix erfolgt über die Schieberegister:
eines (Serial-In-Parallel-Out) zur Selektion der auszulesenden Zeile und eines (Parallel-In-Serial-Out)
zum eigentlichen Auslesen selbiger. Dies wird innerhalb der Ausleseroutine mit jeder
Zeile gemacht, um gedrückte Tasten zu identifizieren.
+\subsubsection{\texttt{translate}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Tastenstatus Bits \texttt{7..0}, \\
+ \texttt{par1}: Tastenstatus Bits \texttt{15..8}} \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Übersetzter Tastencode}
+\end{tabular}
+
+Übersetzt den Tastenstatus in die entsprechende, interne Tastendarstellung.
+Dabei wird nach der Zuordnung aus Tabelle~\ref{tbl:keymap} vorgegangen.
+
+\subsubsection{\texttt{handle}}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ Parameter & \makecell[l]{\texttt{par0}: Aktueller Zustand, \\
+ \texttt{par1}: Tastencode} \\
+ Rückgabe & \makecell[l]{\texttt{ret0}: Neuer Zustand}
+\end{tabular}
+
+Behandle den Tastencode unter dem aktuellen Zustand.
+Das Zustandsfeld hat folgende Belegung (ein Zeichen entspricht einem Bit):
+
+\begin{center}
+ \texttt{CSSSSSDD}
+\end{center}
+
+\begin{tabular}{r@{: }l r@{: }l}
+ \texttt{0} & Reserviert \\
+ \texttt{C} & Pufferbit für Blinken der ausgewählten Stelle \\
+ \texttt{S} & Zustandsinformationen \\
+ \texttt{D} & Aktuell ausgewähltes Display
+\end{tabular}
+
+Die Behandlung erfolgt nach dem in Abbildung~\ref{fig:states} dargestellten Schema.
+
\section{Bedienung}
\end{document}