1Die 16-Bit-PIC-Klasse
Die Bezeichnung »16-Bit-PIC« bezieht sich auf die Breite des Datenbusses. Diese Datenbreite ist in vielen Anwendungen sehr praktisch. Der hauptsächliche Gewinn an Komfort gegenüber den 8-Bit-PICs ist aber dem 24 Bit breiten Befehlsformat zu verdanken. Dadurch sind größere Adressräume möglich – sowohl bei den Daten als auch bei den Befehlen. Außerdem erlauben die breiteren Programmworte effizientere Adressierungsarten.
Die Klasse besteht aus den Familien
•PIC24FJ
•PIC24HJ
•PIC24EP
und den dsPICs, die zusätzlich die DSP-Einheit besitzen:
•dsPIC30FJ
•dsPIC33FJ
•dsPIC33EP
Mit den DSP-Befehlen können lineare mathematische Algorithmen, z.B. für Filter, Regelprozesse oder Fourier-Funktionen, effektiv unterstützt werden.
Die Familien unterscheiden sich physikalisch und in schaltungstechnischen Einzelheiten. In jeder Familie gibt es eine große Anzahl von Derivaten, die sich in Größe und Ausstattung beträchtlich unterscheiden.
Alle Derivate der 16-Bit-PIC-Klasse haben aber die gleiche Architektur. Die CPU arbeitet auf die gleiche Weise. Die Befehle sind die gleichen, bis auf die dsPIC-Befehle, die zusätzlich zu den gemeinsamen Befehlen implementiert sind. Weitgehend gleich ist auch das interne Management, z.B. die Organisation der Interrupts oder die Zusammenarbeit der CPU mit den Peripheriemodulen.
In diesem Buch werden vorwiegend die gemeinsamen Eigenschaften beschrieben. Wichtig ist aber auch, die relevanten Unterschiede zu kennen. Man muss unbedingt wissen, welche Details man im jeweiligen Datenbuch nachlesen muss und worauf man sich höchstwahrscheinlich bei allen Derivaten verlassen kann. Man weiß natürlich nie, was den Entwicklern der 16-Bit-Klasse in der Zukunft einfällt.
Die Unterschiede in den Derivaten betreffen hauptsächlich folgende Eigenschaften:
•Die Ausrüstung mit Peripheriemodulen, die in den Datenblättern als Peripherals bezeichnet werden. Dabei geht es nicht nur um die Frage, ob bestimmte Peripheriemodule vorhanden sind und ggf. in welcher Anzahl. Die Module unterscheiden sich auch oft in ihrer Komplexität und Leistungsfähigkeit.
•Die Ausstattung mit Programm- und Datenspeicher. Große Datenspeicher erfordern oft ein komplexeres Management des Adressraums.
•Die PPS(Peripheral Pin Select)-Eigenschaft. D.h., dass die Pins, die den Peripheriemodulen zugeordnet sind, in weiten Grenzen per Software selektiert werden können. Diese Eigenschaft ist oft ausschlaggebend für die Auswahl eines PIC-Derivats. Sie erleichtert nicht nur das Layout, sondern ermöglicht auch Schaltungstricks, die ohne PPS nicht möglich sind.
•Die komfortable DSP-Einheit, die dsPICs zusätzlich besitzen. Man kann sie aber ansonsten in schlichten Ausführungen erhalten.
Ein Schwerpunkt wird in diesem Buch auf die Eigenschaften und die Bedienung der Peripheriemodule gelegt. Es gibt viele Anwendungen, bei denen die Hauptarbeit in ihren Händen liegt und die CPU vorwiegend mit dem Management der Module beschäftigt ist. Die Peripheriemodule können im Wesentlichen mit dem Sprachumfang von C bedient werden.
Über die Beschreibung der inneren Organisation, z.B. die Adressierung der Speicher sowie den Aufbau der Assembler-Befehle, wird ebenfalls ausführlich berichtet.
Vier unterschiedliche Beispiel-PICs
Wir haben unsere Beispiele jeweils an einem von vier typischen, aber deutlich unterschiedlichen Derivaten ausgearbeitet:
•PIC24FJ128GA010
•PIC24FJ256GB110
•PIC24EP512GU810
•dsPIC33FJ256GP710
Ausstattung der vier Beispiel-PICs
Falls dem Explorerboard 16 der dsPIC…710A beigelegt ist, ist das kein Problem. Sie sind fast identisch, auf jeden Fall abwärtskompatibel. D.h., dass in den existierenden Projekten nur der richtige dsPIC angemeldet und der Name des entsprechenden Include-Files um das »A« erweitert werden muss.
Microchip Explorerboard16
Um eine schnelle Möglichkeit zum Nachvollziehen unserer Beispiele zu schaffen, haben wir alle mit dem Explorerboard16 durchgeführt. Selbst eine entsprechende Platine aufzubauen kostet mehr Geld und vor allem Zeit.
Bild 1.1: Explorerboard16
Einige Eigenschaften des Explorerboards
•Stiftleisten für die Aufnahme von PIMs (Plug-in-Module); damit können unterschiedlichste Controller schnell aufgesteckt werden. Zwei PIMs, PIC24FJ128GA010 und dsPIC33FJ256GP710, sind bereits inklusive.
•Stromversorgungsbuchse für 9–15 V ungeregelt zur verpolungssicheren Versorgung aller Komponenten
•RS232-Port inklusive V24-Treiber zum direkten Anschluss an den PC oder über einen V.24/USB-Wandler, um PIC-Ausgaben direkt in einem Terminalprogramm sehen zu können; Eingaben an den PIC sind natürlich auch möglich.
•Temperatursensor vom Typ TC1074 mit analogem Ausgang direkt mit Pin RB4 (AN4) verbunden
•USB-Anschluss
•ICD-Steckverbinder zum Programmieren und Debuggen; mögliche Debugger sind ICD3, PICKit3 oder auch Real-ICE
•Zweizeiliges LCD inklusive Controller zur Textausgabe
•Anschlussmöglichkeit für ein Grafik-LCD
•4 Kurzhubtaster für den Benutzer auf den Pins RD6, RD13, RA7 und RD7
•1 analoges Poti am Pin RB5 (AN5)
•8 LEDs an den Pins RA0 bis RA7
•2 Oszillatormöglichkeiten: ein 8-MHz-Quarz als XT-Osc und ein 32.768-kHz-Uhrenquarz für das PIC-interne RTCC-Modul
•1 serielles EEPROM vom Typ 25LC256 mit 256 kBit Speicher; eine gute SPI-Bus-Demonstration.
•Passende Steckverbindung für den Programmer/Debugger PICkit3
•3 Erweiterungsteckverbinder für EdgeCardModular und PICtail/Plus zur Erledigung fast aller Eventualitäten. Möglichkeit, eine Vielzahl von angebotenen Erweiterungsmodulen anzuschließen
Beispielprojekte
Zu jedem ausgearbeiteten Beispiel gibt es ein eigenständiges Projekt. Wir erstellen immer zu jedem Projekt zwei Dateien, die die Eigenschaften aller Portpins festlegen. Diese Dateien sind zum Teil von dokumentarischer Bedeutung.
PPPiop.h-Datei
In der ersten Datei mit dem Namen PPPiop.h (PPP ist der Projektname) stehen alle Deklarationen und Definitionen, die für die Festlegung der (anfänglichen) Eigenschaften aller Pins benötigt werden. Dazu gehört die Festlegung, ob die Pins Ein- oder Ausgänge sind, ob sie analog oder digital sind und ggf. Open-drain-Eigenschaften haben. Die tatsächlich verwendeten Pins erhalten immer einen Namen. Bei PICs mit PPS (Port Pin Select) gibt es auch noch Deklarationen, die für die Zuordnung zur Funktionalität notwendig sind. Diese Deklarationen werden für jeden Port durchgeführt. Auch nicht verwendete Pins werden dabei berücksichtigt.
Auch die zugehörigen Prototypen der Funktionen, die die deklarierten Werte nach dem RESET in die zuständigen Register schreiben, befinden sich in der PPiop.h-Datei.
PPPiop.c-Datei
Die PPPiop.c-Datei enthält alle Funktionen, mit denen die Anfangszustände der Portpins nach dem RESET in die zuständigen Register geladen werden. Bei PICs mit PPS-Fähigkeit enthält sie auch die Funktionen, die den Pins, die wählbaren Peripheriemodulen zugeordnet werden können, die richtige Funktion zuordnet.
Liste der Beispiele auf der beigefügten CD-ROM
Entwicklungsumgebung
Die Beispielprojekte in diesem Buch wurden unter Windows XP mit MPLAB 8.88 erstellt. Der verwendete C-Compiler ist der C30/XC16 V3.31 von Microchip. Die Projekte sind auch im MPLABX mit dem XC16 V1.21 getestet worden. Die Compiler C30/XC16 verwenden die gleiche Form des Quellcodes und ergeben den gleichen Assemblercode.
Nach dem Importieren ins MPLABX muss im Projekt der verwendete Compiler ausgewählt werden. Der C30/XC16 ist übrigens im MPLABX problemlos verwendbar. Einziger Nachteil: Er wird nicht mehr weiterentwickelt.
Als Programmer bzw. Debugger haben wir den RealICE verwendet. Die billigere Variante, der PICKit3, kann genauso gut eingesetzt werden, sowohl als Programmer als auch als Debugger.
Architektur
Bild 1.2: Blockdiagramm des PIC24FJ128GA010
Wer mit 8-Bit-PICs vertraut ist, wird erkennen, dass die typische PIC-Philosophie erhalten wurde:
•Die Busse zu den Daten-und Programmspeichern sind voneinander getrennt.
•Die Befehle sind (mit einigen Ausnahmen) komplett in einem Programmwort enthalten, d.h. sowohl die Befehlscodes als auch die Argumente.
•Die Befehle werden (mit einigen Ausnahmen) in einem einzigen Befehlszyklus abgearbeitet.
•Eine Fülle von Peripheriemodulen führen ohne Beteiligung der CPU eine Menge nützlicher Funktionen aus.
•Neben den normalen Datenregistern gibt es einen...