PIC

Wechseln zu: Navigation, Suche

Ein PIC ist ein Mikrocontroller der Firma Microchip. Zu aller erst möchte ich die Aufteilung der PICs veranschaulichen. Die PIC-Familien werden fast immer wie folgt bezeichnet: als Beispiel „PIC18“ oder „18er PIC“ bedeutet, es handelt sich um ein PIC18Fxxxx Microcontroller. Alle PICs haben die Harvard-Architektur. Es können auch alle PICs mittels dem ICSP-Adapter programmiert werden. ICSP steht für In-Ciruit-Serial-Programmer, also ist mittels diesem Anschluss ein brennen möglich, wenn der PIC schon in der Schaltung eingebaut ist. Zudem haben alle PICs, wie auch Microcontroller anderer Hersteller, interne Module. Ein Modul übernimmt eine spezielle Aufgabe, die von der Software nur konfiguriert und nicht zusätzlich ausgeführt wird. Ein Beispiel ist das PWM-Modul. Man kann eine PWM mit der Software generieren (SoftPWM), aber einfacher geht es mit dem Modul, dass nur konfiguriert werden muss. Die Ausgabe der PWM erfolgt anschließend allein durch das Modul und nicht der Software. Da die PICs aber sonst sehr unterschiedlich sind, sollten sie getrennt aufgeführt werden. Grob unterteilt werden sie anhand ihrer Datenbreite.

8 Bit[Bearbeiten]

Die 8 Bit Microcontroller-Familien sind PIC10, PIC12, PIC16 und PIC18. Bei den 8-bittigen PICs gibt es einmal den Buchstaben „F“ hinter der Familienbezeichnung und den Buchstaben „C“. Die mit einem „F“ in der Bezeichnung haben einen Flash-Programmspeicher, dieser ist somit mehrmals beschreibbar. Das „C“ bedeutet, dass der Programmspeicher entweder ein OTP-Speicher (One-Time-Programable – Nur ein mal beschreibbar), oder aber ein EPROM-Speicher ist, den man nur mit Hilfe von UV-Licht löschen kann. Aus diesem Grund sind die „C“-Varianten uninteressant für Hobby-Elektroniker, zudem sind die C-Varianten ziemlich alt und sogut wie alle PICs sind ausschließlich mit Flash-Speicher verfügbar. Die Typen der Familien haben unterschiedliche Ausstattung, dennoch kann man sagen, je höher die Zahl, desto Leistungsfähiger ist der PIC. Jedoch: Ein Typ der PIC10 Familie mag zwar deutlich schwächer sein, als ein PIC18, dafür gibt es den PIC10 in einem SOT23-Gehäuse, wohingegen der kleinste PIC18 ein SOIC18 ist. Zudem ist der PIC10 billiger, als ein PIC18. Es kommt also immer auf den Anwendungsfall an.

8 Bit PICs können folgendes beinhalten:

Eine Sonderform der 8 Bit Microcontroller ist der rfPIC12F675. Dieser ist extra für RF, also Funkanwendungen ausgelegt und besitzt einen internen UHF ASK/FSK Transmitter. Eine weitere Sonderform ist der PIC16HV785, der kompatibel zum PIC16F785 ist. Allerdings geht der Spannungsbereich von 2V bis hin zu 15V. Somit kann man diesen auch direkt in ein 12V-System stecken und spart sich ggf. Levelshifter und Spannungsregler. Eine detailiertere Übersicht findet man auf der Microchip-Seite und eine Liste aller Typen ist für jede Familie verfügbar: PIC10, PIC12, PIC16, PIC18.

16 Bit[Bearbeiten]

Die Vertreter der 16 Bit Microcontroller sind PIC24E, PIC24F, PIC24H, dsPIC30F, dsPIC33E, dsPIC33F. Trotz dessen nicht überall ein „F“ in der Bezeichnung ist, haben diese Familien dennoch einen Flash-Speicher. Die dsPICs haben, wie der Name schon vermuten lässt, eine zusätzliche DSP-Einheit, die extra für komplexere Berechnungen wie FFT oder Digital-Filter benutzt werden können.

16 Bit PICs können folgendes beinhalten:

  • bis zu 70 MIPS
  • bis zu 536k Byte Rom
  • bis zu 96k Byte Ram
  • bis zu 4k Byte EEPROM
  • 14 bis 144 Pins / 12 bis 122 IOs
  • “Single Cycle” Multiplikation 16x16 und 32/16 sowie 16/16 Division
  • bis zu 32 Channel 10/12-bit ADC
  • 10/16-bit DAC
  • Digital Power, Motor Control und Audio Peripherals
  • I²C
  • SPI
  • CAN
  • PWM
  • PMP (Parallel Master Port)
  • USB-OTG
  • CTMU
  • RTCC (Real Time Clock&Calendar)
  • DMA Channels für schnelleren Datentransfer

Die Übersicht ist wieder unter der Microchip-Seite zu finden und auch hier gibt es die Typenlisten für die Familien PIC24E, PIC24F PIC24H, dsPIC30F, dsPIC33E, dsPIC33F.

32 Bit[Bearbeiten]

Der 32 Bit Microcontroller hat nicht mehr viel mit den anfänglichen PICs gemeinsam. Er besitzt einen „MIPS M4K“-Kern aber ist trotzdem Pin-Kompatibel zu den 16 Bit PICs. Die Typen der PIC32-Familie unterstützen zusätzlich das JTAG-Interface. Es wurde außerdem auf PIC32-Basis eine Arduino-Alternative entwickelt, die dadurch deutlich leistungsfähiger ist. Genannt wurde dies „chipKIT“ und ist im Moment in 2 Varianten verfügbar. Die Entwicklungsumgebung für die chipKITs basiert auf der Arduino-Software und somit sollen auch alle für den Arduino programmierten Progamme auf dem chipKIT laufen. Es gibt auch PIC32er im DIP-Gehäuse. Somit kann man auch den 32bit Microcontroller von Microchip auf z.B. eine Lochrasterkarte bringen und hat nicht soviele (evtl sogar überflüssige) Pins, wie in den kleinen TQFP/N- oder BGA-Gehäusen.

32 Bit PICs können folgendes beinhalten:

Die Übersicht ist wieder unter der Microchip-Seite zu finden und auch hier gibt es eine Typenliste für die Familie: PIC32MX.

Neu hinzugekommen ist die Serie PIC32MZXXX mit u. a. folgenden wichtigen Neuerungen zu den bestehenden PIC32MX:

  • 200 MHz / 330DMIPS
  • teilweise mit FPU (FloatingPointUnit)
  • bis zu 2MB Flash
  • bis zu 512K RAM
  • EBI (External Bus Interface)
  • SQI (Serial Quad Interface)
  • crypto engine

Dokumentation[Bearbeiten]

Bei den PICs gibt es zu jedem Mikrocontroller ein Datenblatt. Bei den Familien 10F, 12F, 16F und 18F wird in diesem Datenblatt jeweils der ganze Controller incl. seiner Peripherie ausführlich beschrieben. Bei den 16 & 32 Bit Familien (PIC24F und aufwärts) gibt es hingegen zu jedem Controller ein Kurzdatenblatt das die genauen Leistungsmerkmale sowie die wichtigsten Informationen für den alltäglichen Gebrauch enthält. Da bestimmte Peripherie (bspw. I2C, SPI, ... ) aber sehr komplex ist und innerhalb einer Familie (PIC24/dSPic/32) sich identisch verhält, gibt es bei diesen Familien zu jeder Familie die sogenannten Family-Datasheets, welche alle Module im Detail beschreiben.

Compiler und IDE[Bearbeiten]

MPLAB[Bearbeiten]

MPLAB ist die freie IDE von Microchip und unterstützt von vornherein alle Brenner, Debugger, Emulatoren von Microchip. Zudem kann das Programm in der IDE per Software emuliert werden. Um Programme in C zu schreiben, können C-Compiler, sofern die Software das unterstützt, in die IDE eingebettet werden, wie z.B. der HI-TECH C-Compiler. Genaueres kann man auf der Microchip-Seite anschauen.

MPLAB X[Bearbeiten]

MPLAB X ist ist eine Weiterentwicklung von MPLAB. Es beinhaltet alle Funktionen von MPLAB (v8). Jedoch wurde die Software komplett neu gestaltet. Vom Simulator bis zum Projektmanagement ist alles modernisiert worden. MPLAB X ist für alle gängigen Betriebssysteme erhältlich (Windows, Linux und OS X). Weitere Informationen findet man auf der Produktseite von MPLAB X.

C-Compiler[Bearbeiten]

Microchip bietet direkt C-Compiler an. Diese wären C18 (für PIC18 Typen), C30 (für 16bit Typen) und C32 (für 32bit Typen). Diese Compiler können als nicht-kommerzielle Freeware-Version heruntergeladen werden. Dabei wird nach einer gewissen Zeit die Optimierung eingeschränkt. Diese ist für Hobby-Bastler allerdings nicht unbedingt kritisch. Da die C-Compiler C30 und C32 von Microchip auf Open-Source aufbauen, sollte der Sourcecode direkt von deren Seite heruntergeladen und die Aufhebung entfernt werden können (sofern man die Möglichkeit hat, die Software danach wieder zu kompilieren). Es gibt auch andere Compiler, wie z.B. der C-Compiler von HI-TECH. Andere wären noch CC5X oder Compiler der Firma mikroElektronika. Letzterer unterstützt nicht nur alle PICs, sondern ist auch für AVRs, 8051er und ARM Microcontroller, sowie jeweils auch in Basic und Pascal erhältlich. MikroE-Compiler, sowie der CC5X sind in der Freeware-Version allerdings Codegrößenbegrenzt, was gerade bei 16bit oder 32bit PICs schnell eng werden kann.

Mit der Einführung von MPLAB X wurden auch die neuen XC Compiler von Microchip veröffentlicht. XC8 für 8Bit PICs, XC16 für PIC24 und dsPICs und XC32 für PIC32 Mikrocontroller. Auch hier sind Free-Versionen erhältlich.

Ein Vergleich einiger C-Compiler ist in diesem Artikel zu sehen: PIC C-Compilervergleich

Programmiergeräte[Bearbeiten]

Um das Programm auf einen PIC zu bekommen, muss dieses per Gerät auf den PIC „gebrannt“ werden. Microchip bietet dazu das PICKIT2 und PICKIT3 an. Das PICKIT3 ist das aktuellere, was bedeutet, dass Firmwareupdates hauptsächlich für diese Version entwickelt werden. Spürbar ist das jetzt schon bei den PIC32MX, die nur vom PICKIT3 unterstützt werden. Wenn man aber kein PIC32 benutzen möchte, kann man bis jetzt aber auch noch zum PICKIT2 greifen, das zusätzlich noch als kleiner Logik-Analyzer dienen kann. Das nächst bessere, was Microchip bietet, ist ein ICD (In-Circuit-Debugger), das eine erweiterte Debuggermöglichkeit bietet. Das „Flagschiff“ ist der REAL-ICE (In-Circuit-Emulator), der zusätzlich noch in der Hardware emulieren kann. Eine Übersicht ist hier zu sehen.

Wie für andere Microcontroller, gibt es auch für den PIC Selbstbaubrenner. Der wohl Bekannteste ist der Brenner8 von der Sprut-Seite. Doch allgemein gilt für Third-Party-Brenner: Es werden neue Microcontroller-Typen, wenn überhaupt, erst später unterstützt, als bei einem originalen Brenner und es führt zu zusätzlichen, möglichen Fehlerquellen durch den Bau. Denn wer kommt schon auf die Idee den Fehler im Brenner zu suchen und nicht in der Schaltung. Hier im Forum sind schon mehrere solcher Fälle vorgekommen. Außerdem bekommt man das "Henne oder Ei"-Problem zu spüren, denn für den Brenner8 muss man einen PIC18 brennen, d.h. man muss sich irgendwo seinen PIC brennen lassen, bevor man es selbst tun kann. Zudem wird nicht jeder bzw. kaum ein Selbst-Bau-Brenner von der IDE unterstützt, was bedeutet, dass man mindestens 2 Programme braucht - Eine zum brennen und eine zum programmieren. Der Brenner8 unterstützt auch kein Debugging, wie es das PICKIT3 jedoch tut. Die Hilfestellung bei einem verbreitetem Programmiergerät ist selbstverständlich besser als bei einem opensource Selbsbau-Brenner. Zudem wird so ein Brenner und die Software meist von einer Einzelperson gepflegt. Dies bedeutet aber auch, dass die Updates usw von dieser Person abhängig ist. Fällt dieser aus (Krankheit oder persönliche Gründe), geht erstmal nichts weiter voran. Es muss also jeder selbst abwägen, ob einem das die ca. 10€ weniger Wert ist. Wenn es jemanden darum geht, den Brenner selbst zu bauen, der kann auch das PICKIT2 nachbauen, denn Schaltplan (Seite 77+78) und Firmware sind offen auf der Herstellerseite verfügbar. Hier ist zwar immer noch die mögliche Fehlerquelle beim Zusammenbau vorhanden, jedoch hat man damit einen besseren Brenner. Wenn einem der originale Brenner zu teuer ist, kann man sich bei Ebay auch nach einem Clone vom PICKIT2 oder PICKIT3 umsehen. Diese kosten im Moment zwischen 15€ und 25€.

Missverständnisse und Eigenheiten[Bearbeiten]

Es gibt einiges, was einen PIC-Neuling abschrecken oder verwirren könnte. Manchmal hört man z.B. dass kaum oder schlechte Peripherie verbaut wurde, wobei dies meist, wenn überhaupt zutreffend, für sehr alte PICs gilt (90er Jahre). Neue PICs habe oft mehr/bessere Peripherie als ATmegas. Es wird auch oft bemängelt, dass der Quarz-Takt bei 8bit PICs durch 4 und bei 16bit PICs durch 2 geteilt wird. Dafür werden so gut wie alle Befehle in einem System-Takt ausgeführt, wo andere mehr brauchen. 8bit PICs gibt es mit bis zu 64MHz (16 MIPS). Fallen für Neulinge gibt es nur wenige und unkritische (im Vergleich zum „verfusen“ eines AVRs). Es muss zum Beispiel bedacht werden, dass, um auf manche Register zugreifen zu können, die Bank gewechselt werden muss - dies macht ein C-Compiler aber automatisch. Außerdem muss die geplante Vierteilung von oben bedacht werden, um Zeitschleifen zu berechnen. Verwirrend kann gerade für Leute, die den AVR gewohnt sind sein, dass das Register zum Konfigurieren der IOs eine 1 für einen Eingang braucht, und keine 0. Doch merken kann man sich, dass die 1 wie ein großes I aussieht und für Input -> Eingang steht. Andersrum steht die 0 für ein großes O wie Output -> Ausgang.

Wer sich hier im Forum schon mal rumgetrieben hat, kann eventuell auch den „kleinen Krieg“ zwischen AVR und PIC mitbekommen haben. Dazu will ich auch nur sagen, dass an sich jeder Microcontroller seine Daseinsberechtigung hat. Ob PIC oder AVR, ob 8 Bit oder 32 Bit. Deswegen sollte man einfach die Microcontroller ausprobieren und selbst entscheiden. Wenn jemand sich einen, meiner Meinung nach guten Vergleich zwischen AVR und PIC angucken will, kann sich das ->EEVBlog #63<- Video auf Youtube angucken. Da wird auch erläutert, warum es keinen Grund gibt, einen der beiden Microcontroller zu meiden. Zudem ist es auch etwas unprofessionell, ohne selbst eigene Erfahrung gesammelt zu haben, eine Familie oder sogar einen ganzen Hersteller abzuschreiben.

Alte und neue PICs[Bearbeiten]

Microchip stellt schon seit Anfang der 90er Microcontroller her. Damals war die Technik logischerweise noch nicht auf dem Stand wie heute. Es wird immer kleiner und dennoch schneller und stromsparender. Doch da manche wohl einfach nicht von den alten PICs loskommen, werden diese Heutzutage auch noch teilweilse eingesetzt. Außerdem gibt es mehrere (oft alte) fertige Projekte, die eben so einen alten PIC verwenden und da viele die Projekte nachbauen und nichts neu programmieren (wollen), sind diese PICs immer wieder oft zu finden. Die neuen PICs sind nicht nur Stromsparender und haben mehr Platz, sondern sind auch noch billiger. Ich hab mal zwei alte/ältere und oft zu findende PICs rausgesucht (PIC16F84A und PIC16F887) und einfach mal mit neuen PICs der selben Pinzahl und Bauform(DIP) verglichen:

PIC16F84A vs. PIC16F1827
PIC16F84A PIC16F1827
ROM/Flash 1k Word 4k Word
SRAM 68 Byte 384 Byte
EEPROM 64 Byte 256 Byte
Pins/IOs 18/13 18/16
Max. Frequenz 20MHz 32MHz
Internal Oscillator - 32MHz, 32kHz
Comparators 0 2
ADC-Channels 0 12
Communication - 1xUART, 2xI²C/SPI
CCP - 2xECCP, 2xCCP
Timer 1x8bit 4x8bit, 1x16bit
Preis Reichelt (30.03.2012) 3,15€ 1,60€
PIC16F887 vs. PIC16F1939
PIC16F887 PIC16F1939
ROM/Flash 8k Word 16k Word
SRAM 368 Byte 1024 Byte
EEPROM 256 Byte 256 Byte
Pins/IOs 40/36 40/36
Max. Frequenz 20MHz 32MHz
Internal Oscillator 8MHz, 32kHz 32MHz, 32kHz
Comparators 2 2
ADC-Channels 14 14
Communication 1xUART, 1xI²C/SPI 1xUART, 1xI²C/SPI
CCP 1xECCP, 1xCCP 3xECCP, 2xCCP
Timer 2x8bit, 1x16bit 4x8bit, 1x16bit
Preis Reichelt (30.03.2012) 2,65€ 2,15€

Hier sieht man gerade bei dem verbreitetem PIC16F84A, dass dieser aus heutiger Sicht total klein, schlecht und dafür überteuert ist und man für das gleiche Geld 2 bessere bekommt. Der einzige Grund, der für ältere PICs spricht, ist der, dass man eine vorhandene Software benutzen und nicht umschreiben will. Sollte es aber ein neues, eigenes Projekt werden, tut euch einen Gefallen, spart Geld und kauf neue PICs ;)

Bezugsquellen[Bearbeiten]

Controller[Bearbeiten]

Versandhäuser für Privatpersonen

Evaluation Boards[Bearbeiten]

Links und Literatur[Bearbeiten]