diff options
author | Leonard Kugis <leonard@kug.is> | 2021-03-19 23:50:52 +0100 |
---|---|---|
committer | Leonard Kugis <leonard@kug.is> | 2021-03-19 23:50:52 +0100 |
commit | 422b75afa7d0abc675dc7c64668bb159bde356fe (patch) | |
tree | acb967625d6aa26b0e8187e081823ae7a681764e /Dokumentation/doc.tex | |
parent | 5448124048755cd25eec176d008fd5d93f0cc336 (diff) |
Dokumentation
Grundprinzip Software erläutert.
Diffstat (limited to 'Dokumentation/doc.tex')
-rw-r--r-- | Dokumentation/doc.tex | 71 |
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} |