
Bei PICmicro handelt es sich um eine Mikrocontrollerfamilie, die von der Firma Microchip Technology Inc. hergestellt wird.

In den 1970er Jahren entwickelte die Mikroelektronikabteilung von General Instrument (GI) unter Beaufsichtigung von Stefan Lehmann den „PIC1650“. In den folgenden Jahren und Jahrzehnten wurde daraus eine große Mikrocontrollerfamilie abgeleitet. Die Bezeichnung „PIC“ stand ursprünglich für Programmable Interface Controller, wurde aber schon kurz nach der Markteinführung als Programmable Intelligent Computer interpretiert.
Die Originalausführung des PIC war als ROM-basierte, externe Erweiterung der 16-Bit-CPU „CP1600“ (ebenfalls von GI) gedacht, um deren eher mäßige I/O-Performance zu verbessern. Als Befehlsformat kam ein simpler Mikrocode zum Einsatz, der in einem ROM abgelegt war.
Im Jahre 1989 verkaufte GI die Mikroelektronikabteilung, und die neuen Besitzer beendeten beinahe alle Produktlinien. Der PIC hingegen wurde mit einem EPROM ausgestattet, um einen vom Anwender programmierbaren Mikrocontroller daraus zu machen. Durch Erweiterungen und Variationen der internen Peripherie, Bauteilform und Geschwindigkeit entstand eine sehr große Produktfamilie, die Mikrocontroller sowohl für allgemeine Anwendungen als auch spezialisierte Bereiche bereitstellt.

PIC-Mikrocontroller (Peripheral Interface Controller) von Microchip Technology sind 8-, 16- und 32-Bit-RISC-Mikrocontroller. Sie wurden ursprünglich mit einem kleinen Befehlssatz und einfacher Handhabung konzipiert. Je nach Familie variiert der Befehlssatz von etwa 33 (Baseline) bis über 70 Befehle (Enhanced).
Seit 2007 wurde die PIC32-Serie erheblich weiterentwickelt. Heute umfasst sie unter anderem:
Außerdem wurden neue Architekturen eingeführt:
Die aktuelle Entwicklungsumgebung basiert auf:
Relativ preiswerte Produkte und günstige Entwicklungswerkzeuge mit teilweise kostenlosen C-Compilern von Anfang der 1990er Jahre bis heute begünstigten die vielfältige Verbreitung von PIC unter Hobbyelektronikern. Die ersten PIC, die hier verwendet wurden, waren der PIC16C83 und seine Nachfolger PIC16F83 bzw. PIC16F84 durch ihren bereits vorhandenen Flash-Speicher. Diese PIC werden zwar heute noch angeboten, sind aber inzwischen verhältnismäßig teuer. Als eine Alternative zu den 8-Bit-PIC können die AVR-Controller von Atmel angesehen werden.
Für umfangreichere Aufgaben sind die Produkte der Enhanced-Familie (PIC18Fxx) gedacht. Der lineare Adressraum (siehe nachstehend) soll es für Entwickler einfacher machen, ein funktionsfähiges Programm zu entwickeln. Als Programmiergerät stehen das ältere PICkit2, bzw. das neuere PICkit3, welche die meisten aktuellen 8 und 16 Bit PIC programmieren können, und der ICD2 Debugger von Microchip zur Verfügung.
Nachfolgend eine kleine Auswahl von PIC-Produkten mit 5 Volt Versorgungsspannung, im DIL-Gehäuse erhältlich und mit gleicher Pinzahl zueinander pinkompatibel.
Weit verbreitet in freien Selbstbau-Projekten sind folgende PICs: PIC12F675, PIC12F683, PIC16F84A, PIC16F627A, PIC16F628A, PIC16F876A
Um die Verwendung des teureren PIC16F84 zu vermeiden, kann bereits bestehender Assembler-Code durch eine hinzugefügte Patch-Routine (welche auf dem 16F84 nicht vorhandene analoge Peripherie abschaltet und dann zum Hauptprogramm zurückspringt) und das Verschieben von RAM-Variablen zu dem mit doppelt so viel Speicher ausgestatteten PIC16F628A kompatibel gemacht werden.
Es existieren im Internet zahlreiche Schaltungen für den Selbstbau von einfachen PIC-Programmiergeräten, welche oft aus wenigen Bauteilen bestehen und damit günstig im Selbstbau herzustellen sind. Jedoch funktionieren diese nicht mit jedem PC und jedem PIC immer zuverlässig.
PIC Derivate:

Microchip-PIC gibt es von 6 bis 100 Pins, davon 8 bis 40 Pins neben verschiedenen SMD-Varianten auch in „Dual-In-Line“. Das kleinste Gehäuse ist in SOT-23, alle Gehäuse ab 44 Pin aufwärts sind in TQFP. Für besonders platzkritische Anwendungen gibt es neben den SO und SSOP (beide von 8 bis 28 Pin) auch noch die sogenannten QFN (MLF) Gehäuse von 8 bis 44 Pins. Nicht selbstverständlich ist, dass nahezu alle PICmicro in gleichen Gehäusen auch ein kompatibles „Pinout“ besitzen. Kleine Unterschiede gibt es allerdings beim Umstieg von 8 Bit- auf 16 Bit-Controller. Also passt ein PIC18F4620 z. B. auch auf ein Layout eines PIC16C74 und umgekehrt. Eine darüber hinausgehende Kompatibilität gibt es dabei noch bei den kleinen Controllern, auf einen Sockel bzw. ein Layout für einen 20 Pins passen auch die Varianten in 14 oder 8 Pins, so kann der Entwickler zunächst mit 20 Pins beginnen und bei Bedarf eine kostengünstigere Alternative mit nur 14 oder 8 Pins ohne Layoutänderung einsetzen, wenn ihm die kleinere Anzahl von Pins ausreicht.
Die Speicheraufteilung ist bei allen 8 und 16 Bit-Familien der PICmicros nach der Harvard-Architektur ausgeführt, d. h. Programm- und Datenspeicher werden über getrennte Busse angesprochen.
Die Programmspeicher der PIC sind unterschiedlich organisiert, bei der Baseline-Familie gibt es bis zu vier Seiten (Pages) zu je 512 × 12 Bits d. h. je nach Typ bis maximal 2048 Worte (dies entspricht 3 kB oder auch 2048 mögliche Befehle). Bei der MidRange-Familie gibt es ebenfalls bis zu vier Seiten, diese enthalten aber jeweils 2 K × 14 Bits d. h. je nach Typ bis maximal 8192 Worte (entspricht 14 kB oder auch 8192 mögliche Befehle).
Bei der Enhanced Architektur, auch PIC18 genannt, sowie den 16 Bit-Familien PIC24 und dsPIC gibt es diese Speicheraufteilung in Blöcken oder Seiten nicht mehr, der Programmspeicher ist linear adressierbar. Bei PIC18 liegt die auf dem Chip befindliche Obergrenze bei 128 kB (64 K Befehlsworte à 16 Bit) und kann bei einigen sehr großen Varianten auf extern bis zu 2 MB erweitert werden. Bei den 16 Bit-Familien liegt die Obergrenze derzeit bei circa 256 kB Flash (ca. 86 K Befehlsworte mit jeweils 24 Bit), externer Speicher ist hier zurzeit nicht möglich, aber sowohl größerer Speicher bis 512 kB, als auch extern anschließbarer Speicher sind in Planung.

Der Datenspeicher ist bei den PICs der Baseline-Familie in eine bis acht Bänke zu je 32 Bytes unterteilt. Er enthält alle Spezialregister, genannt SFR (Special Function Register) und Standard-RAM-register, genannt GPR (General Purpose Register); maximal sind hier 134 Byte RAM möglich.
Die MidRange-Familie verwendet das gleiche Prinzip, jedoch bis maximal vier Bänke à 128 Bytes SFR und GPR; hier sind maximal 368 Byte RAM möglich.
Auch die Enhanced-Architektur kennt noch bis zu 16 Bänke à 256 Byte, jedoch kann mit bestimmten Befehlen der Speicher auch linear angesprochen werden; maximal bis circa 3,9 kB RAM. Bei den 16 Bit-Familien ist der Speicher bis maximal 64 kB linear ausbaubar, maximal werden jetzt jedoch nur 30 kB (inklusive 2 kB Dual-Port-RAM für den teilweise vorhandenen DMA-Controller) genutzt, dazu kommt ein 2 kB großer Speicherbereich für die SFR. Ein Bereich von 32 kB kann genutzt werden, um sehr schnelle Lesezugriffe auf den Flash-Speicher zu ermöglichen.
Der Stack kann bei der Baseline- und bei der MidRange-Familie nur von der CPU und auch nur als Speicher für den Befehlszähler verwendet werden. Er nimmt bei Unterprogrammaufrufen oder bei einem Interrupt (gilt nur für MidRange) die Rücksprungadresse einschließlich der Seiteninformation auf und ist nur zwei (Baseline-Familie) oder acht (MidRange-Familie) Elemente tief. Er liegt in besonderen Stackregistern, nicht im RAM. Bei der Enhanced-Familie ist der Stack 32 Elemente tief und kann auch vom Programm mit Ladebefehlen (z. B. PUSH und POP) genutzt werden, er liegt aber ebenfalls in gesonderten Speicherzellen. Erst bei den 16 Bit-Familien liegt der Stack frei im RAM.
Wie schon oben erwähnt, handelt es sich bei PIC um RISC-Prozessoren, sie verfügen also über einen sehr kleinen, aber effektiven Befehlssatz. Ein Befehl bzw. ein Befehlswort im Programmspeicher, dies sind zwischen 12 und 24 Bit (siehe oben), entspricht einem kompletten Befehl inklusive Argumenten, jeder Befehl außer den Befehlen zur Programmverzweigung wird innerhalb eines Zyklus abgearbeitet. Ausnahmen davon gibt es nur bei der Enhanced-Familie mit fünf Befehlen, die aus zwei Wörtern bestehen können und bei den 16-bit-Controllern, die aber auch nur wenige Zweiwort-Befehle haben. Die ALU bei den Achtbit-PIC ist eine Ein-Adress-Maschine. Bei Befehlen, die zwei Argumente benötigen, ist eines immer das W (Work)-Register. Die Enhanced-PIC hingegen beherrschen auch Datentransfer von einer Speicherzelle zu einer anderen Speicherzelle (MOVFF adr1, adr2; adrx=RAM oder SFR, benötigt zwei Worte und zwei Zyklen).
Bei den 16-bit-Controllern gibt es einen Satz von 16 × 16 Bit-Registern, die für die meisten Befehle zur Verfügung stehen, jedoch haben einige Register davon auch Sonderaufgaben, z. B. für den Stack oder für DSP-Befehle.
Im Gegensatz zu vielen anderen Controllern besitzen die 8 Bit-PIC keinen (Baseline), einen (MidRange) oder zwei (Enhanced) Interruptvektoren, der bei Auslösung eines beliebigen Interrupts angesprungen wird. Seine Adresse ist bei den MidRange PIC 0004 h, bei den byteadressierten Enhanced PIC bei 0008 h (dies entspricht der Wort-Adresse 0004 h bei den MidRange PIC) und 0018 h. Nur bei den Enhanced-PIC ist somit eine eingeschränkte Prioritätssteuerung möglich, diese muss sonst durch die Interruptroutine selbst übernommen werden. Bei den 16 Bit-Familien gibt es für nahezu jede Peripherie oder Sonderfunktion eigene, insgesamt bis zu 118 Interruptvektoren, diesen kann einer von 8 verschiedenen Prioritätsleveln frei zugeordnet werden.
Es existiert eine große Vielfalt an verschiedenen Ausführungen von PICs. Diese enthalten viele unterschiedliche interne Peripherieeinheiten. Die gebräuchlichsten sind:
Diese Peripherien werden über SFRs (special function register) angesprochen und können je nach Funktion verschiedene Interrupts auslösen.
Die Optionen für den oder die Oszillatoren sind so vielfältig wie die PICmicros und ihre Produktfamilien selbst. Die ältesten PICmicros hatten im Allgemeinen gar keinen eigenen Oszillator auf dem Chip. Später bekamen die PIC12 als erste einen eigenen 4-MHz-RC-Oszillator auf den Chip. Dann wurden neue Konzepte mit mehr Flexibilität auch für PIC mit mehr Pins hinzugefügt. Heute verfügen die meisten aktuellen PIC und dsPIC über sehr weitreichende onChip-Oszillatoroptionen. Nur auf den besonders kleinen oder preiswerten Typen, PIC10F2xx oder auch PIC18FxxJxx, befindet sich zum Teil nur ein eingeschränkter onChip-Oszillator mit 32 kHz oder 4 MHz. Jedoch haben diese RC-Oszillatoren in der Regel eine eingeschränkte Genauigkeit von nur ca. 1 % bis 5 %. Für genauere Anwendungen, zum Beispiel mit asynchroner Kommunikation (RS232, USB, CAN), ist das nicht ausreichend, und es muss extern ein Quarz oder Oszillator angeschlossen werden.





Um den Mikrocontroller in einer Anwendung einsetzen zu können, muss zuerst vom Entwickler ein Programm entwickelt werden. Die Programmentwicklung kann mittels Assembler oder einer Hochsprache, z. B. C, BASIC oder anderer Compiler geschehen. Für die kleineren Mikrocontroller ist heute noch oft Assembler üblich, um den Code möglichst effizient und klein zu halten, was unter Umständen den Einsatz von kleineren, preiswerteren Mikros ermöglicht. Bei den Mikros mit größerem Speicher bzw. für anspruchsvollere Aufgaben kommt in der Industrie heute zumeist C zum Einsatz, da damit der Programmcode später besser zu pflegen ist.
Kostenlose und freie C-Compiler auf Basis des GNU C Compilers (gcc) werden von Microchip selbst zum Download auf ihrer Homepage angeboten.
Es handelt sich bei zweien um die sogenannten Studentenversionen der drei professionellen und kostenpflichtigen, C30 (für alle PIC24 und dsPIC) sowie C32 (für alle PIC32). Diese Studentenversionen haben gegenüber der professionellen Version lediglich solche Einschränkungen, die für den Heimanwender kaum ins Gewicht fallen. Sie dürfen nicht nur von Studenten, sondern von jeder Person genutzt werden. Die Compiler lassen sich alleinstehend verwenden oder in die kostenlose Entwicklungsumgebung MPLAB integrieren.
Die umfangreichen über den C-Standard hinausgehenden Libraries sind allerdings nur halbfrei, da sie nicht für kommerzielle Zwecke genutzt werden dürfen. Darin unterscheiden sie sich von freier Software.
Der PIC18 Compiler basiert auf einer anderen Codebasis. Bei der kostenlosen Studentenversion ist als Einschränkung gegenüber der Vollversion die vorhandene Codeoptimierung nicht frei konfigurierbar, sondern wird nach dem Defaultschema durchgeführt, das einen Kompromiss zwischen Codegröße und Schnelligkeit darstellt.
Ein weiterer halbfreier Compiler ist der CC5X Compiler, der ebenfalls für nicht kommerzielle Anwendungen frei verwendet werden kann.
Der freie „Small Device C Compiler“ unterstützt Prozessoren der Familien PIC16 und PIC18.
OTP-basierende PICmicro-Mikrocontroller sind nicht ausreichend gegen nicht-invasive und invasive Attacken gesichert, da hier oftmals die Ausleseschutzsicherungen durch gezieltes Bestrahlen bestimmter Bereiche des Chip-Dies mit UV-Licht zurückgesetzt werden können. Jedoch ist dieses Phänomen auch bei einigen OTP-basierten Mikrocontrollern anderer Hersteller anzutreffen. Die PICmicro-Familie ist nicht für Hochsicherheits-Anwendungen wie sichere Smartcards geeignet.
Zum Zurücksetzen der Ausleseschutzsicherungen wird zuerst das Plastik-Gehäuse durch Abschleifen und Zersetzen mittels Säure oberhalb des Halbleiterchips entfernt. Anschließend werden unter einem Mikroskop der Ort der Ausleseschutzsicherungen am Chip lokalisiert und der restliche Teil des Halbleiters mit einem lichtundurchlässigen Material abgedeckt. Danach wird die Ausleseschutzsicherung durch Ultraviolettstrahlung zurückgesetzt.
Beim PIC16C71 konnten nicht-invasiv, und ohne ihn außerhalb der Spezifikationen zu betreiben, durch eine kryptographische Schwachstelle, welche von Dejan Kaljević gefunden wurde, Rückschlüsse auf den Inhalt des Programmspeichers gemacht werden. Bestimmte Befehle müssen allerdings erraten bzw. nach dem Kontext bestimmt werden.
Angriffe auf Flash-basierte Modelle der PICmicro-Reihe können mitunter durch beabsichtigte Schwankungen der Versorgungsspannung, der Programmierspannung und des Taktes und durch invasive Aktionen (Microprobing, FIB-Editieren) durchgeführt werden.
Der EEPROM-basierte PIC16C84 ist durch nicht-invasive Angriffe, wie die Schwankungen der Versorgungsspannung, besonders leicht auszulesen. Es existieren viele Hobby-Programmiergeräte, die das Auslesen von kopiergeschützten PIC16C84 standardmäßig vorsehen. Der Nachfolger, der Flash-basierte PIC16F84(A), hat dieses Problem jedoch behoben.
Der Hersteller Microchip baut bei einigen neueren Modellen und Revisionen Vorkehrungen wie Metall-Schutzschilde oder Metall-Netze ein. Ein Schutzschild verhindert das Zurücksetzen oder Verfälschen von Ausleseschutzsicherungen mittels UV-Licht, während ein Metall-Netz das Microprobing verhindern oder erschweren soll. Allerdings kann ein erfahrener Angreifer das Metall-Netz in der obersten Schicht mittels Laser zerschneiden oder mittels FIB „anbohren“.
Quellen:
Daneben existieren weitere Nachbauten weniger bekannter Halbleiter-Hersteller aus Fernost, welche sich fast immer auf die Baseline-Serie beschränken und nur OTP-EPROM oder Masken-ROM-Speicher aufweisen. Diese Mikrocontroller sind primär für Massenproduktionen ausgelegt.