%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% (c) Andreas Hofmeier
%	http://abmh.de/
%       http://an-h.de/
%       http://an-h.de.vu/
%       http://www.lgut.uni-bremen.de/an-h/
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%    This document is free software; you can redistribute it and/or
%    modify it under the terms of the GNU General Public License as
%    published by the Free Software Foundation; either version 2 of
%    the License, or (at your option) any later version.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
\documentclass[12pt]{article}

%PDF \usepackage[final]{ps4pdf}

%%%%%%%%% GERMAN
\usepackage{a4,german}
%\usepackage{a4}

\usepackage[T1]{fontenc}
\usepackage[latin1]{inputenc}

%%%%%%%%% GERMAN
\usepackage{ngerman}

%%%%%%%%% PDF-Latex:
%PDF \ifpdf
%PDF   \usepackage[pdftex]{graphics}
%PDF   \usepackage{ae}
%PDF   \usepackage{graphicx}
%PDF   \usepackage[
%PDF      pdftex,
%PDF      a4paper,
%PDF      bookmarks,
%PDF      bookmarksopen=true,
%PDF      bookmarksnumbered=true,
%PDF      pdfauthor={Andreas Hofmeier  --  abmh.de},
%PDF      pdftitle={RST LCT Versuch 1: Logikanalysatortechnik und RS232},
%PDF %     colorlinks=true,
%PDF %     linkcolor=black,
%PDF %     filecolor=black,
%PDF %     urlcolor=black
%PDF   ]{hyperref}
%PDF \else
%PDF   \usepackage[dvips]{graphics}
%PDF \fi

%NOTPDF
  \usepackage[dvips]{graphics}
%PDF

%\usepackage[dvips]{graphics}
\usepackage{latexsym}
\usepackage{exscale}
\usepackage{amssymb,amsmath}
%\documentclass[11pt]{report}
%\usepackage{isolatin1}
%\usepackage{german}
\usepackage{epsf}
\usepackage[dvips]{rotating}

\usepackage{longtable}
\usepackage{dcolumn}

\usepackage{listings}

%\usepackage{eurosym}
%\EUR{300}

\usepackage{multicol}
%\usepackage[dvips]{rotating}

%ENDHEAD


% ACHTUNG: Erst nach \tableofcontents einfügen!
%\setlength{\parindent}{0pt}
%\setlength{\parskip}{\baselineskip}
%\parindent=0pt
%\parskip=\baselineskip

%\setcounter{tocdepth}{4}
%\setcounter{secnumdepth}{4}

\pagestyle{plain}
\pagestyle{myheadings}
\markright{\mbox{\bf Grp. 1, LCT Versuch 1: Logikanalysatortechnik und RS232}}
%\markboth{\mbox{\bf A. Hofmeier, EMT Laborversuch FS}}{\mbox{\bf A. Hofmeier, EMT Laborversuch FM}}

\begin{titlepage}
\title{Labor Computertechnik (LCT)\\Laborbericht zu Versuch:
1\\Logikanalysatortechnik und RS232}
\author{Andreas Hofmeier}
%\date{12. Mai 2003}
\date{}
\end{titlepage}


\begin{document}
\maketitle

\begin{center}
\begin{tabular}{rl}

Auftraggeber: & Prof. Dipl.-Ing. S. Myrzik,\\
 & Fachhochschule Bremen \\
Durchführung am: & 22.03.2006\\
Ort der Durchführung: & FH Bremen, Flughafenallee 10,\\
 &  Raum: 232 \\
Abgabe am: & 19.04.2006\\
\end{tabular}

\vspace{1cm}

Versuchsgruppe 1

\begin{tabular}{rc}
Andreas Hofmeier  & 94453 \\
Raphael Rosendahl & 95437 \\
Jakob Schröter    & 91150 \\

\end{tabular}
\end{center}
\vspace{2cm}


\begin{abstract}
\noindent
Dieses Dokument beschreibt die Durchführung des Versuches Nr. 1 im
Labor RST LCT der Versuchsgruppe 1.
\\\\
Die serielle Datenübertragung zwischen einem Mikrocontroller und einem
PC wurde abgefangen und ausgewertet. Die übertragenen Zeichen wurden
korrekt interpretiert. Im zweiten Teil des Versuches wurde die
Datenübertragung abgefangen, als ein bestimmte Bitmuster an einem Port
anstand. Das zu diesem Zeitpunkt gesendete Byte lautete ASCII(E).
\\\\
Die Versuchsgruppe erlangte ein grundlegendes Verständnis über die
serielle Schnittstelle sowie die Funktionsweise und den Einsatz von
Logikanalysatoren.
\end{abstract}
\newpage

\tableofcontents
\setlength{\parindent}{0pt}
\setlength{\parskip}{\baselineskip}
\newpage

\section{Versuchsziele}

Ziele dieses Versuches sind:

\begin{enumerate}

\item Einen Überblick über die Funktionsweise der seriellen
Schnittstelle, auch bekannt unter den Namen V24 oder RS232, zu
erlangen.

\item Einen Einblick in die Messtechnik, hier im Speziellen in den
Logikanalysator, zu bekommen

\end{enumerate}


\section{Versuchsaufbau}

\begin{figure}[h]
\includegraphics[width=14.52cm]{mic-v1-serial-overview.eps}
\caption{Versuchsaufbau}
\end{figure}

Ein Mikrocontroller des Typs 80C535 (Intel 80C51-kompatibel) ist über
eine serielle Verbindung (V24) mit einem PC verbunden. Dieser PC dient
als Terminal (für die serielle Verbindung) und als Programmiereinheit
für den Mikrocontroller.

Die serielle Verbindung wird mit Hilfe eines Logikanalysators
abgegriffen. Der Logikanalysator überträgt die abgegriffenen Daten zu
einem weiteren PC, welcher diese visualisiert. Eine weitere Aufgabe
dieses zweiten PCs ist die Konfiguration des Logikanalysators.


\section{Vorbetrachtungen}

\subsection{Die serielle Schnittstelle}

Die serielle Schnittstelle, auch bekannt als V24 oder
RS232\footnote{Neue bzw. aktuelle Bezeichnung EIA-232
(de.wikipedia.org (2006a)).}, wird im PC-Bereich mehr und mehr durch
den Universal Serial Bus (USB) verdrängt. Früher wurde die serielle
Schnittstelle hauptsächlich zum Anschluss von Modems und Mäusen an den
PC verwendet. Zu erkennen ist die serielle Schnittstelle an dem 25
oder 9-poligen Sub-D Stecker (male am PC). Wobei die 25-polige
Variante fast vollständig verschwunden ist und die 9-polige
seltener wird.

\begin{figure}[h]
\includegraphics[width=7.26cm]{v24-25polig_1.eps}
\includegraphics[width=7.26cm]{v24-9polig1.eps}
\caption{links: Sub-D 25 ; rechts: Sub-D 9 (Übernommen von Sephi (1999))}
\end{figure}

\subsubsection{Signale}

\begin{tabular}{|l|l|l|l|}
\hline
\multicolumn{2}{|l|}{Signalname} & Pin & Rich.  \\
\hline
PG Protection Ground & Schutzerde & Schirm & - \\
SG Signal (Common) Ground & Bezugssignal & 5 & - \\
TxD Transmitted Data & Ausgehende Daten & 3 & OUT \\
RxD Received Data & Eingehende Daten & 2 & IN \\
DTR Data Terminal Ready & Endgerät betriebsbereit & 4 & OUT \\
DSR Data Set Ready & Betriebsbereitschaft & 6 & IN \\
RTS Request To Send & Sendeteil EIN & 7 & OUT \\
CTS Clear To Send & Sendebereitschaft & 8 & IN \\
DCD Carrier Detect & Empfangssignalpegel vorhanden & 1 & IN \\
RI Ring Indicator & Ankommender Ruf & 9 & IN \\
\hline
\end{tabular}
\begin{flushright}
(en.wikipedia.org (2006), Sephi (1999) und Messmer und Dembowski (2003))
\end{flushright}

Wobei die Spalten ``Pin'' und ``Rich.'' die Pinnummer und die Richtung
des Signals bezogen auf den PC angeben. Die Pinnummer bezieht sich in
diesem Fall auf den 9-poligen Sub-D Anschluss.

Die drei wichtigsten Signale sind SG, TxD und RxD, wobei SG ein
gemeinsames Bezugspotential definiert, TxD Daten sendet und RxD
empfängt. Dies bezieht sich wieder auf die PC-Seite. In einem Modem
sind die beiden Anschlüsse TxD und RxD intern vertauscht, so dass vom
Modem aus gesehen RxD Daten sendet und TxD Daten empfängt.

PG ist heutzutage meist mit SG verbunden.


\subsubsection{Handshaking}

Der normale Ablauf einer Datenübertragung verläuft folgendermaßen:

\begin{itemize}

\item Der Computer aktiviert die Leitung DTR (Data
terminal ready) in Richtung des Modems und wartet auf dessen
Rückmeldung durch DSR (Data set ready). Damit besteht lokale
Empfangsbereitschaft ohne Aktivierung des Senders.

\newpage
\item Wenn der Computer senden möchte, setzt er den Pin RTS (Request
to send) und wartet auf die Sendebereitschaft CTS (Clear to send) des Modems.

\end{itemize}
\begin{flushright}
Adaptiert von de.wikipedia.org (2006b).
\end{flushright}

Dieser Vorgang wird allgemeinhin als Hardware-Handshaking
bezeichnet. Er dient nach Aufbau der Verbindung auch dazu, den
Datentransfer zu unterbrechen, wenn ein Endgerät keine Daten mehr
aufnehmen kann. (Wenn zum Beispiel der Puffer voll ist.) Da heutige
Geräte wesentlich schneller Daten verarbeiten können, als diese von
der seriellen Schnittstelle übertragen werden, sind diese Signale in
den meisten Fällen überflüssig.

Um Signale -- und somit Adern in der Leitung -- zu sparen wurde das
Software-Handshaking entwickelt. Bei diesem werden die Steuersignale
über die gleichen Leitungen übertragen, wie die Daten: über RxD und
TxD. Kann eine Seite keine Daten mehr aufnehmen, signalisiert sie das
mit der Übertragung von dem Byte $13_{16}$ ($^\wedge$S -- Control-S). Die
Empfangsbereitschaft wird mit der Übertragung eines Bytes $11_{16}$
($^\wedge$Q -- Control-Q) signalisiert. Die meisten Systeme, die diese
Handshake-Verfahren einsetzten, senden das $11_{16}$ in gewissen
Zeitintervallen immer wieder. Dies hat den Sinn, einem neu
angeschlossenen Gerät mitzuteilen, dass Empfangsbereitschaft
besteht. Diese Verhalten wurde bei dem Laborversuch beobachtet. Das
Software-Handshaking hat den Nachteil, dass nicht mehr alle Zeichen
für die Datenübertragung genutzt werden können. Die Zeichen $11_{16}$
und $13_{16}$ dürfen nämlich nicht im Datenstrom vorkommen, da sie
als Handshaking und nicht als Daten interpretiert werden würden.

Jede Standard-UNIX/Linux-Konsole versteht Software-Handshaking. Wird
Control-S gedrückt, hält die Konsole die Datenausgabe so lange an, bis
Control-Q gedrückt wurde.

Mit Hilfe des Signals DCD teilt das Modem dem Computer mit, dass ein
Signalpegel (Eingehende Daten von der Gegenseite, verbundenem Modem)
vorhanden ist. Das Signal RI wird genutzt um dem Computer mitzuteilen,
dass das lokale Modem angerufen wird.



\newpage
\subsubsection{Signalpegel der RS-232-C-Schnittstelle}

Die folgenden Graphiken geben einen Überblick über die Signalpegel und
deren logischen Zuordnung der RS-232-C-Schnittstelle.

\begin{figure}[h]
\includegraphics[width=7.26cm]{logik1.eps}
\includegraphics[width=7.26cm]{logik2.eps}
\caption{Signalpegel der RS-232-C (Übernommen von Sephi (1999))}
\end{figure}

Die linke Grafik zeigt die logische Zuordnung von Signalpegeln und
Datenleitungen (RxD und TxD), die rechte von Signalpegeln und
Steuerleitungen (CTS, RTS, DTR, DSR, DCD und RI).

Erlaubte Bereiche sind: von -3V bis -15V (low) und +3 bis +15V (high). Der Bereich
von -3V bis +3V ist laut Standard verboten und führt zu nicht
definierten Ergebnissen. Wobei zu erwähnen ist, dass moderne serielle
Schnittstellen 0V häufig als low (-3V bis -15V) erkennen.

Bei den Datenleitungen gilt, dass der Low-Bereich einer logischen
``1'' zugeordnet ist und der High-Bereich einer logischen ``0''. Der
Low-Bereich entspricht dem Ruhezustand.

Ist nicht bekannt, welcher von zwei Drähten der TxD und welcher der RxD
ist, kann dies durch einfaches Messen gegenüber SG festgestellt
werden. Handelt es sich um TxD würde eine Spannung in einem Bereich
von -3V bis -15V gemessen. Bei RxD würde eine Spannung von ca. 0V
gemessen. Diese Messung bezieht sich auf Computer. Bei Modems sind RxD
und TxD vertauscht.


\newpage
\subsubsection{Verbindung zweier Computer}

Sollen zwei Computer über die serielle Schnittstelle verbunden werden,
ist darauf zu achten, dass ein ``gedrehtes'' Kabel verwendet wird. Die
folgende Abbildung zeigt links eine volle Kopplung, bei der alle
Steuerleitungen verbunden wurden. Da Computer im allgemeinen Daten
schneller verarbeiten können, als die serielle Schnittstelle diese
überträgt, sind die Steuerleitungen überflüssig. Die
Drei-Draht-Kopplung, links abgebildet, kann verwendet werden.  Wendet
ein Programm auf die Drei-Draht-Kopplung Hardware-Handshaking an,
funktioniert dies nicht. Um diesem Problem vorzubeugen, sind die
gestrichelt eingezeichneten Verbindungen herzustellen. Dies führt
dazu, dass das lokale Hardware-Handshaking ausgetrickst wird. (Das
Weglassen der gestrichelten Verbindungen ist eine der häufigsten
Ursachen, wieso eine serielle Datenübertragung mit einer
Drei-Draht-Verbindung nicht funktioniert.)

\begin{figure}[h]
\includegraphics[width=14.52cm]{kopplungen.eps}
\caption{Kopplung zweier Computer}
\end{figure}



\subsubsection{Beispiel einer Übertragung}

Die folgende Graphik gibt ein Beispiel der Übertragung eines Bytes.
Das Zeichen ``G'' ($47_{16}$) wurde mit ungerader Parität und einem
Stoppbit übertagegen. Das Startbit ist immer ``$0_2$'' um sich vom
Ruhezustand (= ``$1_2$'') abzuheben. Danach folgen die Datenbits,
wobei das LSB (least significant bit) zuerst übertragen wird. Dannach
wird die Anzahl der Einsen durch das Paritätsbit ungerade gemacht (odd
parity). Das heisst, das Paritätsbit wird auf $1_2$ gesetzt, wenn die
Anzahl der Einsen gerade war. Zum Schluss folgt ein Stoppbit, welches
``$1_2$'' ist, um den Ruhezustand einzuleiten oder sich vom nächsten
Startbit abzuheben. Der Übergang vom Ruhezustand (oder Stoppbit) zum
Startbit wird zu Syncronisationszwecken verwendet.

\begin{figure}[h]
\begin{center}
\includegraphics[width=7.26cm]{800px-RS-232_timing.eps}
\end{center}
%\includegraphics[width=7.26cm]{logik2}
\caption{Beispiel einer Übertragung (Übernommen von de.wikipedia.org (2006a))}
\end{figure}


\subsubsection{Übertragungsgeschwindigkeit Baud vs. bps}

Die Übertragungsgeschwindigkeit wird normalerweise in bps (bit per
second) gemessen. Bei der Datenübertragung durch ein Modem wird
üblicherweise von Baud gesprochen. Baud ist definiert als
Signaländerungen pro Sekunde. Wird pro Signaländerung ein Bit
übertragen, so sind 9600baud gleich 9600bps. Dies trifft auf die
serielle Schnittstelle zu. Modems sind allerdings in der Lage mehr
als ein Bit pro Signalwechsel zu übertragen. In diesem Fall ist die
Baudrate mit der Anzahl der pro Signalwechsel übertragenen Bits zu
multiplizieren, um auf bps zu kommen.


\subsection{Abtastung}

\subsubsection{Abtastrate}

Um eine sichere Abtastung zu gewährleisten, ist mindestens mit
vierfacher Geschwindigkeit -- bezogen auf die maximale
Änderungsgeschwindigkeit des abzutastenden Signals -- abzutasten.

Geschwindigkeit: $9600baud = 9600bps = 9600\frac{bit}{s} \Rightarrow
\frac{1}{9600\frac{bit}{s}} \approx  104*10^{-6}\frac{s}{bit}$

Um die vierfache Abtastrate zu erreichen, muss die Zeit zwischen
den Abtastungen auf $\frac{1}{4}$ zu reduzieren.

Daraus folgt: Abtastgeschwindigkeit: $104*10^{-6}\frac{s}{bit} *
\frac{1}{4} \approx 25*10^{-6}s$ 

\subsubsection{Triggerpegel}

Der Triggerpegel am Logikanalysator ist auf 3V einzustellen, da alles
über 3V eine ``0'' darstellt. Alles andere wird als ``1''
interpretiert. Dabei ist zu beachten, dass das High-Signal eine
logische ``0'' darstellt. Dies führt dazu, dass der Logikanalysator
das Signal invertiert darstellt.


\section{Versuchsdurchführung}

\subsection{Versuch 1A}

Das Programm {\tt ser\_test} wurde übersetzt, auf den Mikrocontroller
übertragen und gestartet. Dannach wurden mittels eines
Terminalprogramms Zeichen zu dem Mikrocontroller gesendet. Es war zu
beobachten, dass die Zeichen um eins erhört an das Terminalprogramm
zurückgeschickt wurden. So wurde aus der eingegebenen ``7'' eine
``8''. Diese Übermittlung wurde abgefangen und analysiert. Dazu wurde
die Triggerung so eingestellt, dass sie durch eine positive Flanke an
RxD ausgelöst wurde. Der Pretrigger- und Posttriggerbereich wurden
gleich gewählt.

Aufgefangene Sequenz:

1 00010011 0

Diese Sequenz wurde invertiert

0 11101100 1

Die Start und Stopp-Bits wurden entfernt und die Reihenfolge umgekehrt

00110111$_2$ = 37$_{16}$ = ``7''


Die Antwort vom Mikrocontroller wurde etwas versetzt empfangen und
lautete:

1 11100011 0

0 00011100 1

00111000$_2$ = 38$_{16}$ = ``8''

Im Timing Diagramm wurde die Zeit zwischen dem Anfang des Startbits
und der Anfangszeit des Stopbits abgelesen. Sie Betrug
$936.005*10^{-6}s$. Dieser Wert wurde folgenderweise überprüft:

$\frac{1}{9600\frac{bit}{s}}*9bit = 937.5*10^{-6}s$

Es ist zu erkennen, dass der abgelesene mit dem errechneten Wert
hinreichend übereinstimmt.

Die Aufzeichnungen wurde in Form eines Timing Diagramms
ausgedruckt. Siehe Anhang A.


\subsection{Versuch 1B}

Das Programm für den zweiten Versuch wurde übersetzt, auf den
Mikrocontroller übertragen und gestartet.

Der Mikrocontroller sendet permanent ``Messwerte'' (8-Bit-Werte) über
die serielle Schnittstelle. Die Bedeutung des gerade gesendeten
Messwertes wird über die unteren 4 Bit von Port 4 signalisiert. An
diesem Port treten alle Zahlen zwischen 0 und 15 auf. Mit dem Beginn
der Übertragung eines neuen Messwertes steht auch die
4-Bit-Information an P4, und bleibt während der gesamten Sendezeit
unverändert.

Es war festzustellen, welcher Messwert seriell übertragen wird, wenn
an Port 4 die Gruppennummer -- 1 = 0001$_2$ -- als Dualzahl ansteht.


Es wurden 4 Messleitungen des Logikanalysators an Port 4
angeschlossen. Der Logikanalysators wurde so eingestellt, dass die
Triggerung einsetzte, wenn

\begin{enumerate}

\item eine positive Flanke an TxD auftrat, und
\item Bit 3 des Ports 4 low (0) ist, und
\item Bit 2 des Ports 4 low (0) ist, und
\item Bit 1 des Ports 4 low (0) ist, und
\item Bit 0 des Ports 4 high (1) ist.

\end{enumerate}

Auch in diesem Fall wurden Pretrigger- und Posttriggerbereich gleich
gewählt.

Folgendes Ergebnis wurde ermittelt:

1 01011101 0

invertieren

0 10100010 1

umdrehen, Start- und Stoppbit entfernen

01000101$_2$ = 45$_{16}$ = ``E''

Der Ausdruck des Timing Diagramms ist im Anhang B zu finden.


\section{Bibliographie und Referenzen}

{\bf de.wikipedia.org} (2006a) EIA-232 [Online] Available
at\\{\tt http://de.wikipedia.org/wiki/EIA-232}

{\bf de.wikipedia.org} (2006b) Datenflusskontrolle [Online] Available
at\\{\tt http://de.wikipedia.org/wiki/Handshake}

{\bf en.wikipedia.org} (2006) RS-232 [Online] Available
at\\{\tt http://en.wikipedia.org/wiki/RS-232}

{\bf Messmer, H.-P.; Dembowski, K} (2003) PC-Hardwarebuch 7$^{th}$
edition. Munich: Addison-Wesley. ISBN 3-827-32014-3.

{\bf Sephi} (1999) Die serielle Schnittstelle V.24 [Online] Available
at\\{\tt http://www.inf.hs-zigr.de/~boehm/rt98/ferstl/v24vortrag.htm}

\newpage
\appendix
%\addcontentsline{toc}{chapter}{Appendices}
%\section{Appendices}


\section*{Anhang A: Timing Diagramm aus Versuch 1A}
\setcounter{section}{1}
\setcounter{subsection}{0}
\addcontentsline{toc}{section}{Anhang A: Timing Diagramm aus Versuch 1A}
\label{}

\newpage
\section*{Anhang B: Timing Diagramm aus Versuch 1B}
\setcounter{section}{1}
\setcounter{subsection}{0}
\addcontentsline{toc}{section}{Anhang B: Timing Diagramm aus Versuch 1B}
\label{}

\end{document}




% LocalWords:  standard
