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

1 - Miniatur-Drucktaster

Viele Geräte sind heute mit sogenannten Drucktasten ausgerüstet. Vom Computer über den Taschen-rechner bis hin zur Mikrowelle und der Fernbedienung für Audioanlagen haben alle Geräte eines gemeinsam: Drucktasten. In jedem dieser Geräte befindet sich ein Mikrokontroller, der, sobald eine der Tasten gedrückt wird, diese Änderung wahrnimmt und eine der Taste entsprechende Aktion auslöst.

 

 

 

 

 

 

Abb. 3.1  Drucktasten eines elektronischen Wörterbuchs

In Lektion 2 haben wir die BASIC Stamp so programmiert, dass sie einen I/O Pin auf 1 (+5V) oder 0 ( 0V) setzte. Mit Hilfe der beiden Befehle HIGH und LOW konnte ein Ausgangspin in den jeweiligen Zustand gesetzt werden und mit Hilfe einer LED sahen wir die Wirkung. Der I/O Pin wurde dabei als Ausgang genutzt.

In dieser Lektion werden die I/O Pins auch als Eingang benutzt, das heißt, dass der Kontroller den Port daraufhin überprüft, ob ein HIGH oder LOW Signal an ihm anliegt. Mit Hilfe einer Drucktaste wird ein 1 oder 0 Signal erzeugt und die BASIC Stamp überprüft, welcher der beiden Zustände eingenommen wird.

Testschaltung für Drucktaster mit Hilfe einer LED-Anzeige

Wenn sich mit einem Drucktaster HIGH- und LOW-Signale erzeugen lassen, dann muss es ja auch möglich sein, damit eine LED ein- bzw. auszuschalten. Bevor wir uns das genauer anschauen, kümmern wir uns erst einmal um den Drucktaster.

 

 

2 - Drucktaster

Drucktaster gibt es in sehr vielen unterschiedlichen Ausführungen, Farben und Formen. Wir benutzen eine sehr kleine Ausführung, sogenannte Miniatur-Drucktaster und schauen uns an, wie die vier Anschlussbeinchen beschaltet sind.

 

Abbildung 3.2a

Drucktaster geöffnet. Im

Normalzustand sind die

Kontakte nicht geschlossen.

 

Abbildung 3.2b

Schaltsymbol Drucktaster

Pin 1 und Pin 4 des Drucktasters sind miteinander verbunden (Abb. 3.3), genau so wie Pin 2 und 3. Diese vier Anschlussbeinchen verleihen einem Taster eine höhere mechanische Stabilität.

Das Schaltsymbol zeigt, dass der Schalter im Normalzustand geöffnet ist oder wie wir auch sagen, der Stromkreis unterbrochen ist. Die Kontakte 1 und 2 haben keine elektrischen Verbindungen zu den Kontakten 2 und 3. Mit dem Drücken des Tasters werden die Kontakte zwischen den Anschlussbeinchen 1, 4 und 2, 3 hergestellt; ein Strom kann fließen, der Stromkreis wurde geschlossen.

 

 

Abbildung 3.3a

Drucktaster mit Anschlussbelegung

Abbildung 3.3b  Schaltsymbol Drucktaster mit Anschlussbelegung

In dieser Lektion lernst du

  • zu unterscheiden zwischen einem I/O Port Ausgang und Eingang.
  • wie ein Drucktaster aufgebaut ist und wie er beschaltet wird.
  • das Schaltsymbol eines Drucktaster kennen.
  • eine Tasterschaltung aufzubauen und zu erklären.
  • den Befehl IN kennen.
  • zu unterscheiden zwischen einem pull-up und pull-down Widerstand.
  • zu unterscheiden zwischen active-high und activ-low Tasten-schaltungen.
  • den Entscheidungsbefehl IF .. THEN .. ELSE kennen und anzuwenden.
  • eine Schaltung mit einem oder mehreren Tastern nach Schaltplan aufzubauen.
  • umfangreichere Schaltpläne zu lesen und auf dem Steckbrett aufzubauen.
  • was ein Befehlsblock ist.
  • wie man in PBASIC mit Kommazahlen rechnet.
  • einen Reaktionszeitmesser aufzubauen und zu programmieren.
  • Kommentarzeilen in ein Programm einzubauen.

3 - Testschaltung 1 für einen Drucktaster

Material

1x BASIC Stamp Board of Education

1x Miniatur-Drucktaster - Schließer

1x Widerstand 470 Ohm (gelb - violett - braun)

1x LED

1x Verbindungsdrähte

1x micro-USB Kabel

Aufgabe

Baue die Schaltung nach Abbildung 3.4 auf.

Überprüfe die Funktion des Taster und notiere die Ergebnisse.

 

Schaltskizze und Schaltungsaufbau

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 3.4

Schaltungsaufbau auf dem Steckbrett  Courtesy of Parallax Inc.

 

 

 

 

 

 

 

 

Abbildung 3.4a

Schaltskizze für Übung 1

 

Meine Ergebnisse

 

Betrachte die LED und antworte dann.

Wenn der Taster T1 nicht gedrückt wird, dann

 

________________________________________.

 

Wenn der Taster T1 gedrückt wird, dann

 

_____________________________________________.

Sollte die grüne LED auf dem Board of Education an Leuchtkraft verlieren, anfangen zu flackern oder sogar ganz ausgehen, dann gibt es irgendwo in der aufgebauten Schaltung einen Kurzschluss. Sollte dies der Fall sein, muss die Spannungsversorgung sofort unterbrochen werden. Anschließend kann in Ruhe nach dem Fehler gesucht werden.

Wie arbeitet die Testschaltung?

Wird der Drucktaster nicht betätigt, ist er offen. Dies wird links im Bild 3.5 gezeigt. Ein Strom kann aufgrund der Unterbrechung (offener Stromkreis) nicht vom + - Pol zum Minuspol fließen. Die LED leuchtet nicht.

Im rechten Bild ist der Taster geschlossen. Der Stromkreis ist geschlossen und die elektrische Ladung fließt vom Pluspol über den Taster T1, den Widerstand und die LED zum Minuspol. Die LED leuchtet.

 

 

 

 

 

 

 

 

Abbildung 3.5

Drucktaster geöffnet (links)

Drucktaster geschlossen (rechts)

4 - Testschaltung 2 für einen Drucktaster

 

In der folgenden Schaltung verhält sich die LED anders, weil der Taster parallel zur LED geschaltet ist. Wird der Taster nicht gedrückt, leuchtet die LED, wird er gedrückt, erlischt sie. Der Grund dafür liegt in der Tatsache begründet, dass der elektrische Strom sich immer den Weg des geringsten Widerstands nimmt.

 

Schaltskizze und Schaltungsaufbau

 

 

 

 

 

 

 

 

 

 

Abbildung 3.6  Taster T1 überbrückt die LED  Courtesy of Parallax Inc.

 

 

 

 

 

 

 

 

 

 

Abbildung 3.6a  Schaltskizze zu Übung 2

Aufgabe

Baue die Schaltung nach Abbildung 3.6 auf.

Überprüfe die Funktion des Taster und notiere die Ergebnisse.

 

 

Meine Ergebnisse zur Schaltung aus Abb. 3.6

 

Betrachte die LED und antworte dann.

Wenn der Taster T1 nicht gedrückt wird, dann

 

________________________________________.

 

Wenn der Taster T1 gedrückt wird, dann

 

_____________________________________________.

 

Gib eine kurze Erklärung für das Verhalten der LED mit eigenen Worten ab.

 

_________________________________________________________

 

_________________________________________________________

 

_________________________________________________________

 

_________________________________________________________

 

_________________________________________________________

 

 

 

 

5 - Den Zustand eines Drucktasters abfragen

Material

1x BASIC Stamp Board of Education

1x Miniatur-Drucktaster - Schließer

1x Widerstand 10 k W  (braun - schwarz - orange)

1x Widerstand 220 W (rot - rot - braun)

2x Verbindungsdrähte

1x micro-USB Verbindungskabel

Aufgabe

Baue die Schaltung nach Abbildung 3.7 auf.

 

 

 

 

 

 

 

 

 

Abbildung 3.7  Schaltung mit Miniatur-Drucktaster, der mit dem I/O Port P3 verbunden ist.  Courtesy of Parallax Inc.

 

 

 

 

 

 

 

 

Abbildung 3.7a  Schaltskizze zu Übung 3

 

Wie arbeitet die Schaltung aus Übung 3.3?

Im Normalzustand ist der Drucktaster geöffnet. Es fließt kein Strom vom Plus- zum Minuspol. Zwischen dem Punkt K und Vss kann keine Spannung gemessen werden. Der Eingang P3 "sieht", dass eine 0 anliegt.

Wird der Schalter geschlossen, fließt ein Strom von Vdd über den 10k Widerstand nach Vss. Zwischen K und Vss liegt nahezu die volle Spannung von +5V an oder anders ausgedrückt - über dem Widerstand fällt nahezu die komplette Spannung von 5V ab. Der Eingang P3 erkennt, dass eine 1 anliegt.

In einem binären Zahlensystem kennt man nur die Ziffern 0 und 1. Aus ihnen lassen sich alle Zahlen darstellen. Die BASIC Stamp interpretiert Vdd (5V) als eine binäre 1 und Vss (0V) als eine binäre 0. Ebenso gilt umgekehrt, wenn eine BASIC Stamp über den Befehl HIGH einen I/O Pin auf Vdd setzt, dann sendet sie eine 1 und wenn der I/O Pin mit LOW auf Vss gesetzt werden soll entsprechend eine 0.

Sobald eine BASIC Stamp an ihrem I/O Pin P3 eine 1 oder eine 0 erfasst, wird dieser Wert im Speicherplatz IN3 abgelegt. Das werden wir uns jetzt in einem Beispielprogramm genauer anschauen.

6 - Tasterinformation im Terminal anzeigen

 

Im folgenden Programm fragt die BASIC Stamp alle 0,25s den Zustand des Eingang P3 ab und speichert seinen Wert in IN3. Anschließend wird der Wert im Terminal ausgegeben.

Abbildung 3.8 zeigt die Darstellung im Terminal während eines Programmlaufs; sobald der Drucktaster betätigt wird, erscheint eine 1, sonst eine 0.

 

 

 

 

 

 

 

 

 

Abbildung 3.8

Der Zustand eines Drucktasters wird im Terminalfenster angezeigt.

Aufgabe

Gib das Programm 03_03 ein.

Speicher das Programm unter 03_03.bs2 auf dem Stick.

Starte das Programm und überprüfe, ob die Terminalausgabe erfolgt: eine 1 wird angezeigt, wenn der Taster gedrückt wird, eine 0, wenn er nicht gedrückt wird.

 

 

Das Programm 03_03.bs2

 

 

Wie arbeitet das Programm 03_03.bs2?

Die Endlosschleife DO ... LOOP wiederholt sich alle 0,25s. Bei jedem Schleifendurchlauf wird mit Hilfe des DEBUG Befehls der Text  IN3 =   und der Speicherinhalt von IN3 ausgedruckt. Der dargestellte Wert gibt den Zustand am Eingang von P3 wieder.

 

Jetzt kommst du!

In der eben benutzten Schaltung aus Abb. 3.7 und 3.7a wurde der 10kW Widerstand direkt mit Vss verbunden. Ein solcher Widerstand wird als pull-down Widerstand bezeichnet, da er den Spannungswert an P3 auf 0V herunterzieht, sobald der Taster gedrückt wird.

Im folgenden Schaltbild benutzen wir einen pull-up Widerstand, der die Spannung auf 5V anhebt, wenn der Taster nicht gedrückt wird. Die Rollen sind hier vertauscht: wird der Taster nicht gedrückt, wird in IN3 eine 1, sonst eine 0 abgelegt.

 

7 - Taster mit Pull-up Widerstand

Material

1x BASIC Stamp Board of Education

1x Miniatur-Drucktaster - Schließer

1x Widerstand 10 k W  (braun - schwarz - orange)

1x Widerstand 220 W (rot - rot - braun)

2x Verbindungsdrähte

1x micro-USB Verbindungskabel

Aufgabe

Baue die Schaltung nach Abbildung 3.9 auf.

Starte das Programm 03_03 noch einmal.

Überprüfe im Terminal, ob sich der Taster so verhält wie beschrieben.

Schaltskizze und Schaltungsaufbau

 

 

 

 

 

 

 

Abbildung 3.9 

Pull-up Schaltung mit Miniatur-Drucktaster verbunden mit dem I/O Port P3.  Courtesy of Parallax Inc.

 

 

 

 

 

 

 

Abbildung 3.9a

Schaltskizze

Active-low, Active-high

Die Schaltung mit dem Drucktaster aus Abbildung 3.9 heißt auch active-low, da sie der BASIC Stamp das Signal 0 sendet, wenn der Taster T1 aktiv ist (gedrückt wird).

Der Schaltkreis mit Drucktaster aus Abbildung 3.7 heißt auch active high, da er ein 1 Signal bei aktivem Schalter sendet.

Drucktasten und LED Schaltkreis - Wie geht das zusammen?

Ob ein elektrisches Gerät ein- oder ausgeschaltet ist, wird heute wie selbstverständlich über eine LED Anzeige signalisiert. Der Einschaltknopf an dem Gerät ist irgendwie direkt mit einer LED verbunden, denn sobald das Gerät eingeschaltet wird, leuchtet auch eine meist grüne LED auf; umgekehrt geht sie aus, sobald das Gerät abgeschaltet ist.

Wir werden die BASIC Stamp jetzt so programmieren, dass sie - je nach erfasstem Eingangswert eines Tasters - eine Entscheidung über das weitere Vorgehen trifft.

8 - LED mit einem Taster ein- und ausschalten

Material

1x BASIC Stamp Board of Education

1x Taster - Schließer

1x Widerstand 10 kOhm  (braun - schwarz - orange)

1x Widerstand 220 Ohm (rot - rot - braun)

1x Widerstand 470 Ohm (gelb - violett - braun)

1x LED

2 Verbindungsdrähte

Aufgabe

Baue die Schaltung nach Abbildung 3.10 auf.

Gib das Programm 03_04 ein und speicher es anschließend unter 03_04.bs2 auf deinem Stick ab.

Überprüfe, ob die LED blinkt, wenn der Taster gedrückt wird.

Schaltungsaufbau mit Taster und LED

 

 

 

 

 

 

 

 

 

Abbildung 3.10

Schaltung mit Taster und LED  Courtesy of Parallax Inc.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 3.10a

Schaltskizze zum Versuchsaufbau

 

 

Pseudocode

Starte die Abfrage des Tasters

     Gib den Zustand am Eingang von P3 im Terminal  aus

     Wenn der Taster an P3 gedrückt wird (Zustand 1), dann

           Schalte die LED  an Pin 14 ein

           Warte das Tastenprellen ab

            Schalte die LED an Pin 14 aus

     Ende der Bedingung

Wiederhole das Ganze

Programm 03_04.bs2

Programm 03_04.bs2

 

 

 

Wir arbeitet das Programm 03_04.bs2?

 

Aus der Lektion über LEDs wissen wir bereits, dass sich eine LED an einem Port des Kontrollers über den Befehl HIGH oder LOW ein- bzw. ausschalten lässt, ähnlich einem Lichtschalter im Zimmer.

Wenn wir umgekehrt wissen wollen, welcher Zustand am Port eines Kontrollers vorliegt (ob 0 oder 1), dann müssen wir diesen Zustand abfragen. Dies erfolgt mit dem Befehl:

 

  • IN<Portpin>

 

Mit dieser Kenntnis lässt sich jetzt die Arbeitsweise des vorliegenden Programms leicht erklären:

Pseudocode PBASIC

Starte eine Endlosschleife

 

   Terminal: "IN3 = 0" oder "IN3 = 1"

 

  Wenn T1 gedrückt (P3 = 1), dann

      Setze  P14 auf 1-> LED an

      kleine Pause von 50 ms

      Setze P14 auf 0 -> LED aus

  Ende der Entscheidungsabfrage

 

Wiederhole das Ganze.

 4  DO

 5

 6    DEBUG ? IN 3

 7   

 8    IF (IN3 = 1) THEN

 9      HIGH 14

10      PAUSE 50

11      LOW 14

12    ENDIF

13       

14  LOOP

Jetzt kommst du!

  • Speicher das Programm 03_04.bs2 mit Save As ... unter dem neuen Namen 03_04a.bs2 auf einem Stick.
  • Ändere das Programm so ab, dass die LED nur noch halb so schnell blinkt wie im Programm 03_04.bs2.

9 - Mit zwei Drucktastern zwei LED Schaltkreise steuern

 

Füge einen zweiten Drucktaster und eine zweite LED Schaltung zu den bestehenden Schaltungen aus Übung 6 hinzu.

Material

1x BASIC Stamp Board of Education

2x Taster - Schließer

2x Widerstand 10 kOhm  (braun - schwarz - orange)

2x Widerstand 220 Ohm (rot - rot - braun)

2x Widerstand 470 Ohm (gelb - violett - braun)

2x LED

3 Verbindungsdrähte

 

 

 

 

 

 

Abbildung 3.11a

Schaltbild für zwei LED Schaltkreise

 

 

 

 

 

 

 

 

Abbildung 3.11b

Schaltbild für zwei Schaltkreise mit Drucktastern

Der zugehörige Schaltungsaufbau ist etwas aufwändiger.

 

 

 

 

 

 

 

 

 

Abbildung 3.11c

Schaltungsaufbau mit zwei Drucktastern und zwei LED Schaltkreisen auf dem Steckbrett.  Courtesy of Parallax Inc.

In Übung 6 haben wir den Entscheidungsbefehl IF...THEN...ELSE kennengelernt. In diesem Programm werden wir den Entscheidungsbefehl IF...ELSEIF...ELSE benutzen und zeigen, wie man mit ihm arbeiten kann.

Aufgabe

Baue die Schaltung nach Abbildung 3.11 auf.

Gib das Programm 03_05 ein und speicher es unter dem Namen 03_05.bs2 auf einem Stick ab.

Überprüfe, ob die LED an P14 blinkt, wenn T1 gedrückt wird.

Überprüfe, ob die LED an P15 blinkt, wenn T2 gedrückt wird.

Das Program 03_05.bs2

Programm 03_05.bs2

Wie arbeitet das Program 03_05.bs2?

Wenn viel Text in kurzer Zeit im Terminal erscheint, wird es schwierig den Text zu verfolgen. Eine Möglichkeit das zu verbessern besteht darin, jedesmal, wenn der Bildschirm vollgeschrieben ist, den Cursor wieder oben links im Terminalfenster neu starten zu lassen. Dies wird mit dem Befehl HOME in Verbindung mit dem DEBUG Befehl erreicht.

Bei jedem Durchlauf durch die Endlosschleife DO...LOOP werden die Werte, die an beiden Eingänge IN3 und IN4 anliegen, im Terminal ausgegeben.

Pseudocode PBASIC

Wenn an P3 eine 1 steht, dann

     Setze P14 auf 1

     Warte 50 ms

Wenn an P3 keine 1 aber an P4 steht, dann 

     Setze P15 auf 1

     Warte 50 ms

Wenn weder an P3 noch an P4 eine 1 steht,

     warte 50 ms

  Ende der Entscheidungsabfrage

 9  IF (IN3 = 1) THEN

10    HIGH 14

11    PAUSE 50

12  ELSEIF (IN4 = 1) THEN

13    HIGH 15

14    PAUSE 50

15  ELSE

16    PAUSE 50

17  ENDIF 

 

Meine Beobachtungen, meine Änderungen

 

  • Ergänze jeweils den Satz.
  • Wenn auf einen der beiden Taster gedrückt wird, dann

_______________________________________________

 

_______________________________________________

 

  • Wenn noch einmal auf einen der beiden Taster gedrückt wird, dann

 

_______________________________________________

 

_______________________________________________

 

  • An welcher Stelle muss das Programm wie geändert werden, damit die LEDs blinken, sobald der entsprechende Taster gedrückt wird?

 

_______________________________________________

 

_______________________________________________

 

_______________________________________________

 

  • An welcher Stelle muss das Programm wie geändert werden, damit die LED nur so lange leuchtet wie der Taster gedrückt wird?

 

_______________________________________________

 

_______________________________________________

 

_______________________________________________

 

 

 

10 - Bau eines Reaktionszeitmessers

 

Als Entwicklungsingenieur einer Firma für Videospiele möchte die Marketingabteilung für ihre neue Spielekonsole eine Schaltung entwickeln lassen, mit der ein Spieler auch seine Reaktionszeit testen kann. Deine Aufgabe ist es nun, eine Schaltung zu entwerfen, mit der sich die Reaktionszeit bestimmen lässt.

 

Die Lösung für einen möglichen Schaltungsentwurf wird in dieser Übung aufgebaut und getestet. Es ist eine von vielen Möglichkeiten und soll hier beispielhaft vorgestellt werden. Bevor du weiter liest, halte einen Moment inne und überlege, wie dein Reaktionstester aussehen könnte und wie du das Problem angehen möchtest.

Material

1x BASIC Stamp Board of Education

1x Taster - Schließer

1x Widerstand 10 kOhm  (braun - schwarz - orange)

1x Widerstand 220 Ohm (rot - rot - braun)

1x Widerstand 470 Ohm (gelb - violett - braun)

1x DUO-LED

2x Verbindungsdrähte

Schaltbild und Schaltungsaufbau

 

 

 

 

 

 

 

 

 

 

Abbildung 3.10

Schaltungsaufbau für einen Reaktionszeittester  Courtesy of Parallax Inc.

 

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 3.10b

Schaltbild zum Schaltungsaufbau aus Abb. 3.10

Aufgabe
  • Baue die Schaltung nach Abbildung 3.14 auf.
  • Gib das Programm 03_06 ein und speicher es unter dem Namen 03_06.bs2 auf einem Stick ab.
  • Starte das Programm und überprüfe es.

Ideen zur Programmumsetzung des Reaktionszeitmessers

In diesem Beispielprogramm bleibt die DUO LED so lange ausgeschaltet, bis ein Spieler den Taster drückt und gedrückt hält. Sobald dies geschehen ist, leuchtet die LED für eine kurze Zeit rot auf und springt schließlich auf grün um. Dies ist das Startsignal für den Spieler, den Taster jetzt möglichst schnell loszulassen.

Die Zeit, die zwischen dem Umschalten der LED auf grün und dem Loslassen des Tasters vergeht (d.h. die Zeit, bis das Programm dies festgestellt hat), wird als Maß für die Reaktionszeit genommen.

 

Das Beispielprogramm zeigt wie die Abfrage eines Tasters und ein Zählvorgang, dem ein Zeitmaß unterlegt wird, funktionieren.

Die Idee ist: sobald die DUO LED von rot auf grün umspringt, erfasst die BASIC Stamp über einen mit dem Farbumschlag startenden Zählvorgang die Zeiterfassung. Dazu wird eine Variable zeitpakete eingeführt, die notiert, wieviele Zeitpakete von jeweils 1/1000 Sekunde vom Spieler benötigt werden, bis er den Schalter loslässt.

Nach jeweils 1/1000 Sekunde (pause = 1) wird der Zustand des Tasters abgefragt und damit überprüft, ob er noch geschlossen oder schon wieder offen ist. Ist der Taster noch geschlossen, wird die Zeit um 1/1000 Sekunde  oder ein Zeitpaket erhöht: zeitpakete = zeitpakete + 1.

Die Abfrage stoppt in dem Moment, wo der Taster losgelassen wird; im Terminal erscheint die Anzahl der angehäuften Zeitpakete von jeweils 1/1000 s = 1 ms.

Das Programm 03_06.bs2

Programm 03_06.bs2
Terminalausgabe zum Reaktionstest-Spiel

 

Arbeitsweise des Programm 03_06.bs2

Die Zeit wollten wir über Zeitpakete erfassen; dazu wird die Variable zeitpakete vom Typ word im Zeile 4 des Programms deklariert.

Die Textausgabe im Terminal übernimmt der folgende DEBUG-Befehl in Zeile 6.

Das eigentliche Hauptprogramm läuft in der DO ... LOOP Endlosschleife zwischen Zeile 11 und 36 ab.

Die Endlosschleife in Zeile 12, 13 wird solange durchlaufen, bis am Eingang von P3 eine 1 steht, oder, anders gesagt, bis der Taster an P3 gedrückt wird.

Der weitere Ablauf wird im Hauptprogramm durch eingebaute Kommentare erklärt.

Kommentar: Zur Kommentierung eines Programmcodes sind Kommentarzeilen hilfreich und manchmal auch notwendig. Ein Kommentar beginnt immer mit einem einfachen Hochkomma: '. gefolgt von dem erläuternden Text.

Auskommentieren: In komplexen Programmen, die vielleicht noch nicht fehlerfrei laufen und bei denen es schwer ist, dem Fehler auf die Schliche zu kommen, ist das Auskommentieren von Befehlen sehr hilfreich. Man setzt dazu einfach vor einen Befehl das Hochkomma und macht damit den Befehl für den Compiler unsichtbar, denn er ist jetzt ein Kommentar. Dadurch muss kein Programmcode gelöscht werden.

Eine Variable initialisieren: wird in PBASIC eine Variable deklariert, wird ihr Wert automatisch auf Null gesetzt (initialisiert), bis mit einem weiteren Befehl der Wert verändert wird.

11 - Das Programm zeigt noch Schwächen

 

Punkt 1

Hält ein Spieler den Taster bei grün leuchtender LED 10 Sekunden gedrückt, werden tatsächlich nur ca. 4500 ms oder 4,5 Sekunden angezeigt. Wo steckt der Fehler und wie lässt er sich korrigieren!

 

Es stellt sich heraus, dass für die Ausführung eines Schleifendurchlaufs und das Addieren von 1 zur Variablen zeitpakete vom Kontroller ungefähr 1 ms benötigt wird, ohne dass dabei der Befehl PAUSE 1 schon mitgezählt wurde. Das liegt daran, dass der Kontroller zur Ausführung jedes einzelnen Programmbefehls Zeit benötigt. Während eines Schleifendurchlaufs vergehen also tatsächlich ungefähr 2ms statt wie bisher angenommen 1ms.

Wir können das leicht überprüfen, indem der Befehl PAUSE 1 in Zeile 26 auskommentiert wird. 

26  ' PAUSE 1

Startet man jetzt das Programm neu und hält den Taster nach dem Farbumschlag der DUO-LED auf grün ca. 4 Sekunden gedrückt, wird diese Zeit auch im Terminal angezeigt.

 

Statt die Verzögerung auszukommentieren, ließe sich das Programm auch dadurch korrigieren, dass das Zählergebnis der Zeitpakete von je 1/1000 Sekunde mit zwei multipliziert wird. Dazu fügen wir als neue Zeile 32 ein:

 

32   zeitpakete = zeitpakete * 2

 

und nehmen die auskommentierte Zeile 26 wieder mit in das Programm auf, indem wir das Apostroph am Anfang der Zeile löschen.

Rechnen mit Kommazahlen

mit Hilfe des Operators */  lassen sich auch Multiplikationen mit Dezimalzahlen ausführen.

  1. Setze den Wert oder die Variable, die mit einer Kommazahl multiplizert werden soll, links vor den */ Operator.
  2. Multipliziere als nächstes die Kommazahl mit 256.
  3. Runde das Ergebnis auf die Einerstelle auf oder ab.
  4. Platziere diesen Wert rechts vom */ Operator.

 

Beispiel: Der Zahlenwert in der Variablen zeitpakete soll mit 3.69 multipliziert werden. 

  1. Setze zeitpakete links vor den */ Operator:zeitpakete = zeitpakete */ 
  2. Multipliziere die Kommazahl mit 256:  3.69 X 256 = 944.64.
  3. Runde auf: 944.64 ≈  945.
  4. Platziere diesen Wert rechts vom */ Operator: zeitpakete = zeitpakete */ 945

Punkt 2

Spieler finden sehr schnell heraus, dass die Verzögerungszeit von rot auf grün eine Sekunde beträgt. Nach einigen Spielrunden werden sie die feste Verzögerungszeit abschätzen und darauf besser reagieren können; damit gibt die gemessene Verzögerungszeit nicht mehr die wahre Reaktionszeit eines Spielers an.

 

Die BASIC Stamp verfügt über einen RANDOM Befehl. Wir zeigen hier, wie man eine Zufallszahl aufruft:

 

  • Deklariere am Anfang des Programm eine neue Variable wert und weise ihr den Wert 23 zu. 23 wird auch als Startwert der Zufallszahlensequenz bezeichnet.
zeitpakete VAR Word

wert VAR Byte         ' <- neu

wert = 123            ' <- neu
  • Füge direkt vor dem Pausenbefehl den Befehl RANDOM ein und weise wert einen neuen Zufallswert zu, der aus einer Pseudozufallssequenz, die mit 23 startet, erzeugt wird. 
           RANDOM wert           ' <- neu
  • Veränder den Befehl PAUSE so, dass der Zufallszahlenwert im Argument des Befehls PAUSE zu 1000 (entspricht einer Sekunde) addiert wird. 
           PAUSE 1000 + WERT     ' <- neu

 

Punkt 3

Ein Spieler, der den Taster loslässt, bevor die LED auf grün springt, kann damit seine Reaktionszeit unerlaubterweise deutlich verbessern. Der Mikrocontroller muss so programmiert sein, dass er betrügerisches Vorgehen von Spielern erkennt.

 

Der folgende Pseudocode gibt einen Hinweis, wie man mit Hilfe der Entscheidungsanweisung IF…THEN…ELSE das Problem lösen könnte.

Pseudocode

Wenn der Wert von zeitpakete kleiner als 3 ist, dann

       zeige dem Spieler an, dass er/sie den Taster so

       lange gedrückt halten muss, bis die LED auf grün springt.

       andernfalls oder sonst

       gib den Reaktioinswert im Terminal aus.

Im folgenden Programmauszug sind alle Änderungen aus den Punkten 1 - 3 eingebaut worden.

Programm Reaktionstest

 

Projekt

  1. Änder das Programm 03_06.bs2 so ab, dass es ein Spiel für zwei Teilnehmer wird. Füge einen zweiten Taster an P4 hinzu.

 

Druckversion Druckversion | Sitemap
© Reinhard Rahner - Gettorf