PIC18 Tutorial – Einleitung

PIC Mikrocontroller gibt es in vielen verschiedenen Sorten. Wir beschäftigen uns hier vornehmlich mit den PIC18F Typen. Nachfolgend möchte ich euch etwas in die Grundzüge und die wichtigsten Eigenschaften der PIC Mikrocontroller einführen. Wie ihr die PIC dann wirklich (in C) programmiert, könnt ihr dann in meinem PIC-C-Tutorial nachlesen.

Was ist eigentlich ein Mikrocontroller? Ein Mikrocontroller ist im Grunde genommen ein kleiner Computer. Und hier bedeutet klein, dass sich alles auf einem einzigen Chip befindet. Die Komponenten reichen von der CPU an sich über digitale sowie analoge Ein- und Ausgabe bis hin zu Timern/Countern und weiteren Hardware-Modulen. Außerdem ist alles wesentlich kleiner ausgelegt als man es von einem normalen Computer/PC gewohnt ist. So stehen einem Mikrocontroller natürlich keine GByte oder gar TByte an Speicher zur Verfügung. Ein Mikrocontroller befindet sich eher im Bereich von KByte. Aber das ist auch in Ordnung so, da wir weder ein großes Betriebssystem noch irgendwelche großen “Programme” auf dem Controller laufen lassen werden. Ihr werdet schnell feststellen, dass selbst die vergleichsweise wenigen KByte eines Mikrocontrollers ganz schön viel sind und für eine ganze Menge Algorithmen  (Programme) ausreichen 🙂

Foto eines Raspberry Pi Zero mit ARM Cortex SoC

Wofür braucht man Mikrocontroller?

Der Anwendungsbereich für Mikrocontroller ist riesig. Mikrocontroller sind aus unserer modernen Welt nicht mehr weg zu denken. Heutzutage ist in fast jedem elektronischem Gerät ein oder sogar mehrere µC (Kurzform für Mikrocontroller: Mikro/[µ] + [C]ontroller) verbaut. Nur um mal ein paar Beispiele zu nennen: Toaster, Mp3-Player, Backofen, Smartphone, Kamera, Kühlschrank und noch vieles mehr.

Man kann mit µC viele Aufgaben erledigen, die sonst einen sehr großen Aufwand an entsprechend logischen Bauteilen hätten (vgl. diskreter oder gar analoger Aufbau). Daher verwenden wir Mikrocontroller für Steuerungen und Regelungen jeglicher Art. Das Foto (siehe oben) zeigt zum Beispiel einen Quadrocopter (auch fälschlicherweise oft als Drohne bezeichnet). Auch dieser wird selbstverständlich von einem Mikrocontroller gesteuert und vor allem geregelt.

Was brauche ich alles

Um mit Mikrocontrollern und im Speziellen mit PIC-Mikrocontrollern arbeiten zu können, müsst ihr ein paar Anschaffungen im Vorfeld tätigen. Dieses Tutorial beschäftigt sich mit Mikrocontrollern der Firma  Microchip. Dabei liegt der Fokus vor allem auf der PIC18F-Familie, später erzähle ich noch etwas mehr was es mit dem “18F” beziehungsweise den unterschiedlichen Familien auf sich hat.

Die Entwicklungsumgebung

Als Entwicklungsumgebung bezeichnen wir eine Art Texteditor, der uns beim Schreiben unserer zukünftigen Programme unterstützt. Sie werden auch als IDE (Integrated Development Environment) bezeichnet. Es bietet sich für PIC Mikrocontroller  besonders das Programm MPLABX IDE  an. Die Software stammt direkt vom Chip-Hersteller Microhip und ist kostenlos verfügbar. In dieser IDE können Programme zum Beispiel in Assembler oder C (Programmiersprache) geschrieben und mit einem Programmiergerät direkt in den PIC übertragen werden. Die folgende Grafik zeigt das Arbeitsfenster der Software. MPLAB X ist sowohl für Windows als auch für Linux und Mac OS erhältlich.

Ich habe für die Entwicklungsumgebung einen eigenen kleinen Artikel geschrieben, der euch durch die ersten Schritte (Projekt anlegen, Dateien erzeugen, …) leitet.

Wenn ihr beabsichtigt nur in Assembler (kurz ASM) zu programmieren müsst Ihr euch lediglich die IDE (MPLABX) herunterladen. Die Software ist direkt auf der Homepage von Microchip zu finden (siehe Link). Ich würde euch jedoch dringend empfehlen die Programmiersprache C zu verwenden. Das Einarbeiten sowie das Verständnis und das Schreiben des Programmcodes ist im Vergleich zu Assembler deutlich einfacher/übersichtlicher/komfortabler. Ich gehe also davon aus, dass ihr in C programmieren werdet. Ich empfehle ich euch den Compiler XC8  zu nutzen. Hierbei handelt es sich um eine zusätzliche Software, die ihr auf eurem PC installieren müsst. Die Reihenfolge der Installation von MPLABX und XC8 spielt keine Rolle. Der Compiler (XC8) sorgt später dafür, dass das von euch erstellte C-Programm so übersetzt wird, damit es (nach einer Weiterverarbeitung durch den Assembler) vom Mikrocontroller verstanden wird. Auch zu diesem Compiler findet Ihr einen kurzen Artikel, der vor allem Umsteigern von anderen Compilern dabei hilft Unterschiede zu finden.

Programmiergerät

Wenn ihr dann mal ein Programm fertig geschrieben habt wird aus dessen Datei(n) eine sogenannte HEX-Datei in Maschinensprache generiert. Diese hat dann die Dateiendung hex. Es handelt sich um eine Datei in der lauter (Hex-)Zahlen enthalten sind. Das ist letztendlich die Sprache, die der Mikrocontroller  versteht. Diese Hex-Datei muss schlussendlich in den PIC hinein, damit das Programm ausgeführt werden kann. Diesen Vorgang bezeichnet man im Allgemeinen als brennen oder auch flashenDas nachfolgende Foto zeigt ein PICKit3, das diese Aufgabe erledigen kann.

Quelle: Yutaka Tsutano

Euer Programm wird in den Speicher des PIC geschrieben. Ich empfehle euch das PICKit3  (siehe Foto). Es handelt sich hierbei um ein günstiges Programmiergerät und Debugger in einem. Das bedeutet ihr könnt nicht nur das Programm (Hex-Datei) in den PIC laden, sondern auch noch euren PIC in der fertigen Schaltung debuggen (Haltepunkte im Programmcode setzten und Variablen auslesen). Das ist beim Entwickeln von Software ein ganz wesentlicher Bestandteil und hilft extrem bei der Fehlersuche. Das PICKit3 ist das Tool für Einsteiger und Fortgeschrittene (sehr gutes Preis/Leistungsverhältnis). Ein weiterer nicht zu unterschätzender Vorteil des PICkit3 ist, dass es zu 100% von MPLABX unterstützt wird. Sprich das Schreiben und das Brennen geschieht alles innerhalb von MPLABX und benötigt keine weitere Software.

Inzwischen hat Microchip den Nachfolger das PICKit4  veröffentlicht. Wer bereits ein PICKit3 gekauft hat hat jedoch keinen Grund nun auf ein 4er umzusteigen. Das PICKit3 ist nach wie vor absolut ausreichend. Einer der wesentlichen Unterschiede ist sicherlich die höhere Geschwindigkeit im Vergleich zum Vorgänger. Wer vorm Neukauf steht, sollte daher ruhig auch das aktuelle Modell wählen 😉

Mikrocontroller

Neben den ganzen bereits erwähnten Tools benötigt ihr natürlich auch noch den PIC (Mikrocontroller) selber. Wie ich schon weiter oben erwähnt habe, würde ich euch für den Einstieg zum Programmieren in C die PIC18F empfehlen. Warum das so ist hat mehrere Gründe, doch vor allem, da es wesentliche Verbesserungen im Vergleich zu den PIC16F-Modellen gibt. Wenn ihr jedoch zunächst mit Assembler arbeiten möchtet um z.B. die “Innereien” des Controllers besser kennen zulernen, dann könnt ihr auch mit den PIC16F anfangen. In dem Fall solltet ihr die Webseite von Sprut unbedingt besuchen, da er besonders intensiv mit Assembler arbeitet und viele ausführliche Informationen bereitstellt. Als Bezugsquelle kann ich euch das Versandhaus Reichelt oder auch Voelkner empfehlen.

Motivation

Zu guter Letzt eine ordentlich Portion Motivation. Es kann durch aus schon mal vorkommen, dass es mehrere Tage dauert bis ein Programm so arbeitet, wie ihr euch das vorgestellt habt. Und das kann mitunter auch ganz schön Nerven kosten! Manchmal sind es die einfachsten Dinge die man wieder und wieder vergisst. Doch am Ende ist es um so schöner, wenn das Programm dann genau so funktioniert, wie man es sich vorgestellt hat. Man findet beim Stöbern im Internet immer wieder sehr interessante Projekte, die mit Hilfe von Mikrocontrollern umgesetzt wurden. Insofern sollte die Motivation euer kleinstes Problem sein 🙂

Tipp für Anfänger

Wer es besonders einfach und schnell haben möchte, kann sich auch ein so genanntes Starterkit kaufen und sofort mit dem Programmieren loslegen. Diese Variante bietet sich besonders an, wenn ihr zum Beispiel (noch) nicht die Möglichkeit habt zu Hause zu löten bzw. keine oder nur sehr wenig Grundlagen zur Elektrotechnik habt, die den Aufbau von mehr oder weniger komplizierten Schaltungen erschweren. Nachfolgend mal eine Auflistung verschiedener Entwicklungsboards:

* Mit unter 30€ sehr günstig und ist für gewöhnlich sehr gut dokumentiert. Standardmäßig (Dokumentation, Beispielprogramme, …) wird hier mit einem anderen C-Compiler gearbeitet.

Eigennützige Empfehlung

Gerne möchte ich euch noch ein weiteres Einsteigerboard vorstellen, das StartPIC18. Beim StartPIC18 handelt es sich um ein von mir entwickeltes Entwicklungsboard für Anfänger und Fortgeschrittene. In dem zugehörigen Artikel hier auf meiner Webseite beschreibe ich das Board im Detail und liefere zusätzlich jede Menge Starthilfe in Form von Programmbeispielen. Das Board bietet für vergleichsweise wenig Geld viele Möglichkeiten zum Austoben mit einem PIC18F25K22 Controller.

Welcher PIC ist der Richtige?

Es gibt eine sehr große Auswahl an verschiedensten PIC Controllern, da ist es zu Beginn erst einmal nicht so einfach den richtigen PIC zu finden. Daher solltet ihr euch zu Beginn erstmal nur auf wenige PIC-Typen beschränken um nicht den Überblick zu verlieren. Der Rest kommt mit der Zeit von ganz allein. Im Datenblatt zu eurem PIC findet ihr alles was ihr zum jeweiligen PIC wissen müsst. Da die Datenblätter, wie ihr sicherlich schon vermutet habt, in Englisch geschrieben sind, werdet ihr auf kurz oder lang nicht um Englisch herum kommen. Aber vieles erklärt sich mit der Zeit auch von allein und die Datenblätter von Microchip sind in der Regel sehr verständlich geschrieben, so dass man auch mit Grundkenntnissen ganz gut voran kommen sollte.

Hier einmal zwei PICs, welche ich zum Einstieg empfehlen möchte:

PIC18F14K22  PIC18F45K22
Anwendung: Kleine Projekte Anwendung: Größere Projekte
Programmspeicher: 16 KByte Programmspeicher: 32 KByte
Pins: 20 Pins: 40
I/O Pins: 18 I/O Pins: 36
ADC Eingänge: 12 ADC Eingänge: 28
Timer (Anzahl): 4 Timer (Anzahl): 7
Preis bei Reichelt (2015): 2,35 € Preis bei Reichelt (2015): 3,10 €

Wenn ihr später mal einen anderen PIC verwenden möchtet, vielleicht weil die Ein- und/oder Ausgänge nicht mehr ausreichen, dann könnt ihr hier oder hier  mal rein schauen. Dort könnt ihr die Anforderungen an euren PIC eintragen und bekommt die in Frage kommenden Typen aufgelistet.

Es wird gerne gesagt: “Kennst du einen PIC, kannst du alle”. Der Spruch ist natürlich etwas überspitzt, trifft den Nagel jedoch auf den Kopf. Es gibt zwar sehr viele verschiedene PIC-Typen, die sich jedoch oft nur geringfügig unterscheiden. Oftmals hat ein PIC lediglich ein/zwei Funktionen mehr als ein anderer oder ist sogar identisch bis auf einen größeren bzw. kleineren Flash Speicher.

Peripherie

Ein PIC bzw. ein Mikrocontroller ist zwar ein hoch komplexes Bauteil, benötigt zum Arbeiten aber noch die ein oder andere Beschaltung (genannt Peripherie). Die normalen PICs von denen ich in diesem Tutorial reden werde, arbeiten mit einer Betriebsspannung von 3,3 oder 5V Gleichspannung (DC). Weiterhin benötigt der PIC einen Takt damit er “weiß” wann er einen Arbeitsschritt durchführen soll. Die meisten PIC-Typen können sich diesen Takt selbst intern erzeugen. Jedoch gibt es auch (wenn auch wenige) Typen, die das nicht können und diese benötigen dann zwingend einen von extern zugeführten Takt. Des Weiteren ist zu entscheiden, ob man dem PIC eine Resetschaltung gönnt oder man den Pin MCLRE (master clear reset) als zusätzlichen Eingang benutzen möchte. Wenn man den PIC während des Betriebs resetten können möchte, wird eine Beschaltung mit Taster an diesem Pin benötigt. Würde man sich dafür entscheiden, keinen Reset-Schalter benutzen zu wollen, so ist der freie Pin als Eingang nutzbar (siehe Datenblatt). Auch interessant, wenn auch etwas vorweg gegriffen: Wer einen Bootloader einsetzen möchte um z.B. ohne Programmiergerät neue Firmware in den PIC (z.B. via USB) zu übertragen, wird den MCLRE-Pin nutzen wollen – siehe verlinkten Bootloader-Artikel für mehr Infos. In der Grafik ist einmal die Grundbeschaltung eines PICs angedeutet, wobei diese je nach Typ kleiner ausfallen kann. Ausnahmslos immer erforderlich ist ein sogenannter Abblockkondensator  an jedem Betriebsspannungspin / Pärchen (+/-) des Controllers. Besonders größere Controller haben durchaus mehrere Anschlüsse für die Spannungsversorgung.



Wie ich bereits oben erwähnt habe könnte z. B. bei dem PIC18F14K22 die Beschaltung des Taktgebers (Quarz) komplett entfallen, da dieser einen eigenen Takt intern erzeugen kann. Das bedeutet, dass die Bauteile XT2, C2 und C3 nicht benötigt werden. Außerdem können der Taster RES sowie R1 entfallen, da wir entscheiden können ob wir einen Resetschalter brauchen oder eben nicht. Man muss hierbei beachten, dass die MCLRE Beschaltung low aktiv ist. Das heißt, dass der PIC einen Reset durchführt, wenn an dem MCLR-Pin ein Low-Potential anliegt (TTL-Logik). Bei High-Pegel hingegen arbeitet der PIC-Mikrocontroler ganz normal seinen Programmcode ab. Die Beschaltung kann also auf einen einfachen Abblockkondensator minimiert werden 🙂

Wenn ihr euch dafür entscheidet eine MCLRE Beschaltung nicht benutzen zu wollen, müsst ihr das immer im Programm oder in der Konfiguration angeben. Dazu komme ich aber noch, wenn wir beim Kapitel Konfiguration angekommen sind. Achtet bei der Wahl des PIC immer auch auf den zulässigen Bereich für die Betriebsspannung, denn nicht jeder PIC kann mit bis zu 5V betrieben werden. Einige PIC können bspw. nur mit maximal 3,3V betrieben werden.

Taktquelle

Die Taktquelle eines PIC kommt immer an seine Pins OSC1 und OSC2 (sofern er extern versorgt werden soll). Man kann als Taktgeber zwischen verschiedenen Quellen auswählen. In der angedeuteten Schaltung (siehe oben) ist ein Quarz verwendet worden. Dieser hat im Gegensatz zu einem Keramik Resonator den vermeintlichen Nachteil, dass er an seinen beiden Beinen jeweils noch einen Kondensator benötigt (das sind immerhin zusammen schon drei Bauteile). Den Wert für die Kondensatoren könnt ihr übrigens im Datenblatt des jeweiligen PIC nachlesen. Er variiert je nach Frequenz des Quarzes. Der Keramikresonator hingegen hat die Kondensatoren bereits im Gehäuse integriert und spart somit Platz. Ich empfehle euch die Verwendung von Keramik Resonatoren, sofern ihr überhaupt eine externe Taktquelle verwenden möchtet.

Ist eure Anwendung nicht gerade eine Uhr, die einen relativ genauen Takt voraussetzt (eine Uhr, die alle 60 Minuten x Minuten vor/nach geht ist für die Tonne), könnt ihr getrost den internen Takt nutzen. Dann müsst ihr die Konfiguration entsprechend einstellen. Das geht entweder manuell über den Programmcode oder über die Einstellungen in MPLABX, siehe nachfolgende Abbildungen:

Öffnen des Configuration Bits Menüs

Einstellen sämtlicher Configuration Bits mit Beschreibung in Klartext

Copy & Paste des generierten Codes in das Programm

Programm erstellen

Ein Programm kann man auf verschiedene Weise schreiben. Grundsätzlich lassen sich Programmtexte in einem einfachen Texteditor schreiben. Dabei wird man jedoch wenig Freude haben, da einem der normale Texteditor selbstverständlich nicht großartig beim Entwickeln unterstützen wird. Wir werden daher die Entwicklungsumgebung MPLABX von Microchip (siehe Abbildung oben) verwenden, da diese ein paar entscheidende Vorteile hat.

Ausblick

In den nächsten Kapiteln dieses PIC-Tutorials beschäftigen wir uns mit den ersten wesentlichen Komponenten eines Mikrocontrollers. Essentiell sind hier natürlich die Ein-/ und Ausgänge sowie Timer, die für unzählig viele Anwendungen nötig sind. Wenn du neugierig geworden bist, dann lies doch einfach direkt im nächsten Kapitel weiter: PIC18 Tutorial – IOs, Timer und ADC

Leave a Comment