Abbildung 6.1 zeigt das Display einer Mikrowelle. Im nicht benutzten Zustand erscheint dort die aktuelle Uhrzeit. Wird eine Mikrowelle aktiviert, zeigt es die Timerzeit mit der gewählten Programmeinstellung. Ist die Garzeit abgelaufen, beginnt es zu blinken, sobald der Alarm ertönt. Ein Mikrocontroller in der Gerätetür überwacht die Tastenfelder und aktualisiert die Anzeige. Ebenso überwacht er Sensoren im Gerät und bedient Schalter, die das Heizelement ein- und ausschalten.
Eine 7-Segment-Anzeige ist ein quaderförmiger Block mit 7 geometrisch angeordneten gleichlangen Leuchtdioden, die einzeln zum Leuchten gebracht werden können. Abbildung 6.2 zeigt eine Bauteil-darstellung einer sehr häufig benutzten 7-Segment-LED Anzeige, die wir in den Übungen dieses Kapitels einsetzen werden. Eine zusätzliche LED, kann als Dezimalpunkt ebenfalls genutzt werden.
Jedes Segment (A bis G) und der Punkt repräsentiert jeweils eine LED, die einzeln angesteuert werden kann. Die meisten Anschlusspins sind mit einer Zahl und einem Buchstaben, der für ein LED-Segment steht, gekennzeichnet. Pin 5 (DP) bezeichnet den Dezimalpunkt. Pin 3 und 8 (common cathode) wird erklärt, sobald wir uns die Schaltung dieses Bauteils anschauen.
Pinbelegung
Abbildung 6.2 zeigt ein Beispiel für eine Pinbelegung. Sie gibt nützliche Informationen zur Beschaltung des Bauteils. Pinbelegungen weisen jedem Pin eine Zahl, einen Buchstaben und einen Bezug zu; siehe Abbildung 6.2. Jeder Pin ist nummeriert und korrespondiert mit einer bestimmten Segmentbezeichnung. Der Bezug wird durch die Draufsicht auf das Bauteil hergestellt. Aus ihr ergibt sich, dass Pin 1 unten links am Display zu finden ist. Andere Bauteile weisen raffiniertere Bezüge aus, wie zum Beispiel die Abflachung an einer LED.
Abbildung 6.3 zeigt den inneren Schaltungsaufbau einer 7-Segment LED Anzeige. Jede Anode der LEDs ist mit einem separaten Pin ver- bunden, während die Kathoden miteinander verbunden sind (gemein- same Kathode). Aus diesem Grund wird eine solche 7-Segment-Anzei- ge auch als Anzeige mit „gemeinsamer Kathode“ bezeichnet. Wird Pin 3 oder Pin 8 mit Vss verbunden, sind alle LED-Kathoden mit Vss verbunden.
In dieser Übung werden Schaltungen aufgebaut, mit denen sich einzelne Segmente einer 7-Segment-Anzeige testen lassen.
Material |
1x Board of Education 1x mini-USB Kabel 1x 7-Segment LED Anzeige 5x Widerstände – 1 kOhm (braun-schwarz-rot) 5x Steckdrähte |
Aufgabe |
|
Welche Bedeutung hat das x und die Beschriftung nc in den Schaltbildern?
nc steht für not connected oder no connect. Damit wird gesagt, dass ein bestimmter Anschluss der 7-Segment-Anzeige nicht verbunden ist oder offen bleibt.
Das x im Schaltbild ist ein weiteres Zeichen für nc. In Schaltbildern werden beide Darstellungen gleich häufig verwendet.
Aufgabe |
|
Jetzt kommst du! - Der Buchstabe A und die Zahl 3
Abbildung 6.8 und Abbildung 6.9 zeigen, wie die Zahl 3 bei einer 7-Segment-LED Anzeige verdrahtet werden muss.
Aufgabe |
|
Schaltskizze und Schaltungsaufbau
In dieser Aufgabe werden wir eine 7-Segment-LED Anzeige mit einer BASIC Stamp ansteuern und mit einem kleinen Programm testen, ob alle Segmente der Anzeige funktionsfähig sind.
Material |
1x Board of Education 1x mini-USB Kabel 1x 7-Segment-LED Anzeige 8x Widerstand – 1kOhm (braun-schwarz-rot) 5x Verbindungsdrähte |
Eine 7-Segment-LED Anzeige mit der BASIC Stamp verbinden
Abb. 6.11 zeigt die Schaltskizze und Abb. 6.12 den Schaltungsaufbau für dieses Übungsbeispiel.
Schaltskizze und Anschlussbelegungsplan
Wer seine Schaltung nur nach der Schaltskizze aufbauen möchte, sollte sich die An- schlussbelegung einer 7-Segment-LED Anzeige danebenlegen. Abb. 6.10 zeigt sie noch einmal.
Eine 7-Segment-LED Anzeige wird parallel von der BASIC Stamp angesteuert. Damit ist gemeint, dass der Kontroller über mehrere I/O Leitungen Daten (HIGH, LOW Informationen) an das Anzeigelement schickt. Bei einer 7-Segment-LED Anzeige sind dazu 8 I/O Anschlüsse notwendig, um alle Darstellungen auf dem Display vornehmen zu können.
Parallel Bus Die Verbindungsleitungen, über die die HIGH/LOW Signale von der BASIC Stamp zur 7-Segment-LED Anzeige übertragen werden, bezeichnet man summarisch als Parallel-Bus. In Abb. 6.11 sind diese Verbindungsleitungen parallel gezeichnet.
Testprogramm zur Ansteuerung einer 7-Segment-LED Anzeige
Die HIGH und LOW Signale werden mit Hilfe einer Pin-Direktive innerhalb einer FOR…NEXT Schleife aufgerufen und so jedes Segement des Displays nacheinander angesteuert.
Aufgabe |
|
Programm Test7Segment.bs2
Jetzt kommst du!
Eine interessante Wirkung erzielt das Auskommentieren der Befehlszeile LOW pinzaehler. Das führt uns zu einer neuen Aufgabe.
Aufgabe |
|
Rechnet man den Dezimalpunkt hinzu, dann werden 8 verschiedene I/O Anschlüsse der BASIC Stamp benötigt, um eine 7-Segment-LED Anzeige anzusteuern. Acht verschiedene HIGH/LOW Signale werden für die Darstellung einer einzigen Zahl benötigt.
Ein Zähler, der von 1 bis 9 hochzählen soll, benötigt schon sehr viel Programmieraufwand. Glücklicherweise gibt es spezielle Variablen, mit denen sich gleich mehrere HIGH/LOW Signale als sogenanntes Gruppensignal setzen lassen. Darum kümmern wir uns jetzt.
In dieser Übung verwenden wir Zahlen in binärer Zahldarstellung, statt der bisher üblichen HIGH/LOW Befehle. Die dazu neuen Befehle lauten:
Mit ihrer Hilfe können wir zukünftig mit einem Befehl 8-bit gleichzeitig auf HIGH oder LOW setzen. Das reicht aus, um auf einer 7-Segment -LED Anzeige eine beliebige Zahl durch einen einzigen Befehl auszugeben.
8 Bit
Eine binäre Zahl, die sich aus 8 Nullen und Einsen zusammensetzt, ist eine sogenannte 8-Bit Zahl, oder wir sagen auch, sie hat 8 Bit. Jedes Bit ist wie ein Speicher, in den man eine Null oder eine Eins ablegen kann.
Byte
Acht Bit ergeben ein Byte. Mit 8 Bit lassen sich 256 verschiedene Zahlen aus Nullen und Einsen zusammensetzen. Eine Variable vom Typ Byte kann deshalb auch nur die Zahlen zwischen 0 und 255, also insgesamt 256 verschiedene Zahlen, darstellen.
Material | wie in Übung 2 |
Muster von Ein/Aus Zuständen mit Hilfe von binären Zahlen programmieren
Wir benutzen in dieser Übung die beiden neuen Variablen DIRH und OUTH. Die Variable DIRH gibt in diesem Beispielprogramm die Richtung für I/O Pinanschlüsse von P8 bis P15 vor. OUTH legt fest, welcher Pin auf HIGH (Ausgang) und welcher auf LOW (Eingang) gesetzt wird.
OUTH ist ein kräftiger Befehl, da er gleichzeitig acht verschiedene I/O Ausgänge auf HIGH bzw. LOW setzt.
Im folgenden Beispielprogramm wird gezeigt, wie die beiden neuen Befehle in einem Zähler, der auf einem 7-Segment-LED Display von 0 bis 9 zählt, eingesetzt werden, ohne HIGH/LOW Befehle zu benutzen.
Beispielprogramm: ZahlenAnzeigen.bs2
In diesem Beispielprogramm werden auf einer 7-Segment-LED Anzeige nacheinander die Zahlen von 0 bis 9 dargestellt.
Aufgabe |
|
Programm ZahlenAnzeigen.bs2
Wie arbeitet das Programm ZahlenAnzeigen.bs2?
Abbildung 6.13 zeigt, wie sich mit den beiden Variablen DIRH und OUTH die Richtung und der Zustand (HIGH/LOW) der I/O Pins P8 bis P15 einstellen lassen.
Der erste Befehl
OUTH = %00000000
… setzt die PIN P8 bis P15 auf LOW; damit werden alle LEDs in einem 7-Segment Display ausgeschaltet. Umgekehrt würde ein Befehl OUTH = %11111111 alle I/O Pin auf HIGH setzen und damit alle LEDs ein- schalten.
Wofür steht das Zeichen %? Das Prozent-Zeichen (%) ist für den BASIC Stamp Editor ein Hinweis darauf, dass die nachfolgenden Ziffern eine binäre Zahl darstellen. Beispiel: die binäre Zahl %00001100 entspricht im Zehnersystem der Zahl 12. Du wirst in dieser Übung erkennen, dass die Benutzung binärer Zahlen manche Programmier-aufgaben wesentlich vereinfachen können.
An den I/O Pin steht solange kein LOW-Signal, bis die Variable DIRH die I/O Pin vom Zustand Eingang auf Ausgang umgeschaltet hat. Der Befehl dazu lautet:
DIRH = %11111111
…und setzt die I/O Pin P8 bis P15 auf Ausgang. Sobald dieser Befehl ausgeführt wird, steht an P8 bis P15 das Signal LOW, weil die Variable OUTH vorher auf %00000000 gesetzt worden war.
Bevor aus einem I/O Pin ein Ausgang wird
Solange die Signalrichtung der I/O Pin nicht von Eingang auf Ausgang geändert wird, werden die an den Pin anliegenden Eingangssignale in einer Variablen INH ständig aktualisiert; sie enthält IN8, IN9 bis einschließlich IN15. Diese Variablen lassen sich in ähnlicher Weise nutzen, wie IN3 und IN4 beim Lesen von Tastern in Übung 4 im Kapitel Miniatur-Drucktaster.
Alle I/O Pin einer BASIC Stamp sind bei einem Programmstart als Eingänge geschaltet
Ein BASIC Stamp I/O Pin muss als Ausgang definiert werden, bevor man ein HIGH oder LOW Signal an ihn übertragen kann. Die Befehle HIGH und LOW setzen automatisch die Datenrichtung eines BASIC Stamp I/O Pin auf Ausgang. Eine 1 in der Bitfolge der Variablen DIRH setzt den entsprechenden I/O Pin auf Ausgang.
Bevor ein Pin über einen entsprechenden Zahleintrag im DIR Register als Ausgang geschaltet wird, sollte in das korrespondierende OUT Register ein Zahlenwert geschrieben werden.
Beispiel: Schauen wir uns die folgende Befehlsfolge an.
DIR5 = 1
OUT5 = 1
PBASIC setzt bei Programmstart alle Variablen und Register auf 0, somit ist auch OUT5 = 0. Mit DIR5 = 1 wird zunächst Pin 5 auf Ausgang gesetzt und - da das Register OUT5 mit dem Wert 0 initialisiert wurde - liegt zunächst ungewollt eine Null an Pin5. Dieser Zustand wird erst mit dem folgenden Befehl OUT5 = 1 geändert. Besser ist die umgekehrte Reihenfolge der Befehle:
OUT5 = 1
DIR5 = 1
Am I/O Pin liegt ein HIGH-Signal an, sobald er über DIR als Ausgang geschaltet wird.
Abb. 6.14 zeigt, wie die Variable OUTH eingesetzt wird, um HIGH/LOW Signale an P8 bis P15 zu legen. Eine binäre 1 steht für ein HIGH- und eine 0 für ein LOW-Signal. Das dargestellte Beispiel zeigt die Zahl drei auf dem 7-Segment-LED Display (das Display steht auf dem Kopf).
Die Pfeile unterhalb des Bildes zeigen auf die Portpin, die mit den Segmenten des 7-Segment-LED Displays korrespondieren. Der Befehl
OUTH = %11010110
setzt PIN P8, P11 und P13 auf 0 und P9, P10, P12, P14 und P15 auf 1. Die Kommentarzeile über dem Befehl OUTH ... (direkt unterhalb der Pfeile) in Abbildung 6.14 zeigt die angesprochenen Segmente innerhalb der 7-Segment-LED-Anzeige.
Die Befehle HIGH und LOW
HIGH 15 setzt sich zusammen aus OUT15 = 1
DIR15 = 1
LOW 15 setzt sich zusammen aus OUT15 = 0
DIR15 = 1
Soll P15 zu einem Eingang werden, geschieht dies mit DIR15 = 0. Mit IN15 lassen sich die high/low Signale auslesen.
Jetzt kommst du!
Aufgabe |
|
Dezimal vs. Hexadezimal
Die 10 Ziffern des Zehnersystems (10-er Basis) sind: 0, 1, 2, 3, 4, 5, 6, 7, 8, und 9.
Im Hexadezimalsystem (16-er Basis) lauten die 16 Ziffern: 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F.
Die 16-er Basis wird intensiv sowohl in der Computer- als auch der Mikrocontrollerprogrammierung eingesetzt. Sobald du herausgefunden hast, wie die Buchstaben A bis F dargestellt werden, ändere das Programm so ab, dass die 16 Ziffern des Hexadezimalsystems nacheinander erscheinen.
Mit Hilfe des Befehls LOOKUP gestaltet sich das Schreiben von Code für 7-Segment-LED-Anzeigen wesentlich einfacher. Er ruft einzelne Elemente aus einer Liste auf. Hierzu ein Beispiel:
LOOKUP index, [7, 85, 19, 167, 28], wert
Der Befehl enthält zwei Variablen, index und wert. Wenn index identisch 0 ist, wird wert die Zahl 7 aus der Liste zugewiesen. Index 1 speichert die Zahl 85 in wert. Da im folgenden Programmbeispiel index identisch 2 ist, weist LOOKUP der Variablen wert den Listenwert 19 zu und gibt sie im Debug Terminal aus.
Beispielprogramm Lookup1.bs2
Aufgabe |
Gib das Programm Lookup1.bs2 ein und speicher es ab. Starte das Programm Lookup1.bs2. Änder in Programmzeile 7 die Wertzuweisung an die Variable index ab. Wähle eine Zahl zwischen 0 und 4. Führe das Programm nach jeder Änderung der Variablen index neu aus und beobachte, welche Zahl aus der Liste der Variablen wert zugeordnet wird. Optional: Ändere das Programm so ab, dass der Befehl LOOKUP in eine FOR…NEXT Schleife, die von 0 bis 4 durchlaufen wird, eingebettet ist. |
Beispielprogramm Lookup2.bs2
In diesem Beispielprogramm zeigen wir, wie einfach sich mit Hilfe des Lookup-Befehls Zahldarstellungen auf einer 7-Segment-LED Anzeige umsetzen lassen. Die Bitmuster für die Zahlen werden in einer OUTH-Variablen abgelegt. Die Variable index bestimmt, welcher Wert aus der Liste genommen wird. Das Beispielprogramm zählt von 0 bis 9, der Unterschied gegenüber dem Programm ZahlenAnzeigen besteht darin, dass es sich vielseitiger einsetzen lässt. Unterschiedliche Zahlsequenzen lassen sich darüber zum Beispiel sehr einfach abrufen.
Aufgabe |
Gib das Programm lookup2.bs2 ein und speichere es ab. Überzeuge dich davon, dass es die Zahlen von 0 bis 9 auf der 7-Segment-LCD Anzeige darstellt. Schaue dir im Debug Terminal an, wie das Programm abläuft. Dort wird gezeigt, wie der Wert der Variablen index vom Lookup-Befehl genutzt wird, den richtigen Binärcode aus einer zugehörigen Liste auszuwählen und an OUTH zu übergeben. |
Jetzt kommst du!
Verändere das Programm Lookup2.bs2 so, dass es von 0 bis F - wie ein hexadezimaler Zähler - zählt. Vergiß dabei nicht die Grenzen in der FOR...NEXT Schleife entsprechend anzupassen.
Mit Hilfe eines Potentiometers haben wie bereits früher die Position des Steuerhorns eines Servos beeinflusst. In dieser Übung wird die Potentiometerstellung auf einer 7-Segment Anzeige dargestellt.
Material |
1x 7-Segment LED Anzeige 8x Widerstand – 1 kOhm (braun-schwarz-rot) 1x Potentiometer – 10 kOhm, linear 1x Widerstand – 220 Ohm (rot-rot-braun) 1x Kondensator – 0.1 µF 7x Steckdraht |
Schaltungsaufbau und Schaltskizze
Das Gegenstück zum LOOKUP Befehl ist der Befehl LOOKDOWN. Während LOOKUP eine Zahl über einen Index heraussucht, gibt LOOKDOWN nach Eingabe einer Zahl einen Indexwert zurück.
Wie dieser neue Befehl funktioniert und aufgerufen wird, schauen wir uns jetzt erst einmal näher in einem Beispielprogramm Lookdown1.bs2 an.
Beispielprogramm Lookdown1.bs2
Aufgabe |
|
Mit Hilfe des LOOKDOWN Befehls lässt sich auch überprüfen, ob ein Suchwert einem Listeneintrag entspricht oder größer als oder kleiner oder gleich einem Listeneintrag ist.
Wird zum Beispiel nach einem Eintrag gesucht, bei dem die Variable wert mit der Relation kleiner oder gleich verknüpft ist, muss der Operator < = direkt vor die erste Klammer der Liste gesetzt werden. Es wird der Index derjenigen Zahl aus der Liste zurückgegeben, für die die Aussage wahr ist.
Beispiel: wert = 20, Relation < = gesetzt
im Terminalfenster wird 1 angezeigt, da 20 < = 85 eine wahre Aussage ist und die Zahl 85 den Index 1 trägt.
Beispielprogramm Lockdown2.bs2
Aufgabe |
Verändere das Programm Lookdown2.bs2 so, wie im obigen Beispielprogramm angegeben. Experimentiere mit verschiedenen Werten und überprüfe, ob die Variable index jedesmal den Zahlenwert im Terminal ausgibt, den du erwartet hast. |
Beispielprogramm Lookdown3.bs2
In diesem Programmbeispiel wird die Position des Schleifers eines Potenziometers durch Aufleuchten der entsprechenden äußeren Segmente einer 7-Segment Anzeige (Abb. 6.18) dargestellt.
Aufgabe |
|
Wie arbeitet das Programm Lookdown3.bs2?
Das Beispielprogramm misst die Entladezeit der RC-Schaltung mit dem Befehl RCTIME und speichert den Wert in einer Variablen mit Namen zeit.
HIGH 5 PAUSE 100 RCTIME 5, 1, zeit
Die zeit Variable wird dann in einer LOOKDOWN Tabelle benutzt. Hier entscheidet sich, welcher Eintrag in der Liste kleiner als zeit ist; der entsprechende Positionslistenwert (zwischen 0 und 5 in diesem Fall) wird in der Variablen index abgelegt.
LOOKDOWN time, <= [40, 150, 275, 400, 550, 800], index
Über die Variable index wird in der LOOKUP Tabelle der entsprechende binäre Wert bestimmt, der dann der Variablen OUTH zugewiesen wird.
LOOKUP index, [ %11100101, %11100001, %01100001, %00100001, %00000001, %00000000 ], OUTH
Jetzt kommst du!
Lookdown3.bs2 steuert nur fünf der sechs Segmente an, wenn der Drehknopf bewegt wird. Die Reihenfolge, in der die LEDs eingeschaltet werden, lautet E, F, A, B, C aber nicht D.
Aufgabe |
|