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.
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.
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.
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.
In dieser Lektion lernst du
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
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.
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
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.
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
_________________________________________________________
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. |
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.
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.
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.
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
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.
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
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
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:
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!
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 |
Der zugehörige Schaltungsaufbau ist etwas aufwändiger.
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
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
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
_______________________________________________
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
Aufgabe |
|
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
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.
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.
Beispiel: Der Zahlenwert in der Variablen zeitpakete soll mit 3.69 multipliziert werden.
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:
zeitpakete VAR Word wert VAR Byte ' <- neu wert = 123 ' <- neu
RANDOM wert ' <- neu
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.