Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

1 - Einfache Kommunikation

In dieser Übung werden wir Techniken kennenlernen, mit denen sich binäre Daten mit der BASIC Stamp übertragen und empfangen lassen. Es wird eine binäre Tastatur benutzt, mit der binäre Zahlen an die BASIC Stamp übertragen, von ihr verarbeitet und dargestellt werden. Die Darstellung erfolgt mit Hilfe von LEDs und im Terminalfenster; dort wird auch der äquivalente Dezimalwert angezeigt.

Mikrocontroller arbeiten mit den binären Zahlen 0 und 1. Die BASIC Stamp gehört zu einer Klasse von elektronischen Bauteilen, die den Spannungszustand von 0V als eine binäre 0 und +5V als eine binäre 1 interpretieren.

Mit binären Systemen lassen sich sowohl Zustände als auch Zahlen darstellen. Mit den beiden Ziffern 0 und 1 lassen sich zum Beispiel die Zustände geschlossen/offen oder an/aus bei Schaltern und Tastern beschreiben oder ja/nein, hell/dunkel, rot/grün bei LEDs. Es gibt viele weitere Beispiele, die man aufzählen könnte.

Kombinationen aus Nullen und Einsen beschreiben dezimale Zahlen. Der binären Darstellung 10012 entspricht zum Beispiel die Dezimalzahl 9. Die tiefer gestellte 2 weist bei der Ziffernfolge aus Nullen und Einsen darauf hin, dass es sich nicht um die Zahl eintausendundeins sondern um eine Binärzahl handeln soll. Damit sind Verwechselungen ausgeschlossen. Mit diesen Zahlen lassen sich zum Beispiel analoge Informationen beschreiben. Weitere Informationen zum Binärsystem gibt es hier.

Einfache Kommunikation
Material

1x  Board of Education mit BASIC Stamp, Steckernetzteil und USB-Verbindungskabel

2x  Widerstand, 470 Ohm

2x  Widerstand, 220 Ohm

2x  Widerstand, 10 kOhm

2x  Taster

2x  LED, rot

div. Steckdraht

Aufgaben
  • Übertrage das Programm taster1.bs2 in den Editor und speichere es ab.
  • Starte das Programm.
  • Drücke eine beliebige Taste und beobachte die Anzeige im Terminal. Es können auch beide Taster gleichzeitig gedrückt werden.

In dieser ersten, einfachen Übung, benutzen wir zwei Taster als Eingabemedium. Links ist das Schaltsymbol zu sehen und rechts die Bauausführung.

Schaltskizze und Schaltungsaufbau

Abbildung 1 - Schaltskizze und Schaltungsaufbau

Für die Eingabe von Binärzahlen über die Taster ist es einfacher, wenn das BoE um 90° gedreht wird und so positioniert ist, wie in Abb. 1 dargestellt.

 

Bevor wir an das PBASIC Programm gehen, ist es zunächst wichtig, dass man die elektronischen Schaltungen versteht. Die beiden LEDs sind über je einen Vorwiderstand von 470 Ohm an P4 und P5 angeschlossen. Geht P4 auf HIGH, fließt ein Strom über den Widerstand und die LED, die dann in Durchlassrichtung gepolt ist; die LED leuchtet. Wird P4 LOW, kann kein Strom fließen und die LED leuchtet nicht. Gleiches gilt für P5.

Schauen wir uns jetzt den Taster an P0 an. Wird der Taster gedrückt, dann fließt ein Strom von Vdd über den 10kOhm Widerstand nach Vss. Der Spannungsabfall über dem Widerstand ist sehr hoch; es fällt nahezu die gesamte Spannung Vdd über ihm ab und Punkt P geht damit auf nahezu Vdd und P0 sieht ein HIGH Signal. Wird der Taster los gelassen, liegt Punkt P über dem Widerstand 10kOhm direkt an Vss. P0 sieht in diesem Fall ein LOW-Signal. Das Gesagte gilt auch für den zweiten Taster.

Das Programm Taster1.bs2

Wie arbeitet die Schaltung?

Wenn Taster P0 offen bleibt (nicht gedrückt), liegt an P0 LOW oder eine 0 und P5 erhält ein LOW Signal.

Wenn Taster P0 gedrückt wird, liegt an P0 HIGH oder eine 1 und P5 erhält ein HIGH Signal.

Wenn Taster P1 offen bleibt, liegt an P1 LOW oder eine 0 und P4 erhält ein LOW Signal.

Wenn Taster P1 gedrückt wird, liegt an P1 HIGH oder eine 1 und P4 erhält ein HIGH Signal.

 

Über das Debug Terminal werden die Zustände an P0 und P1 ausgegeben.

Abbildung 2 - Ausgabe von Tastaturzuständen im Debug Terminal

Wird der Taster an P0 gedrückt, erscheint im Terminal  0 1 und als Dezimalzahl 1; wird der Taster an P1 gedrückt, erscheint 1 0 und als Dezimalzahl 2. Werden beide Taster gleichzeitig gedrückt, erscheinen im Terminal 1 1 und als Dezimalzahl die 3. Mit Hilfe der beiden Taster haben wir so zweistellige Binärzahlen mit ihrem dezimalen Äquivalent dargestellt.

Wie arbeitet das Programm?

Am Anfang werden die drei Variablen a, b und d definiert. a und b sind vom Typ Bit, d vom Typ Nib.

Zeilen 8 - 13

Die Ports P0 und P1 werden als Inputs, P4 und P5 als Outputs deklariert. Der nachfolgende debug-Befehl öffnet das Terminalfenster und löscht alle Einträge dort.

 

In der folgenden DO...LOOP Endlosschleife werden alle Befehle wiederkehrend immer wieder ausgeführt. Es werden damit auch alle Eingänge der BASIC Stamp ständig abgefragt.

 

Zeilen 16 - 19

Bei jedem Schleifendurchlauf werden die Eingänge P0 und P1 abgefragt und die Ergebnisse über die LEDs an P4 und P5 optisch angezeigt.

 

Zeile 20

In dieser Programmzeile werden die binären Darstellungen an beiden Tastern auf Basis des binären Stellenwertsystems in eine Dezimalzahl umgerechnet.  

 

Zeilen 21 - 26

Mit Hilfe der nachfolgenden sechs debug-Befehle wird die Terminalausgabe gestaltet.

2 - Parallele Übertragung

Im Programm Taster1.bs2 werden die Taster mit jedem Schleifendurchlauf abgefragt und das immer und immer wieder. Dabei wartet die BASIC Stamp nicht auf ein Signal von außen, das signalisiert, dass Daten bereitgestellt sind. Eine solche Art der Datenübertragung an die BASIC Stamp bezeichnen wir als asynchron.

Die binären Daten werden über zwei separate Datenleitungen P0 und P1 zur gleichen Zeit an die BASIC Stamp übertragen; wir sagen dazu auch: die Daten werden parallel übertragen.

Die BASIC Stamp verfügt über 16 I/O Pin. Wir wären damit in der Lage ein Zahl vom Typ Word parallel an die BASIC Stamp zu übertragen. Der Nachteil ist, wir haben keine einzige weitere Datenleitung mehr in Reserve.

Im Umgang mit größeren Binärzahlen kann deshalb eine serielle statt einer parallelen Übertragung sehr nützlich sein, da sie die benötigten I/O Pin der BASIC Stamp deutlich reduziert. Aber wie soll die aussehen?

3 - Serielle Datenübertragung

Bei der Übertragung serieller Daten muss die BASIC Stamp irgendwie informiert werden, dass ein neues Bit übertragen werden soll. Dazu verfügt der Controller bereits über eingebaute Funktionen zur  synchronen und asynchronen seriellen Datenübertragung.

 

Die Datenbits werden über eine Leitung bitweise (eines nach dem anderen) und mit fester Impulslänge übertragen.

Das Protokoll einer seriellen Datenübertragung hat festgelegte Parameter, die eingehalten werden müssen, damit die Übertragung fehlerfrei funktioniert.

  • Eine typische Einstellung ist zum Beispiel: 9600 N 8 1.
  • Dabei steht die 9600 für die Baudrate (Übertragungsrate). Datenbits werden mit einer präzisen Geschwindigkeit übertragen, was in bits per second (bps) oder als Baudrate (baud) angegeben wird. Der reziproke Wert der Baudrate gibt die Impulsdauer eines Bits an. Demnach entspricht 9600 baud einer Impulsdauer von 1/9600 s oder 104,17 µs. Bei einer seriellen Verbindung muss diese vereinbarte Impulsdauer sehr genau eingehalten werden, wenn die Verbindung stabil sein soll.
  • Das N steht für no parity Bit. Ein parity bit überprüft, ob die Anzahl der gesendeten und empfangenen Datenbits identisch ist. Fehlt dieses zusätzliche Überprüfungsbit, dann wird das über die Angabe von N (no checking oder no parity bit) kenntlich gemacht.
  • Die Zahl 8 gibt die Anzahl der zu übertragenden Bits an.
  • Die letzte Zahl ist bei einer BASIC Stamp entweder eine 1 oder eine 0. Sie gibt die Anzahl der Stopp-Bits an. Darunter ist die Pause zwischen dem letzten übertragenen Datenbit und dem nächsten Startbit zu verstehen.

Serielle Signale kennen zwei Zustände (mark und space). Bei einer konventionellen RS-232 Schnittstelle entspricht mark -10 Volt und entsprechend space +10 Volt. Im Leerlauf liegen auf der Datenleitung -10 Volt (Stopp-Bit Zustand).

4 - Start einer Datenübertragung

Eine Übertragung wird eingeleitet mit einem space (+10 Volt) Signal von einer Impulslänge. Anschließend folgen die Datenbits. Einem mark entspricht "-" oder 1, einem space entsprechend "+" oder 0. 

5 - Serielle Daten empfangen

Die BS2 arbeitet mit einer 5 Volt Logik, das heißt, einer 0 entspricht 0 Volt, einer 1 entspricht +5 Volt. An ihren Eingängen interpretiert die BS2 einen Spannungspegel kleiner 1,5 Volt als eine 0 und entsprechend einen Spannungspegel größer 1,5 Volt als eine 1. Die Spezifikation einer RS232-Schnittstelle legt fest, dass einer logischen 0 ein Pegel von +10 Volt und einer 1 von -10 Volt entspricht. Bei einer Übertragung über eine RS232 entspricht einer 0 eine Ausgangsspannung zwischen +5 und +15 Volt, während der Empfänger Spannungspegel zwischen +3 und +15 Volt als 0 interpretiert. Damit werden eventuelle Spannungsabfälle bei langen Übertragungswegen einkalkuliert.

 

ACHTUNG: 5 Volt (HIGH oder 1) entspricht bei einer RS232 einer logischen 0.

 

Einer logischen 1 entspricht bei einer RS232 Übertragung eine Spannung zwischen -5 und -15 Volt. Berücksichtigt man lange Übertragungswege, dann würde ein Empfänger Spannungen zwischen -3V und -15 Volt als logische 1 erkennen. Dazu ist die BS2 nicht in der Lage, kann aber trotzdem Datenübertragungen nach dem RS232-Standard ausführen. Das liegt daran, dass die meisten RS232-Geräte Spannungen um 0 Volt bereits als eine logische 1 interpretieren.

 

ACHTUNG: 0 Volt (LOW oder 0) entspricht bei einer RS232 einer logischen 1. 

 

Empfängt eine BS2 Daten von einem externen RS232-Gerät, dann sind dies +/- 15 Volt Signale, die, bevor sie an den Eingang einer BS2 gelangen, im Pegel angepasst werden müssen. Mit einem zur Datenleitung in Reihe geschalteten Widerstand von ca. 22 - 33 kOhm Widerstand werden die Eingänge des Controllers vor zu hohen Spannungswerten geschützt oder man benutzt sogenannte Pegelumsetzer wie den MAX232.

6 - Die Befehle SERIN und SEROUT

Die Sprache BASIC Stamp stellt für die serielle Datenübertragung mit der BASIC Stamp 2 zwei Befehle zur Verfügung.

 

  • serin Rpin {\Fpin}, Baudmode, {Plabel, } {Timeout, Tlabel, } [InputData]
  • serout Tpin {\Fpin}, Baudmode, {Pace, } {Timeout, Tlabel, } [OutputData]

 

Parameter Bedeutung
Rpin Variable, Konstante, Term (0 - 16), die den I/O Pin festlegt, über den Daten empfangen werden. Mit Rpin 16 erfolgt die Eingabe im Debug Terminal.
Tpin Variable, Konstante, Term (0 - 16), die den I/O Pin festlegt, über den Daten versandt werden. Der Pin wird als Output deklariert. Mit Tpin 16 erfolgt die Ausgabe im Debug Terminal.
Fpin optionale Variable, Konstante, Term (0 - 15), die den I/O Pin festlegt, über den der Status der Datensteuerung angezeigt wird.
Baudmode Variable, Konstante, Ausdruck (0 - 65535), die das serielle Timing und die Konfiguration festlegt.
Plabel Optionale Einsprungsmarke bei einem Parityfehler. Sollte nur gesetzt werden, wenn Baudmode auf 7 Bit und even parity gesetzt ist.
Pace Optionale Variable, Konstante, Ausdruck (0 - 65535), mit der die Pause zwischen übertragenen Bytes festgelegt wird. Lässt sich nicht mit Fpin und Timeout  kombinieren.
Timeout Optionale Variable, Konstante, Ausdruck (0 - 65535), die serin mitteilt, wie lange auf einlaufende Daten gewartet werden soll. Werden im vorgegebenen Zeitfenster keine Daten empfangen, verzweigt das Programm zur Einsprungsmarke Tlabel.
Tlabel Einsprungmarke, die in Verbindung mit Timeout steht.
InputData Liste von Variablen und Formatanweisungen, die festlegt, was mit den einlaufenden Daten geschehen soll. Daten lassen sich in Variablen oder Arrays ablegen als nummerische Größen (decimal, binary oder hex).
OutputData Liste von Variablen, Konstanten, Ausdrücken und Formatanweisungen, die festlegt, wie die gesendeten Daten formatiert werden sollen.

Tabelle zur Festlegung des Baudmode

Serout wird für die asynchrone serielle Datenübertragung und serin für den Empfang asynchroner serieller Daten eingesetzt. Die Parameterliste mag etwas beängstigend lang aussehen; in der Praxis wird man häufig nur die Grundformen nutzen, wie sie in den folgenden Beispielen gezeigt werden.

Beispiel 1

Am Eingang des Debug Terminals wird auf die richtige Eingabe gewartet. Wird das Wort "Geheim" eingetippt, setzt das Programm seine Arbeit fort und gibt den Text "Passwort ok" aus.

Beispiel 2

Der Eingang P16 erwartet eine Zahleingabe, wartet solange, bis dies im Terminal erfolgt und mit einem Zeilenrücklauf abgeschlossen ist und gibt anschließend den eingegebenen Wert im unteren Fenster des Terminals aus.

Beispiel 3

Über P16 (Debug Terminal) wird der Text in eckigen Klammern ausgegeben.

Beispiel 4

Dem ASCII-Wert 81 ist ein bestimmtes Symbol zugeordnet, das im Debug Terminal angezeigt wird.

Beispiel 5

Wie in Beispiel 4 nur mit der Formatierungsanweisung DEC. Sie gibt den Dezimalwert der Zahl 81 aus und das ist 81!

                                                        ----------------------------------------------

Im folgenden Abschnitt 7 werden wir mit den Tastern aus dem vorherigen Versuch der BASIC Stamp ein 4 Bit langes Datenwort seriell synchron übertragen. Das Ergebnis wird im Debug Terminal angezeigt.

7 - Synchrone serielle Übertragung

Synchrone serielle Übertragung von Daten
Material

wie in Übung 2 - Schaltungsaufbau zur einfachen Kommunikation

Aufgaben
  • Übertrage das Programm synchron.bs2 in den Editor und speichere es ab.
  • Starte das Programm und gehe dann genau so vor, wie es im zweiten Aufgabenblock beschrieben ist.

Das Programm synchron.bs2

Versuchsdurchführung und Ausgabe im Terminalfenster

Nachdem das Programm gestartet wurde, erscheint zunächst ein leeres Terminalfenster. Zur synchronen seriellen Übertragung der Daten folge genau den Anweisungen.

  1. Drücke den rechten Taster an P0 (IN0 auf 1, Dateneingabe) und halte ihn gedrückt.
    
  2. Drücke anschließend den linken Taster an P1 (Taktgeber).
    

Im Terminal sollte folgende Meldung erscheinen:

  1. Nimm den Finger vom rechten Taster an P0 (IN0 auf 0, Dateneingabe) und drücke den linken Taster an P1 (Taktgeber) noch einmal. 
    

Die Ausgabe ändert sich wie folgt:

  1. Drücke und halte den rechten Tasterknopf (IN0 auf 1, Dateneingabe) und drücke zweimal hintereinander auf den linken (P1, Taktgeber). 
    

Im Terminal sollte die folgende Darstellung zu sehen sein:

Wenn das Programm alles so gemacht hat, wie hier beschrieben, dann hast du soeben synchron 4 Bit seriell in den RAM der BASIC Stamp verschoben. Zusätzlich wurde festgestellt, dass der binären Zahl IOII die Dezimalzahl 11 entspricht.

 

Im Zeitdiagramm wird noch einmal gezeigt, wie der Ablauf im Einzelnen ist. Der linke Taster entspricht einem CLK-Signal (Taktgeber), das aus einer Reihe von Pulsen/Takten besteht. Jedem Zeittakt entspricht das Drücken und Loslassen des linken Tasterknopfes und überträgt an P1 ein LOW-HIGH-LOW Signal. Jedes mal wenn der linke Taster losgelassen wird, überprüft die BASIC Stamp den Status der Datenleitung, die entspricht dem Status des rechten Tasters P0. Die BS ist so programmiert, dass sie die Eingangsdaten liest, nach einem Wechsel des CLK-Signals von HIGH auf LOW (fallende Flanke). Bei dieser Art der Übertragung spricht man auch von der negativen Flanke des Taktsignals.

Abbildung 3 - Zeitdiagramm

Wie arbeitet das Programm?

Der Hauptteil des Programms spielt sich in der FOR ... NEXT Schleife zwischen den Zeilen 10 und 21 ab. Die Schleife wird viermal durchlaufen; anschließend werde die beiden debug-Befehle in Zeile 23 und 24 ausgeführt und das Programm beendet.

Innerhalb der FOR ... NEXT Schleife befindet sich in Zeile 12 und 13 eine Bedingungsschleife DO ... LOOP. Sie wird solange ausgeführt, bis am Eingang P1 ein HIGH-Signal erkannt wird (Taster P1 wird  gedrückt). Erst dann wird das Programm fortgesetzt und trifft in Zeile 15 und 16 auf eine weitere Bedingungsschleife DO ... LOOP. Sie wird ebenfalls solange durchlaufen, bis am Eingang P1 ein LOW-Signal erkannt wird (Taster P1 wird nicht gedrückt oder losgelassen).

 

Erster Schleifendurchlauf der FOR...NEXT Schleife

An P0 liegt eine 1, solange die rechte Taste gedrückt ist (Schritt 1 bei der Versuchsdurchführung). Der Taster an P1 (Taktgeber) wird einmal gedrückt (steigende und fallende Flanke, Schritt 2 bei der Versuchsdurchführung). Sobald der Taktgeber bedient wird können die beiden Bedingungsschleifen in den Programmzeilen 12,13 und 15, 16 durchlaufen werden und das Programm macht weiter in Zeile 18.

 

Zeile 18

Mit einem Schiebebefehl werden alle Bits im Speicher d vom Typ Nib (4 Bit) um eine Stelle nach links verschoben, dabei wird die rechts frei werdende Stelle (LSB -> least significant bit) mit einer Null aufgefüllt, die links herausfallende Stelle (MSB -> most significant bit) ist verloren. Das Ergebnis der Schiebeaktion wird d zugewiesen.

 

Zeile 19

Die an P0 anliegende 1 wird zum Inhalt von d addiert und das Ergebnis der Variablen d zugewiesen.

Zeile 20

Ergebnis des Schiebe- und Additionsvorgangs (untere Zeile in der Abbildung) im Terminal ausgeben.

 

Zweiter Schleifendurchlauf der FOR ... NEXT Schleife

Nach Schritt 3 in der Versuchsausführung soll der Finger vom rechten Taster (Dateneingabe) genommen werden, Damit steht an IN0 eine 0. Wird jetzt der Taktgeber (linker Taster an P1) gedrückt, werden wieder die beiden Bedingungsschleifen erfüllt und das Programm macht in Zeile 18 weiter.

 

Zeile 18

Der Schiebebefehl nach links wird ausgeführt.

 

Zeile 19

Die an P0 anliegende 0 wird zum Inhalt von d addiert und das Ergebnis der Variablen d zugewiesen.

Zeile 20

Ergebnis des Schieb- und Additionsvorgangs (untere Zeile) im Terminal ausgeben.

 

Dritter Schleifendurchlauf der FOR ... NEXT Schleife

Bei Schritt 4 in der Versuchsausführung soll der rechte Taster (Dateneingabe) gedrückt werden, Damit steht an IN0 eine 1. Anschließend wird der Taktgeber (linker Taster an P1) einmal gedrückt, die beiden Bedingungsschleifen sind erfüllt und das Programm macht in Zeile 18 weiter.

 

Zeile 18

Der Schiebebefehl nach links wird ausgeführt.

 

Zeile 19

Die an P0 anliegende 1 wird zum Inhalt von d addiert und das Ergebnis der Variablen d zugewiesen.

Zeile 20

Ergebnis des Schieb- und Additionsvorgangs (untere Zeile) im Terminal ausgeben.

 

 

Vierter Schleifendurchlauf der FOR ... NEXT Schleife

Bei Schritt 4 in der Versuchsausführung wird der Taktgeber (linker Taster an P1) ein zweites mal gedrückt, während der Taster an P0 gedrückt bleibt. Mit dem zweiten Drücken auf den Taktgeber an P1 werden wieder beide Bedingungsschleifen erfüllt und das Programm macht in Zeile 18 weiter.

 

Zeile 18

Der Schiebebefehl nach links wird ausgeführt.

 

Zeile 19

Die an P0 anliegende 1 wird zum Inhalt von d addiert und das Ergebnis der Variablen d zugewiesen.

Zeile 20

Ergebnis des Schieb- und Additionsvorgangs (untere Zeile) im Terminal ausgeben.

 

Die Schleife ist viermal durchlaufen worden und damit setzt das Programm seine Arbeit in Zeile 23 fort. Die beiden Texte in Programmzeile 23 und 24 werden im Terminal ausgegeben und das Programm beendet.

 

Kommentar schreiben

Kommentare

  • olaf (Sonntag, 10. Dezember 2017 08:35)

    wow...die mit Abstand beste Site, die ich bisher zu diesem Thema gesehen habe :-))
    Vielen Dank dafür. Hilft super beim Erklären!!

  • David Eisenblätter (Sonntag, 11. Februar 2018 13:38)

    Sehr schön erklärt, und zufällig heute, wo ich nochmal nach einer detailierten Gedankenstütze diesbezüglich gesucht habe!

    Vielen vielen Dank!

    David.

Bitte geben Sie den Code ein
* Pflichtfelder
Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf