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

Propeller 8 Kern Controller - C Programmierung

Station 1 - Blinklichter

Der Propeller Mikrocontroller verfügt über 32 Ein-/Ausgabepins, oder kurz I/O Pins, die mit Schaltkreisen verbunden werden können.

Auf dem Propeller Board of Education sind einige I/O Pins des Mikrocontrollers mit LEDs, einem VGA Video Ausgang, einem Kopfhörer Stereo Ausgang und weiteren Zusatzschaltungen fest verdrahtet; es verbleiben 16 frei zugängliche Propeller I/O Pins.

 

In dieser Station werden wir uns mit der Beschaltung und Programmierung der LEDs auf einem PropBoE bzw. PropAB beschäftigen.

 

Die Ausgänge eines Mikrocontrollers, die wir als Ports oder Portpin ansprechen, können entweder den Zustand 0 oder 1 annehmen. 0 ist gleichbedeutend mit 0 Volt oder Schalter aus, während 1 gleichbedeutend ist mit Betriebsspannung (die liegt je nach Mikrocontrollertyp bei 3,3 Volt oder 5 Volt) oder Schalter ein.  

 

 

 

Bild 1 

An einem Portausgang können entweder 0V oder, je nach Controllertyp, +5V oder +3,3V liegen.

Ziele dieser Station

Wenn du die Station Blinklichter durchgearbeitet hast, bist du in der Lage ...

  • verschiedenfarbige LEDs in einer vom Hersteller vorgegebenen Architektur auf dem PropBoE anzusteuern.
  • einem Datenblatt des PropBoE gezielt Informationen zu entnehmen.
  • eine einfache elektronische Schaltung aufzubauen.
  • ein einfaches C-Programm in den Editor einzugeben und zu verstehen.
  • aufeinanderfolgende I/O Ports mit Binärwerten einzustellen.
  • aufeinanderfolgende I/O Ports mit Binärwerten anzusteuern.
  • Lauflichtketten zu programmieren.

Neue Programmbefehle in dieser Station

Beschreibung C Programmierung
Kommentarblock /* ... */
Kommentarzeile //
Endlosschleife

while(1)

{

... Befehlsblock

}

Port x einschalten

high(pin);

Beispiel: high(12);

Port x ausschalten

low(pin);

Beispiel: low(14);

Pause-Befehl pause(<Zahl n in ms>);

Definiert I/O Portpin

als Eingang (0) oder

als Ausgang (1)

set_direction(pin, 0 oder 1);

Definiert aufeinander

folgende I/O Ports als

Ein- oder Ausgang

set_directions(pinoben, pinunten, Bitmuster)
Port x ein-/ausschalten set_output(pin, 0 oder 1);
Aufeinander folgen- de Ports ein-/ausschalten set_outputs(pinoben, pinunten, Bitmuster)

Aufbau einer while-Schleife

while(Bedingung)

{

  Befehlsblock

}

{wiederhole alle Befehle im Befehlsblock, solange die Bedingung gilt. Gilt die Bedingung nicht mehr, geht es mit dem ersten Befehl nach dem Befehlsblock weiter.}

while(1)

{

  Befehlsblock

}

gilt immer, deshalb wird der {Befehlsblock} beliebig oft durchlaufen.

 

high(10);

schaltet Port 10 auf dem BoE auf Ausgang und legt dort den Pegel auf "1" oder "high".

 

low(12);

schaltet Port 12 auf dem BoE auf Ausgang und legt dort den Pegel auf "0" oder "low".

 

pause(100);

der Prozessor verweilt für 100 ms in einer Pausenschleife.

 

set_directions(pinoben, pinunten, Bitmuster);

im I/O-Register werden die I/O Pins mit Hilfe des Bitmusters auf 1 (Ausgang) oder 0 (Eingang) gesetzt. Die angesprochenen Pins müssen nebeneinander liegen. Beispiel: die Ports P8, P7 und P6 werden beschaltet, P7 ist ein Eingang, P8 und P6 fungieren als Ausgang. Dann lautet der Befehl: set_directions(8, 6, 0b101);

 

set_direction(pin, 0 oder 1);

das I/O Register wird für den Port pin  auf 0 gesetzt, wenn er als Eingang und auf 1, wenn er als Ausgang genutzt werden soll.

 

set_outputs(pinoben, pinunten, Bitmuster);

an die Ausgänge der Ports pinoben - pinunten werden mit Hilfe eines Bitmusters Nullen (0 V) oder Einsen (+3,3 V) gelegt.

Liegen noch keine Programmierkenntnisse in der Sprache C vor, sollten die Übungen 1 bis 3 der Einführung in Propeller C bearbeitet werden. Dort wird die Arbeitsumgebung der Software SimpleIDE und der Aufbau eines C-Programms beschrieben.

2 - LEDs auf dem Propeller Board of Education

Der Propeller Mikrocontroller verfügt über 32 I/O Ports oder I/O Pin. Über sie kann er mit anderen Schaltkreisen verbunden werden.

In dieser Übung nutzen wir die auf dem Prop-BoE bereits fest verdrahteten Anschlüsse, werden aber im weiteren Verlauf auch Schaltkreise auf dem Steckbrett aufbauen und diese dann mit den entsprechenden I/O Pin des Controller verbinden.

Die erste Schaltung ist bereits fertig aufgebaut auf dem Prop-BoE aufgebaut. Unterhalb des weißen Steckbretts befinden sich zwei kleine gelbe Rechtecke, die mit P26 und P27 beschriftet sind. Es handelt sich hier um zwei LEDs (Abb. 2).

Sinnvoll ist, hier das Datenblatt (engl.) des Herstellers Parallax einzusehen. In ihm sind die einzelnen Baugruppen deklariert und ausführlich beschrieben.

Abbildung 2 fest verdrahtete LEDs an P26 und P27
Material
  • 1x Prop BoE oder Prop-AB
  • 1x mini-USB Anschlusskabel
  • 1x Steckernetzteil
Aufgabe
  • Verbinde das Board mit dem Steckernetzteil.
  • Setze den PWR-Schalter auf 1.
  • Starte die Software SimpleIDE.
  • Gib das Programm St1_1.c in den Editor ein.
  • Starte das Programm über Load RAM & Run und überprüfe die Funktion der LED.

Das Programm St1_1.c

Programm St1_1.c

Wie arbeitet das Programm St1_1.c?

Zeile 9

Hier beginnt eine Endlosschleife. Alle Befehle innerhalb der geschweiften Klammern (von Zeile 11 bis Zeile 14) werden immer wieder ausgeführt.

 

Zeile 11

Der Funktionsaufruf HIGH(26) setzt den Ausgang P26 des Propeller Chips auf 1, was gleichbedeutend damit ist, dass am Pin die Versorgungsspannung von 3,3V liegt. Die Anode der Diode liegt auf +3,3V, die Kathode auf 0V, damit ist die LED in Durchlassrichtung gepolt und ein Strom kann fließen; die LED leuchtet.

 

Zeile 12

Es tritt eine kurze Pause von 100ms ein, in der der Prozessor so gut wie nichts tut. Aber die LED bleibt an.

 

Zeile 13

LOW(26) setzt P26 zurück auf 0V; Anode und Kathode der LED liegen auf 0V, damit ist die Diode in Sperrichtung gepolt und geht aus.

 

Zeile 14

Es folgt wieder eine Pause von 100ms, in der nichts passiert; die LED bleibt aus.

 

Zeile 15

Hier endet der Blockbereich der Endlosschleife aus Zeile 9.

 

Die Befehle in den Zeilen 11 bis 14 bezeichnet man auch als Befehlsblock der Endlosschleife oder als Befehlsblock der WHILE-Schleife. Da eine Abbruchbedingung fehlt, die dazu führen würde, dass die Befehle im Befehlsblock nicht mehr ausgeführt werden, blinkt die LED so lange, bis der PWR-Schalter am Prop-BoE oder Prop-AB auf 0 gestellt wird.

Nach dieser ersten Übung wagen wir uns an eine etwas komplexere Aufgabe. Auf dem Prop-BoE gibt es weitere fest verdrahtete LED unterschiedlicher Farbe; sie befinden sich links neben dem Steckbrett und sind entsprechend ihrer Farbe beschriftet mit: R für rot, G für grün und B für blau. Die LEDs mit der Bezeichnung H und V leuchten gelb, mit D0 blau und mit D1 rot.

 

 

Abbildung 3

J5-Steckerleiste links neben dem weißen Steckbrett auf dem Prop-BoE. Die farbigen LEDs für diese Übung befinden sich links vom J5 Anschluss und sind gekennzeichnet mit R1, R0, G1, G0, B1 und B0.

Übung 2

Material
  • 1x Prop BoE
  • 1x  mini-USB Anschlusskabel
  • 1x  Steckernetzteil
  • 2x  Steckdraht
Aufgaben
  • 1. Schaltung: Eine grüne LED wird an Pin P2 angeschlossen und blinkt im Sekundentakt.
  • 2. Schaltung: Eine blaue LED wird an Pin P5 angeschlossen und blinkt zweimal pro Sekunde.
  • 3. Schaltung: Eine grüne und eine blaue LED wechseln sich ab, wobei die grüne LED zwei Sekunden, die blaue LED eine Sekunde aufleuchtet.

Schaltungsaufbau und Schaltskizze

 

 

 

 

 

 

Schaltungsaufbau

für die geforderten drei Schaltungsvarianten.

 

 

 

Schaltskizze

für eine fest verdrahtete LED. Der Vorwiderstand befindet sich auf der Platine.

  • Verbinde das PropBoE über die mini-USB Schnittstelle mit dem Laptop und schließe das Steckernetzteil an. Schalte die Spannungsversorgung ein und starte das Programm SimpleIDE.
  • Gib das Programm St01_2 ein und speicher es unter dem Namen St01_2 ab.
  • Starte das Programm über Load RAM & Run und überprüfe, ob es die gestellte Aufgabe erfüllt.

Programmcode zu Teilaufgabe 1  grüne LED leuchtet im Sekundentakt

Programmcode zu Teilaufgabe 3  grüne und blaue LED

Wie funktionieren die beiden Schaltungen St1_2gruen und St1_2GruenBlau?

Programm St1_2gruen.c

 

Zeile 8:    Mit dem Funktionsaufruf high(2)geht der I/O-Portausgang des Propellerchips P02 auf high oder 1. Dies ist gleichbedeutend damit, dass der Ausgangspin P02 auf + 3,3 V gesetzt wird.

                Wenn an P01 +3,3 V  liegen, ist die Diode LEDgrün durchgeschaltet, es fließt ein Strom und die LED beginnt zu leuchten.

 

Zeile 9:    Pause von 500 ms. Die LED leuchtet weiter.

 

Zeile 10:  I/O Port 02 wird auf low oder 0 gesetzt. Die Diode erlischt. 

 

Zeile 11:  Pause von 500 ms. Die LED bleibt aus.

 

Die vier Befehle befinden sich in dem von geschweiften Klammern eingerahmten Befehlsblock einer while-Schleife.  Sie wird beliebig oft durchlaufen, so dass sich der oben beschriebene Vorgang ständig wiederholt.

Programm St1_2GruenBlau.c

 

Zeile 8:    Mit dem Funktionsaufruf high(2)geht der I/O-Portausgang des Propellerchips P02 auf high oder 1. Dies ist gleichbedeutend damit, dass der Ausgangspin P02 auf + 3,3 V gesetzt wird.

                Wenn an P01 +3,3 V  liegen, ist die Diode LEDgrün durchgeschaltet, es fließt ein Strom und die LED beginnt zu leuchten.

 

Zeile 9:    Pause von 2000 ms. Die LED grün leuchtet weiter.

 

Zeile 10:  I/O Port 02 wird auf low oder 0 gesetzt. Die Diode erlischt. 

 

Zeile 11:    Die LED blau an P5 wird eingeschaltet.

 

Zeile 12:  Pause von 1000 ms. Die LED blau bleibt an.

 

Zeile 13:   Die LED blau an P5 wird ausgeschaltet.

 

Die sechs Befehle befinden sich in dem von geschweiften Klammern eingerahmten Befehlsblock einer while-Schleife.  Sie wird beliebig oft durchlaufen, so dass sich der oben beschriebene Vorgang ständig wiederholt.

Jetzt kommst du!

Die Blinkgeschwindigkeit (Blinkfrequenz) lässt sich dadurch erhöhen, dass die Pause zwischen dem Ein- und Ausschalten der Leuchtdiode verkürzt wird. Die LED wird zum Beispiel doppelt so schnell blinken, wenn die Pausenzeit halbiert wird. Probiere es aus und speicher das fertige Projekt unter St1_3 ab.

Experimentierecke

Schreibe ein neues Programm St1_ampel, bei dem eine Ampelanlage simuliert wird. Die Phasen einer normalen Ampelanlage sind: rot - rot/gelb - grün - gelb - rot.

Die Zeiten zwischen den einzelnen Phasen werden wie folgt festgelegt: Rotphase: 10 s,  Rot/Gelbphase: 3 s, Grünphase: 15 s, Gelbphase: 5 s.

Erweiterung

An den bisherigen Programmen haben wir gesehen, dass der Programmieraufwand sehr groß werden kann, wenn mehr als eine LED zum Leuchten gebracht wird.

 

Die folgende Übung zeigt, wie sich sechs nebeneinander liegende LEDs auf dem PropBOE als Lauflicht programmieren lassen. Mit den beiden bisher bekannten Befehlen HIGH und LOW  gelingt das nur schwer. Es müssen viele Programmzeilen geschrieben werden und es  "kostet" viel Speicherplatz.

 

Einfacher geht es mit zwei neuen Befehlen: set_directions und set_outputs. Ein Auszug aus der Bibliothek von simpletools beschreibt beide Funktionen.

3 - Steuerung der I/O Ports

Der Propeller-Mikrocontroller verfügt über 32 sogenannte I/O Ports, von denen 16 für uns frei verfügbar sind. Diese frei verfügbaren 16 Ports können sowohl Eingabe- als auch Ausgabeport sein. Wann sie welche Funktion übernehmen, wird mit Hilfe sogenannter  I/O-Register gesteuert. Steht eine 0 im Register, wird der entsprechende Port zum Eingang, eine 1 macht ihn zum Ausgang.

 

Bis jetzt haben wir uns darüber keine Gedanken machen müssen. Wir haben gelernt, dass der Aufruf des Befehls high(8)  an den Ausgang von Port 8 eine 1  und low(8) entsprechend eine 0 legt. Wenn sechs LEDs, angeschlossen an den Ports 8, 7, ..., 3 nacheinander ein- und ausgeschaltet werden sollen, dann ließe sich das mit den bisherigen Befehlen wie folgt umsetzen:

Mit zwei neuen Befehlen reduziert sich der Programmieraufwand erheblich.

 

  • set_directions(Pinoben, Pinunten, Bitmuster);

 

... legt fest, welcher von aufeinander folgenden Pins Eingang (0) und welcher Ausgang (1) wird.

Courtesy of Parallax Inc.
  • set_outputs(Pinoben, Pinunten, Bitmuster);

 

legt fest, welcher Pegel (0 oder 1) an welchem Ausgang anliegen soll.

Courtesy of Parallax Inc.
Aufgabe
  • Jeweils die oberste rote, grüne und blaue LED auf dem PropBOE sollen zum Leuchten gebracht werden. Wir benutzen dazu die neuen Befehle set_directions und set_outputs.
  • Verbinde das PropBOE über die USB-Schnittstelle mit dem Laptop, schließe das Steckernetzteil an und schalte die Spannungsversorgung ein. Starte das Programm SimpleIDE.
  • Gib das folgende Programm ein und speicher das Projekt unter dem Namen St1_outputs ab.
  • Starte das Projekt mit Load RAM & Run und überprüfe, ob es die gestellte Aufgabe erfüllt.

Programm St1_outputs.c

Programm St1_outputs.c

Wie funktioniert St1_outputs.c?

Zeile 9:            Die I/O-Ports 3 ... 8 werden auf Ausgang gesetzt -> "1".

Zeile 10:          Die Pegel 0 oder 1 werden in der Reihenfolge von oben nach unten gesetzt.

 

Port                            P8        P7        P6        P5        P4        P3        Pin des Controllers

Pegel am Ausgang       1          0          1          0          1          0          0 Volt oder 3,3 Volt

I/O Register                 1          1          1          1          1          1          mit set_directions auf Ausgang (1) gesetzt

In der folgenden Übung 4 werden sogenannte Feldvariable benutzt. Wenn man damit noch nicht vertraut ist, sollte vorher der Unterabschnitt Feldvariable im Kapitel Variable und reelle Zahlen durchgearbeitet werden.

4 - Lauflicht

Material
  • 1x Prop BoE
  • 1x  mini-USB Anschlusskabel
  • 1x  Steckernetzteil
  • 6x  Steckdraht
Aufgabe
  • Programmiere ein sogenanntes Lauflicht mit den sechs LEDs R0, R1, G0, G1 und B0, B1 des PropBOE an Port 3 ... 8.
  • Verbinde das PropBOE über die USB-Schnittstelle mit dem Laptop, schließe das Steckernetzteil an und schalte die Spannungsversorgung ein. Starte das Programm SimpleIDE.
  • Gib das folgende Programm ein und speicher das Projekt unter dem Namen St1_lauflicht.
  • Starte das Projekt und überprüfe, ob es die gestellte Aufgabe erfüllt.

Programm St1_lauflicht.c

Programm St1_lauflicht.c

Wie funktioniert das Programm St1_lauflicht.c?

Zeile 09           Das Feld maske[] enthält sechs Elemente in der ge-

                        schweiften Klammer in binärer Schreibweise. Binäre 
                        Zahldarstellungen beginnen mit der Zeichenkette 0b

Zeile 14:          Die I/O-Ports 3 ... 8 werden auf Ausgang gesetzt -> 1.

Zeile 15:          Zählschleife von i = 0 bis i = 5, jeweils um 1 erhöht bei
                        jedem Durchgang.

Zeile 17:          Die Ausgangsports 3 ... 8 werden mit der Bitmaske
                         maske[i] angesteuert.

Zeile 18:          Pause von 100 ms.

Was ist neu im Programm St1_lauflicht.c?

Es gibt zwei neue Befehle in diesem Programm: FOR ...{ } und die Deklaration maske[].

 

Mit FOR ... {} wird eine klassische Zählschleife eingeleitet. Weitere Informationen dazu gibt es in der Lerneinheit Einführung in Propeller-C.

Grundsätzlich gilt für jeden Aufbau einer FOR ... Schleife:

 

FOR (Anfangswert; bis Abbruchbedingung; incrementiere den Anfangswert)

gefolgt von einem Befehlsblock in geschweiften Klammern. Alle Befehle im Befehlsblock werden so lange durchlaufen, bis die Abbruchbedingung wirkt. ACHTUNG: wird die Abbruchbedingung nicht zielgenau gesetzt, kann es unter Umständen nie zu einem Programmabbruch kommen.

Beispiel

FOR (int i = 1; i <= 10; i++)

{

  Befehlsblock;

}

 

maske[] ist ein sogenanntes Array. Weitere Informationen dazu finden sich ebenfalls in der Lerneinheit Einführung in Propeller-C.

Wenn noch Zeit bleibt, dann ...

...schreibe ein Programm, dass ein Lauflicht - bestehend aus den sechs LEDs der Übung 4 - erzeugt, dass von außen nach innen und zurück läuft. Es ist das Knight-Rider Lauflicht. Benutze zur Lösung ein Array und speicher das Projekt unter dem Namen St1_rider ab.

Druckversion | Sitemap
© Reinhard Rahner - Gettorf