Teil 4: Mikrocontroller-Programmierung für Einsteiger

PICAXE – Interfacebeschaltung & Programmierung
Keine Kommentare

Um erfolgreich Internet-of-Things-Projekte zu entwickeln, muss man über solide Kenntnisse in der Embedded-Programmierung und Elektronik verfügen. Mithilfe des PICAXE-Projekts kann man in beide Bereiche einsteigen und dabei noch Spaß haben. Nach einer Einführung in die Mikrocontrollertechnik, der Vorstellung von PICAXE, der Installation und den Grundzügen der Entwicklungsumgebung sowie dem Einsatz von Zusatzmodulen geht es diesmal um Interfacebeschaltung und Programmierung.

Harte Sachen an der Schnittstelle

Damit man mit einem Mikrocontroller Steuerungsaufgaben übernehmen kann, sind die Pins entsprechend zu beschalten. Insbesondere das Anschließen von Verbrauchern erzeugt einen größeren Aufwand, denn direkt am Mikrocontroller können maximal Leuchtdioden (LED) betrieben werden. Höhere Lasten würden sofort zur Zerstörung dieses empfindlichen Bausteins führen. Beginnen wir dennoch mit einer einfachen Grundschaltung mit LEDs.

Artikelserie: PICAXE – Mikrocontroller-Programmierung für Einsteiger

Teil 1: Einführung in das Thema Mikrocontroller und die Lernplattform PICAXE
Teil 2: Einrichtung von PICAXE und Streifzug durch die Entwicklungsumgebung
Teil 3: Hardware und Befehlswelt im Detail: Experimente & Zusatzmodule
Teil 4: Interfacebeshaltung & Programmierung

Eine LED ist grundsätzlich über einen Vorwiderstand an einem Pin des Mikrocontrollers anzuschließen, der dabei als Ausgang zu programmieren ist. Es bleibt der Schaltungskonzeption überlassen, ob man die LED gegen Masse bzw. gegen die positive Versorgungsspannung schaltet. Zu achten ist auf jeden Fall auf die richtige Polarität. LEDs haben einen Anoden- und einen Kathodenanschluss. Der Anodenanschluss ist dabei in Richtung der positiven Versorgungsspannung zu schalten. Durch minimale Kennzeichnungen am Gehäuse lässt sich die Zuordnung der Anschlüsse mithilfe des Datenblatts erkennen. Bei sehr kleinen Exemplaren kann man das auch mit einem LED-Tester gut erproben. Die Anschaffung eines solch simplen Testers macht sich beim Basteln mit IoT-Projekten schnell bezahlt. Aus dem Datenblatt können die Versorgungspannung und der maximal zulässige Strom der LED entnommen werden. Ja nach Farbe, Typ und Größe liegen die Werte in Bereich von etwa 2 V und 10 mA. Mithilfe dieser Angaben kann der Vorwiderstand auf Basis des Ohm‘schen Gesetzes errechnet werden (Kasten: „Elektronikbasics: Ohm‘sches Gesetz“). Bei handelsüblichen LEDs und einer Versorgungsspannung des PIC-Mikrocontrollers von ca. 5 V liegt man mit einem Wert von ca. 330 Ohm meist richtig.

Elektronikbasics: Ohm‘sches Gesetz
Der Zusammenhang zwischen elektrischer Spannung (U in Volt), elektrischem Strom (I in Ampere) und elektrischem Widerstand (R in Ohm) ist im Ohm‘schen Gesetz erfasst. Es zählt zu den wichtigsten Grundgesetzen der Elektrotechnik. Die Grundschaltung ist in Abbildung 3 zu sehen. Der Zusammenhang zwischen den drei genannten Größen lautet I = U/R bzw. R=U/I.

krypczyk_picaxe_3

Abb. 3: Messschaltung zur Ermittlung des Ohm‘schen Gesetzes

Neben einfarbigen LEDs existieren auch Duo-LEDs, die dennoch nur zwei Anschlüsse enthalten. Je nach angelegter Polarität leuchten sie dann in Farbe 1 (meist rot) bzw. Farbe 2 (meist grün). Eine solche LED wird an zwei Pins des Mikrocontrollers angeschlossen. Je nachdem, welche Signale (0 oder 1) an den beiden Pins ausgegeben werden, leuchtet die LED dann rot/grün oder sie bleibt dunkel. Beide Farben können bei dieser Bauform nicht gleichzeitig leuchten; hilfsweise kann durch schnelles Umschalten eine Mischfarbe erzeugt werden. Neben Einzel- und Duo-LEDs sind weitere standardisierte Bauformen und Spezialanzeigen auf dem Markt, die sich im Inneren aus mehreren LEDs zusammensetzen. Sehr bekannte Vertreter sind die so genannten 7-Segment-Anzeigen, die in den unterschiedlichsten Baugrößen erhältlich sind. Die eben erläuterten Grundschaltungen sind in Abbildung 4 dargestellt.

krypczyk_picaxe_4

Abb. 4: Grundschaltungen zum Anschluss von LEDs am Mikrocontroller

Um größere Lasten mit einem Mikrocontroller anzusteuern, muss man für entsprechende Treiberstufen sorgen. Das kann entweder konventionell mithilfe von Transistoren oder spezialisierten Treiberschaltkreisen erfolgen. Will man nur ein oder zwei Ausgänge des Mikrocontrollers verwenden, so genügt eine Treiberstufe mittels Transistor. Durch die Wahl des Transistors bzw. das Hintereinanderschalten mehrerer Transistoren kann man auch die maximal schaltbare Last bestimmen. Treiber-ICs sparen dagegen Aufwand in allen Richtungen, typische Exemplare sind die Modelle ULN2003 (beinhaltet sieben Treiberstufen) bzw. ULN2803 (beinhaltet acht Treiberstufen). Zu den Vorteilen von Halbleitern (Transistoren, ICs) gehört, dass man keine Einschränkungen bei den Schaltzeiten hat und das Umschalten beliebig oft erfolgen kann, da keine mechanischen Schalter bewegt werden müssen. Sollen auf einfachste Weise größere Lasten mithilfe eines Mikrocontrollers geschalten werden, stellen Relais auch im Jahr 2016 durchaus noch eine gute Option dar. Mittels eines Relais gelingt die vollständige Trennung des Steuer- und Schaltstromkreises. Unter Beachtung der geltenden Sicherheitsvorschriften ist es damit auch möglich, deutlich größere Lasten zu schalten, zum Beispiel Haushaltsgeräte oder die Wohnungsbeleuchtung. Hier muss jedoch der dringende Hinweis ergehen, dass man ohne ausreichende elektrotechnische Fachkenntnisse davon absehen muss!

Auch Relais können nicht direkt am Mikrocontroller angeschlossen werden, dazu ist ebenfalls zum Beispiel ein Transistor zwischenzuschalten. Das Schaltungsdesign ist in Abbildung 5 zu sehen. Zu beachten ist die Notwendigkeit der zusätzlichen Diode, die hier die Funktion einer Freilaufdiode einnimmt. Hintergrund: Nach dem Abschalten der Speisespannung sorgt die Selbstinduktion der Spule im Relais dafür, dass der Strom zunächst in der ursprünglichen Richtung weiterfließt. Ohne Freilaufdiode führt das zu einer Spannungsspitze, die sich zur Betriebsspannung addiert und die Schaltstrecke schädigen oder zerstören kann. Mit einer Freilaufdiode wird die Spannungsspitze jedoch auf die Durchlassspannung der Diode (bei Silizium etwa 0,7 V) begrenzt. Das schützt die elektronischen Bauteile (hier den Transistor) vor Überspannung. Auf ähnliche Weise können weitere Kleinverbraucher über Transistoren oder Schalt-ICs an den Mikrocontroller angeschlossen werden. Dazu zählen Kleinstmotoren, Schrittmotoren oder Servos. Schaltungshinweise dazu finden sich hier.

krypczyk_picaxe_5

Abb. 5: Anschluss eines Relais am Mikrocontroller

Um sinnvolle Steuerungsaufgaben mithilfe von Mikrocontrollern durchführen zu können, müssen diese in der Regel auch auf Eingangssignale reagieren können. Diese stammen typischerweise von Tastern oder Sensoren. Einfachste digitale Pegelwechsel können mit Tastern ausgelöst werden, die direkt am Mikrocontroller angeschlossen werden. Analog wie bei der Beschaltung als Ausgang kann auch hier der Taster gegen die positive Versorgungsspannung oder Masse (0V) geschalten werden. Am Eingang des Mikrocontrollers wird damit entweder ein positives oder ein negatives Signal erzeugt. Damit auch bei Inaktivität des Tasters ein definierter Zustand vorliegt, ist der Eingang über einen Widerstand auf einen definierten Pegel zu halten. Die Schaltungsvarianten finden sich in Abbildung 6.

Bei der Eingabe von Digitalsignalen über einen manuellen Taster ist noch eine Besonderheit zu beachten. Das Öffnen bzw. Schließen des Tasters ist ein Vorgang, bei dem mechanische Kontakte bewegt werden, d. h. während des Öffnens und Schließens kommt es zum so genannten Kontaktprellen. Erst nach einem mehrfachen Wechsel des Zustands verbleibt der Taster in seiner endgültigen Lage. Bei einem klassischen Lichtschalter spielt dieses Kontaktprellen keine Rolle, denn es ist unerheblich, ob das Licht beim Ein- und Ausschalten für wenige Bruchteile einer Sekunde flackert. Anders bei der Signalverarbeitung durch einen Mikrocontroller: Hier würde jedes Prellen als ein Wechsel des Eingangspegels registriert werden. In welchem Umfang es zu einem Tastenprellen kommt, kommt dabei auch auf die Bauart und die Qualität der verwendeten Schalter an; in der Regel lässt es sich jedoch auf mechanische Weise nicht vermeiden.

Was sind also die möglichen Auswege? Zum einem ist es möglich, mittels Hardwarebeschaltung für ein Entprellen des Signals zu sorgen. Das geschieht durch eine Widerstandskondensatorbeschaltung (RC-Glied). Die meist einfachere Variante ist das Entprellen mittels Software. Hier wird das Prellen des Tasters bewusst in Kauf genommen; innerhalb der Software wird erst dann mit der gewünschten Reaktion fortgefahren, wenn der Taster mehrfach geschlossen wurde. Damit wird das zwischenzeitliche, nicht gewollte Öffnen und Schließen sozusagen ignoriert (Listing 1).

krypczyk_picaxe_6

Abb. 6: Anschluss von Tastern

init: let b0 = 0
main: if pin 1 = 1 then add
goto main
add: let b0 = b0 + 1
if b0 < 5 then main
high 1
goto main

Weiche Sachen im Detail

Mikrocontroller verstehen letztendlich nur Maschinencode, aber natürlich programmiert auch im Embedded-Umfeld niemand mehr in Maschinensprache (Kombinationen aus 0 und 1). Müssen laufzeitrelevante Funktionen umgesetzt werden, wird auch heute noch auf die Assembler-Programmierung zurückgegriffen, denn hier wird mit speziellen Schlüsselwörtern direkt in Maschinensprache entwickelt. So hat man beispielsweise eine direkte Kontrolle über die Register des Mikrocontrollers. Vorzugsweise erfolgt die Programmierung auch in Hochsprachen wie Pascal oder C. Hier ist eine weitgehende Problemorientierung möglich. Der gelernte Softwareentwickler muss bei der Programmierung auf jeden Fall Abstriche im Komfort hinnehmen, denn die Arbeit mit Mikrocontrollern ist stets mit einer direkten Interaktion der angeschlossenen Hardware verbunden, d. h. Signale sind auf den Pins auszugeben und auf Pegelwechsel ist zu reagieren. Auch auf die Vorteile der objektorientierten Programmierung muss meist verzichtet werden (Ausnahme bei Verwendung der Programmiersprache C++). Meist wird prozedural entwickelt. Erleichterungen erlangt man durch den Einsatz von Bibliotheken, die einsatzbereite Lösungen für viele Fälle anbieten. Ein typisches Beispiel ist die Ansteuerung von Anzeigen.

main:
  high B.1 ; switch on output 1
  pause 5000 ; wait 5 seconds
  low B.1 ; switch off output 1
  pause 5000 ; wait 5 seconds
  goto main ; loop back to start

PICAXE als Lernplattform

PICAXE ist eine Lernplattform. Für die Programmentwicklung wird ein sehr einfacher Basic-Dialekt verwendet. Da der Schwerpunkt auf dem Thema Lernen liegt, wird gerade der Einstieg durch eine Vielzahl von leicht zu merkenden Befehlen erleichtert. Dennoch muss man auch hier die wesentlichen Sprachmerkmale verstanden haben und sie kennen. Nachfolgend geben wir darüber einen kurzen Überblick:

  • Labels: Markierungen im Programm, die mit einem beliebigen Klartext bezeichnet werden. Labels werden mit einem Doppelpunkt abgeschlossen. Verwendet werden sie u. a. als Sprungziele (goto, gosub). Ein simples Beispiel findet sich in Listing 2.
  • Kommentare: Diese sind ohne Bedeutung für die Programmausführung. Kommentare werden mit Apostroph (‘) oder Semikolon (;) eingeleitet. Der Kommentarstatus gilt bis zum Ende der Programmzeile. Eine Alternative ist das Schlüsselwort REM.
  • Konstanten: Sind fixe Werte im Programmcode, zum Beispiel 100, $64, „A“ oder „Hello World„.
  • Symbole: Sind Aliasbezeichnungen für Konstanten und Variablen. Sie dienen damit der vereinfachten Verwendung und des besseren Programmverständnisses. Ein Beispiel für ein Symbol ist RED_LED = B.7.
  • Pre-Processor und Compiler-Directives: Sie beginnen mit einem „#“ und spezifizieren den Übersetzungsvorgang. Ein Beispiel ist #PICAXE, mit dessen Hilfe der PICAXE-Typ angegeben wird.
  • Variablen: Sie werden mittels des Schlüsselwortes let definiert.
  • Schleifen: Der Basic-Dialekt verfügt über eine for…next-Schleife, deren Syntax wie folgt lautet:
FOR variable = start TO end {STEP {-}increment}

(other program lines)

NEXT {variable}

Andere Schleifentypen können über do…loop realisiert werden. Die Schleifenbedingungen können dabei wahlweise am Schleifenanfang oder am Schleifenende angegeben werden.

  • Abfrage von Tasten: Der Befehlbutton dient dazu, Zustandsänderungen von Tasten, die an einem I/O-Pin des Mikrocontrollers angeschlossen sind, zu erkennen. Dabei kann über Parameter angeben werden, ob der Taster gegen Masse oder gegen die Versorgungsspannung angeschlossen ist. Ebenso können Angaben zu einem optionalen Auto-Repeat gemacht werden.
  • Sprungbefehle: Innerhalb des Programmcodes kann mittels goto an eine beliebige Position gesprungen werden. Diese direkten Sprünge gelten seit Langem als sehr schlechter Programmierstil, sie sind jedoch im Bereich der Mikrocontrollerprogrammierung nicht immer zu vermeiden. Unterprogramme werden mittels gosub aufgerufen.
  • Signalausgabe: Externe Hardware wird an den Pins des Mikrocontrollers angeschlossen. Damit sie angesteuert werden kann, sind die Pegel entsprechend auszugeben. Dazu dienen die Befehle high und low. Als Parameter werden der Port und der Pin angegeben. Eine einfache Blinkfunktion lässt sich mit diesen Befehlen, wie in Listung 1 zu sehen ist, realisieren.
  • Programmfluss: Für die Kontrolle des Programflusses stehen die Kontrollstrukturen if…then…else und select…case zur Verfügung.

Diese Aufzählung ist nicht annähernd vollständig. Der Basic-Dialekt enthält viele weitreichende Funktionen, um direkt mit der angeschlossenen Hardware am PICAXE zu kommunizieren, beispielsweise zur Ansteuerung von Servos und Motoren oder zur Ausgabe von Sound. Derartige Befehle erleichtern die Programmentwicklung und erlauben dem Anfänger einen schnellen Einstieg mit hoher Erfolgsgarantie. Wechselt man später auf ein professionelles Entwicklungssystem, muss man viele Funktionen eigenhändig nachbilden oder eben über die o. g. Bibliotheken einbinden.

Fazit und Ausblick

Das Thema IoT ist eng mit der Mikrocontrollertechnik verwandt. Die Übergänge sind fließend. Es gilt, Hard- und Software bestmöglich aufeinander abzustimmen. Egal aus welcher Ecke – ob Elektroniker oder Softwareentwickler – man kommt, es gibt eine Menge zu lernen. Einstiegsplattformen wie PICAXE sind dabei hilfreiche Begleiter, insbesondere dann, wenn der Übergang zur professionellen Entwicklung fließend ist. Viele Zusatzmodule und eine wirklich einfache Sprache erlauben es, kreative Ideen umzusetzen. Viele Innovationen im IoT-Bereich entstammen der Maker-Szene – früher hätte man es kreatives Basteln genannt –, das wieder in Mode gekommen ist. Ob man dabei selbst zum Lötkolben greift oder ob man fertige Module einsetzt, kann dabei jeder selber bestimmen.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Abonnieren
Benachrichtige mich bei
guest
0 Comments
Inline Feedbacks
View all comments
X
- Gib Deinen Standort ein -
- or -