summaryrefslogtreecommitdiff
path: root/Dokumentation/doc.tex
diff options
context:
space:
mode:
authorLeonard Kugis <leonard@kug.is>2021-03-19 23:50:52 +0100
committerLeonard Kugis <leonard@kug.is>2021-03-19 23:50:52 +0100
commit422b75afa7d0abc675dc7c64668bb159bde356fe (patch)
treeacb967625d6aa26b0e8187e081823ae7a681764e /Dokumentation/doc.tex
parent5448124048755cd25eec176d008fd5d93f0cc336 (diff)
Dokumentation
Grundprinzip Software erläutert.
Diffstat (limited to 'Dokumentation/doc.tex')
-rw-r--r--Dokumentation/doc.tex71
1 files changed, 71 insertions, 0 deletions
diff --git a/Dokumentation/doc.tex b/Dokumentation/doc.tex
index d75522b..8e2c504 100644
--- a/Dokumentation/doc.tex
+++ b/Dokumentation/doc.tex
@@ -1,6 +1,10 @@
\documentclass[12pt,a4paper]{scrartcl}
\usepackage[utf8]{inputenc}
\usepackage[ngerman]{babel}
+\usepackage{graphicx}
+\usepackage[table,dvipsnames]{xcolor}
+
+\definecolor{tablehead}{hsb}{0,0,0.9}
\title{Pinlock: Dokumentation}
\subtitle{Mikrocontroller-Seminar}
@@ -12,6 +16,8 @@
\tableofcontents
+\newpage
+
\section{Idee}
\section{Hardware}
@@ -24,10 +30,75 @@
\section{Software}
+Das Programm wurde in AVR-Assembler geschrieben, mit Assemblerdirektiven
+für den \emph{Avra}-Assembler.
+
\subsection{Grundprinzip}
+Nach Zurücksetzen des Mikrocontrollers durchläuft das Programm eine Initialisierungsroutine.
+Diese beinhaltet im Wesentlichen folgende Schritte:
+
+\begin{enumerate}
+ \item Initialisierung des Stackpointers mit den Grenzen des verfügbaren RAMs
+ \item Konfiguration der GPIO-Ports
+ \item Initialisierung der Displays
+ \item Lesen des Zugangscodes aus dem EEPROM
+\end{enumerate}
+
+Anschließend wird eine endlose Hauptschleife durchlaufen, die folgende Aktionen
+periodisch ausführt:
+
+\begin{enumerate}
+ \item Warte 12240 Zyklen.
+ \item Lese alle Tasten der Eingabematrix aus.
+ \item Ermittle Änderungen des neuen Tastenstatus zu dem alten Tastenstatus.
+ \item Bei positiver Flanke (Taste war vorher nicht gedrückt und ist jetzt gedrückt):
+ Behandle den Tastendruck bezüglich des aktuellen Zustands (s.u.).
+ \item Puffere den neuen Tastenstatus.
+\end{enumerate}
+
+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}
+ \texttt{A} & \emph{Authenticating}, Authentifizierung findet gerade durch Codeeingabe statt \\
+ \texttt{AS} & \emph{Authentication Submitted}, Code wurde bestätigt und wird überprüft \\
+ \texttt{AD} & \emph{Authenticated}, Benutzer ist authentifiziert und hat Zugriff \\
+ \texttt{C} & \emph{Change}, Benutzer ändert den Zugriffscode
+\end{tabular}
+
+\begin{figure}[!htb]
+ \centering
+ \includegraphics[width=0.7\linewidth, keepaspectratio]{resources/states}
+ \caption{FSM der Behandlung von Tastendrücken (schematisch)}
+ \label{fig:states}
+\end{figure}
+
+\begin{table}[!htb]
+ \centering
+ \begin{tabular}{|c|c|}
+ \hline
+ \rowcolor{tablehead} Taste extern & Taste intern \\ \hline
+ \texttt{0..9} & \texttt{0x00..0x09} \\ \hline
+ \texttt{A..D} & \texttt{0x0A..0x0D} \\ \hline
+ \texttt{*} & \texttt{0x0E} \\ \hline
+ \texttt{\#} & \texttt{0x0F} \\ \hline
+ \end{tabular}
+ \caption{Zuordnung von externen zu internen Tastendarstellungen}
+ \label{tbl:keymap}
+\end{table}
+
\subsection{Funktionen}
+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.
+
\section{Bedienung}
\end{document}