Zur Druckansicht wechseln Visit the English version of this page

www.jb-electronics.de » Elektronik » Digitaltechnik » PIC-Mikrocontroller-Einstieg

PIC-Mikrocontroller-Einstieg

Schon viel hatte ich von dieser Microcontroller-Serie der Firma Microchip gehört, doch hatte ich mich - wie viele andere Hobbyelektroniker - noch nicht an diese Giganten herangetraut. Einen Microcontroller in eigenen Projekten zu verwenden kam mir so vor, wie es ein Sprichwort so schön beschreibt: Mit Kanonen auf Spatzen schießen.

Doch diese Aussage ist - so musste ich feststellen - unzutreffend. Aber es ist klar, dass die ersten Schritte in der Microcontroller-Welt nicht leicht sind, und eine gewisse Bereitschaft zur Einarbeitung in die Materie erfordern. Ich möchte hier einen Weg zu den PIC-Microcontrollern vorstellen, wie ich ihn selbst gegangen bin:

Von Grund auf bis zur ersten blinkenden LED!

Aller Anfang ist schwer

Eines Tages entdeckte ich im Conrad-Katalog etwas Interessantes: Das PIC programmer and experimentation board von Velleman.

Was mir daran spontan gefiel, war Folgendes:

Zudem war noch ein Assembler mit dabei, sowie ein Brennprogramm. Doch dazu später mehr.

Um es kurz zu machen: Für mich als Anfänger schien es als die perfekte Einstiegsumgebung. Hier ist das Board zu sehen:

Das PIC programmer and experimentation board

Das Board gekauft, und was nun?

Als nächstes las ich Einiges über das Verwenden von Microcontrollern. Das Wesentliche fasse ich hier einmal zusammen:

Eine kurze Einführung in die Grundlagen

Das Besondere an Microcontrollern ist ja, dass sie universell einsetzbar sind. Sie machen genau das, was wir ihnen sagen. Aber wie genau sagen wir ihnen denn, was sie machen sollen?

Dazu gibt es die Programmiersprachen, in denen die Vorgänge formal beschrieben werden, die der Controller einmal leisten soll. Zu nennen sind da zum Beispiel C oder BASIC.

Da jeder Controller einen festen Befehlssatz besitzt, bräuchte man eigentlich eine eigene Programmiersprache für jeden Controller. Das wäre bei tausenden von Controllern, die es auf dem Markt gibt, sicherlich extrem unpraktisch, daher gibt es den Compiler.

Der Compiler übersetzt allgemeine Aufgaben, wie zum Beispiel Schalte den Pin Nr. 8 von 0 auf 1 in prozessorspezifische Befehle. Diese prozessorspezifischen Befehle sind sogenannter Maschinencode (Assembler), und genau auf den Controller zugeschnitten.

Programme können auch direkt in Assembler geschrieben werden, und viele Elektroniker machen das auch. Damit ist hier nicht der direkte Maschinencode gemeint, sondern die Assembler-Mnemonics. Das sind die Abkürzungen, die direkt in Maschinencode übersetzt werden können. Im Folgenden werden Assembler und Assembler-Mnemonics gleich bezeichnet, da eigentlich immer aus dem Kontext hervorgeht, was gerade gemeint ist.

Der Vorteil vom Programmieren in Assembler ist der, dass der Compiler nicht immer umbedingt die effizienteste Art und Weise findet, den Programmcode in Maschinencode zu übersetzen. Zudem ist Assembler dem Verständnis der inneren Prozesse von Controllern sehr sehr zuträglich. Der (Assembler-)Befehlssatz eines jeden Controllers ist in dessen Datenblatt zu finden, er umfasst bei hobby-typischen Controllern ca. 40 Befehle.

Jetzt haben wir unser Programm kompiliert und Maschinencode vorliegen. Dieser wird dann noch ein eine Datei geschrieben und bekommt somit ein festes Format. Diese Formate sind in der Regel controllerfamilienspezifisch. Die Endung dieser Datei lautet meistens .hex, weshalb sie auch mit Hex-File bezeichnet werden.

Was jetzt noch fehlt, ist die Übertragung des Hex-Files in den Controller: das erledigt ein sogenannter Brenner. Die meisten Brenner lassen sich per serielle Schnittstelle oder USB an den Entwicklungs-Computer anschließen, auf dem das Hex-File für den Microcontroller liegt. Nun wird der Microcontroller mit dem Brenner verbunden, und auf dem Computer ein entsprechendes Brennprogramm aufgerufen, das nun das Hex-File in den Microcontroller überträgt.

Der Microcontroller ist nun fertig programmiert, und kann in die Schaltung eingebaut werden, in der er arbeiten soll. Es ist ebenso möglich, den Controller in der Schaltung zu programmieren (In-Circuit Programming), dazu später mehr.

Zurück ins wirkliche Leben

Bei der oben angesprochen Platine ist ein Compiler dabei, der Programmcode, der in Assembler-Mnemonics geschrieben wurde, in reinen Maschinencode umwandelt. Zudem ist eine Brennsoftware mit dabei:

Die Brennsoftware ProgPic2

Zunächst muss der richtige Zielcontroller (das sogenannte Target Device) ausgewählt werden, dann kann ein Hex-File geladen und in den Controller übertragen werden.

Eigentlich reicht das für das Entwickeln von Microcontrollern aus.

Ein C-Compiler

Ich selber konnte Assembler jedoch nie so viel abgewinnen. Sicher, für das Verständnis ist es interessant, daher sollte mensch ein paar der Befehle seines Controllers durchaus kennen, aber darin programmieren wollte ich wirklich nicht. Daher suchte ich einen kostenlosen PIC-C-Compiler möglichst ohne Einschränkungen.

Den gibt es leider nicht. Wenn jemand hier anderer Auffassung ist, dann bitte ich ausdrücklich um eine Email.

Meine Wahl fiel stattdessen auf den PICC-Compiler von HTSOFT; jedoch werden bei der kostenlosen Version (im Englischen heißt sie Lite-Version) jegliche automatischen Optimierungen nach einer Zeit ausgeschaltet, bzw. sind gar nicht erst verfügbar. Das ist bei kleineren Programmen, wie sie zumeist im Hobbybereich auftreten, durchaus zu verkraften, da wir meistens nicht um jedes Byte Speicherplatz kämpfen müssen.

Herunterladen können Sie den Compiler, wenn Sie den Links auf http://www.htsoft.com/ folgen. Wichtig: Ich verwende den Compiler für PIC10/12/16 MCUs, das sind die Midrange-Controller. Es sind auch Versionen für die PIC18-, PIC32- und dsPIC3x/dsPIC24-MCUs vorhanden, aber alle Schaltungen dieser Homepage verwenden bis jetzt nur die Controller der PIC16-Serie. Für USB-Anwendungen können aber später durchaus mal die PIC18-MCUs interessant werden.

Jetzt haben wir also auch einen Compiler, den wir am besten schon einmal installieren.

Wichtig: Bitte lesen Sie den Abschnitt über die Einbindung nach MPLAB, da es einen kleinen Fehler in den deutschen Sprachdateien des Compilers geben kann.

Eine IDE

Ich bin auch kein Fan von Entwicklungsumgebungen, aber hier mache ich gerne eine Ausnahme: MPLAB ist die kostenlose Entwicklungsumgebung von Microchip speziell für PIC-Controller.

Denn der Witz ist, dass sich oben genannter PICC-Lite Compiler in die IDE einbauen lässt (wie das funktioniert, siehe weiter unten), die IDE einen Editor besitzt, der Syntax-Highlighting für C-Code besitzt, und zudem ganze Projekte verwalten kann. Es ist einfach ein praktisches kostenloses Software-Tool, das einem eine Menge an Arbeit abnimmt.

Herunterladen können Sie sich MPLAB ebenfalls unter http://www.microchip.com.

Wer die IDE benutzen will, der wird im Folgenden noch ein paar Hinweise zu ihrer Bedienung finden.

Einbindung des PICC-Lite Compilers nach MPLAB

Zunächst starten wir MPLAB, alle erscheinenden Fenster (z.B. Workspace, Output, ...) klicken wir weg.

Die MPLAB IDE

Über Project → Project Wizard erstellen wir ein neues Projekt. Das machen wir natürlich zu Beginn eines jeden Projektes, nicht sehr überraschend.

Der MPLAB Project Wizard

Dann klicken wir auf Weiter und wählen unseren Controller aus:

Der MPLAB Project Wizard - Auswahl des Devices

Wer genau hingeguckt hat, sieht natürlich, dass im ersten Screenshot von MPLAB unten schon der PIC16F627A steht. Das liegt natürlich daran, dass ich mein MPLAB schon oft benutzt habe. Beim ersten Benutzen wird dort noch nichts stehen, und Sie müssen Ihren Controller in der Device-Dropdown-Liste ausfindig machen. Weiter geht's:

Der MPLAB Project Wizard - Auswahl des Compilers

Hier können wir ihn nun endlich auswählen, unseren Compiler. Bei mir ist er wiederum standardmäßig ausgewählt, das ist klar, aber auch bei Ihnen sollte er im Active Toolsuite Dropdown-Menü erscheinen. Dann den C-Compiler auswählen.

Danach wird noch der Pfad des Projektes sowie der Projektname festgelegt:

Der MPLAB Project Wizard - Auswahl der Projektdatei

Es können hiernach auch noch existierende Dateien zum Projekt hinzugefügt werden, aber das sind Feinheiten, um die es hier nicht gehen soll. MPLAB ist recht intuitiv zu bedienen, daher sollte das kein Problem darstellen.

Nun folgt eine Zusammenfassung, und das Projekt kann erstellt werden.

Der MPLAB Project Wizard - Summary

Es erscheinen nun zwei Fenster:

Die MPLAB IDE - alle Einstellungen getätigt

Unser erstes Programm

Wir erstellen eine Datei namens main.c mit folgendem Inhalt:

// Our first program
//
// PIC16F627A
//
// toggle an LED on port RB0 with about 2Hz
//

// include PIC header
#include <pic.h>

// variable
static int t = 0;

// main method
void main (void) {

  // configuration word
  __CONFIG(0x3f70);

  // IO settings
  #define LED RB0
  TRISB0 = 0;

  // main loop
  while (1) {

    // toggle LED
    LED ^= 1;

    // wait for about .25s
    for (t = 0; t < 16000; t++) {
      NOP();
    }

  }

}

Diese Datei fügen wir nun dem Projekt hinzu über Project → Add Files to Project. Anschließend kommt der große Moment, und wir kompilieren den Code mittels Project → Make bzw. durch Drücken von F10.

Es erscheint nun das Output-Fenster, in dem Informationen über den Kompiliervorgang sowie die Benutzung der Controller-Ressourcen zu finden sind:

Die MPLAB IDE - das Output-Fenster nach MAKE

Das wäre geschafft: BUILD SUCCEEDED. Wenn dort aber BUILD FAILED steht, ist etwas schief gelaufen.

PICC-Lite - fehlerhafte Sprachdateien

Bei mir erschienen recht lange die Meldungen "error/warning 1207 generated, but no description available" oder "error/warning 1208 generated, but no description available". Abhilfe dazu war es, die deutsche Sprach(text-)datei "de_msgs.txt" mit dem Inhalt der englischen Datei "en_msgs.txt" zu füllen.

Datei ersetzen

Anscheinend waren die Fehlerbeschreibungen in der deutschen Sprachdatei unvollständig.

Übertragung des Programms in den PIC16F627A

Gut, jetzt haben wir diese Hürde auch noch genommen. Jetzt kann der PIC16F627A in die Fassung auf dem Board gesteckt werden, das Board an den PC angeschlossen werden, und das Brennprogramm aufgerufen werden. Mit diesem Programm öffnen wir dann das Hex-File "Test-Projekt.hex" und klicken auf Write. Unser LED-Blinkprogramm wird nun auf den PIC geschrieben.

Funktionstest

Wenn wir nun den Schalter SW5 auf dem Board von PROG auf RUN stellen, sollte die LED LD1 mit etwa 2Hz anfangen zu blinken.

Herzlichen Glückwunsch, es ist geschafft! Das erste Programm läuft!

Und wie geht es weiter?

Das soll es hier mit der Einführung in die Welt der PIC-Microcontroller gewesen sein, aber es gibt noch sehr viel zu lernen, was die Programmierung der Controller angeht, sowie die Verwendung spezieller Features. Ich werde es nicht schaffen, auf diesen Seiten eine vollständige Einführung zu geben, aber andere Internetseiten haben das bereits geschafft.

Die beiden bekanntesten deutschen Webseiten zu PIC-Controllern sind ohne Zweifel:

Eine nette Seite, die noch im Aufbau ist, ist diese hier:

Ansonsten gibt es im Examples-Ordner vom PICC-Lite Compiler noch Beispiele in C, die studiert werden können.

Diese Codes stellen schon ein Fundament dar, auf das man seine eigenen Entwicklungen durchaus stützen kann. Natürlich steht es auch jedem frei, die C-Codes der PIC-Projekte dieser Homepage als Verständnisstütze zu verwenden.

Ein professionelles Programmiergerät

Das Board von Velleman, welches hier ganz zu Anfang erwähnt wurde, ist sicherlich für den Anfänger zum Einarbeiten gut geeignet. Ich nutze es auch oft, um rudimentäre Funktionen meines PICs zu testen (Reaktion auf Eingaben, Ausgabe von LED-Bitmustern, etc.). Aber es kommt der Zeitpunkt, an dem dieses Board nicht mehr ausreicht.

Es unterstützt nicht sehr viele PICs, und zudem ist die Brennsoftware nicht sehr ausgereift, da sie zwischendurch schon einmal abstürzt.

Was schafft hier Abhilfe? Microchip höchstpersönlich! Sie bieten das PICkit2 und PICkit3 an, das sind vollwertige Programmier- und Debug-Geräte, die sich in MPLAB implementieren lassen (über den Programmer → Select Programmer-Dialog), und zudem eine ganze Menge an Controllern unterstützen.

Und das beste: Sie kosten deutlich unter 40€. Ich besitze ein PICkit3 und möchte es nicht mehr missen.

Mehr Informationen zum PICkit3 finden Sie zum Einen auf http://www.microchip.com/, und zum Anderen hier, wo es um das PICkit3 und die Verwendung der ICSP-Schnittstelle geht.

Brenner können natürlich auch selbst gebaut werden, wer sich dafür entscheidet, der findet auf www.sprut.de etliche Nachbauvarianten.

Abschließende Worte

Obwohl das Basteln mit PICs teilweise frustierend sein kann, halte ich es letztenendes durchaus für lohnenswert, sich damit auseinanderzusetzen. Webseiten zum Thema PIC-Mikrocontroller gibt es im Internet zuhauf, man ist mit seinen Programmierproblemen also fast nie allein. Eine nützliche Rubrik gerade für Anfängerfehler beim Programmieren gibt es unter sprut.de: der Bereich Fallen befast sich exakt mit den Stolpersteinen, die sich einem mal spontan in den Weg stellen können. Ich kann nur aus eigener Erfahrung berichten, dass mir einige der Tips dort wirklich sehr weitergeholfen haben.

Ansonsten gibt es auf meiner Webseite jetzt noch das PIC16F627A-Lexikon, in dem controllerspezifische Probleme und Fragestellungen behandelt werden.

In diesem Sinne möchte ich jeder und jedem, die / der sich nun an die PIC-Controller heranwagen will, viel Glück, aber vor allem viel Spaß wünschen.

Hier ist ein ganz geeignetes Einsteigerprojekt zu finden: der PIC-Zähler I.

Nach oben

show print layout Die deutsche Version der Seite besuchen

www.jb-electronics.de » Electronics » Digital Technology » PIC microcontrollers

PIC microcontrollers

My apologies...

There is no English translation of this page available yet. It will take some more time for me to translate the whole website.

If you have a particular interest in this page getting translated as fast as possible, please contact me; I will see what I can do. Please click here for the German version.

To the top