# PICmicro

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

## Geschichte

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 Peripheral 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.

## Grundsätzliches

PIC sind 8, 16 oder 32 Bit RISC-Mikrocontroller, die ursprünglich mit Fokus auf einen kleinen Befehlssatz und einfache Handhabung entwickelt wurden. Der Befehlssatz umfasst etwa 33 (bei der Baseline-Familie) bis über 70 Befehle (bei der Enhanced-Familie). Durch die große Vielfalt an verschiedenen Typen lässt sich für praktisch jede Anwendung ein passender PIC finden. Die Mikrocontroller sind so ausgelegt, dass sie je nach Bedarf mit sehr wenig Beschaltung auskommen (bei vielen PIC ist auch ein interner RC-Oszillator verfügbar).
Neu ist die Familie der PIC32, hier hat Microchip auf einen Controllerkern der Firma MIPS Technologies zurückgegriffen. Bei der aktuellen Produktvorstellung und Bekanntmachung im November 2007 stehen bereits erste Muster, Hardwareentwicklungstools, C-Compiler und umfangreiche Literatur zur Verfügung. Auch können die bekannten Entwicklungstools ICD2, Real-ICE und MPLAB-IDE ab der Versionsnummer 8.0 weiterhin genutzt werden, da diese auch die neue Produktfamilie unterstützen. PICmicros stehen in mehreren Gehäusevarianten zur Verfügung, die sich nur durch die Anzahl ihrer Pins unterscheiden: Hier steht „PIC10…“ für 6 Pins, „PIC12…“ für 8 und „PIC16…“ für 14 bis 64 Pins.
Folgende Familien (genauer: Leistungsklassen) werden angeboten:
* Baseline: 8 Bit PICmicro mit 12 Bit Befehlsbreite, nur wenige Features (Timer und bei den neuesten Produkten auch Komparatoren oder AD-Wandler), kein Interrupt-Support, 33 Befehle, maximal 5 MIPS. Die Familie umfasst die Produkte mit den Bezeichnungen PIC10F2xx, PIC12F(C)5xx und PIC16F(C)5x in Gehäusen von 6 bis 40 Pins.
* MidRange: 8 Bit PICmicro mit 14 Bit Befehlsbreite, Standardfeatures (z. T. auch mit LCD-Controller oder LowSpeed-USB), Interrupt-Support, 35 Befehle, maximal 5 MIPS. Zu dieser Familie gehören die PIC12F(C)6xx und PIC16F(C)xxx sowie der PIC14000 mit 8 bis 64 Pins.
* High Performance: 8 Bit PICmicro mit 16 Bit Befehlsbreite, Standardfeatures, maximal circa 8 MIPS. Diese Familie beinhaltet die Produkte mit der Bezeichnung PIC17Cxxx mit 40 bis 84 Pins, sie sollte für neue Designs nicht mehr verwendet werden und wird daher in den folgenden Abschnitten nicht mehr näher beschrieben.
* High Performance Enhanced: 8 Bit PICmicro mit 16 Bit Befehlsbreite, lineare Befehls- und Daten-Speicheradressierung, 79 (oder bei den aktuellen Produkten dieser Familie auch mehr) Befehle, viel leistungsfähige Peripherie, z. B. CAN, USB, Ethernet, spezielle Motor-Steuerungseinheiten usw. Weiterhin einen 8x8-Bit-Hardware-Multiplizierer, das Rechenwerk eines Signalcontrollers, 16 Bit Befehlsbreite. Typisch sind maximal 10 MIPS Rechenleistung, jedoch sind neue Produkte mit bis zu 16 MIPS für 2007 angekündigt. Die Befehle der Programmiersprache C (z. B. Schleifenbefehle) können zum Teil von der Hardware viel effektiver ausgeführt werden. Produkte der Enhanced-Familie sind die PIC18F(C)xxx, mit 18 bis 100 Pins.
* 16 bit Mikrocontroller, PIC24 und dsPIC
    Alle vier nachfolgenden Familien besitzen den gleichen CPU-Core, d. h. sie können mit Hilfe der gleichen Tools, wie C-Compiler oder -Debugger, bearbeitet werden.
   * PIC24F: 16 Bit PICmicro, Standardfeatures, 24 Bit Befehlsbreite, maximal 16 MIPS, 2,0 bis 3,6 Volt. Zurzeit (2007) beinhaltet die Familie Produkte von 16 kB bis 128 kB Flash in Gehäusen von 28 bis 100 Pins. Neue Varianten mit bis zu 256 kB Flash und teilweise auch mit integriertem USB-OTG (On the Go) sind jetzt ebenfalls verfügbar.
   * PIC24H: 16 Bit PICmicro, erweiterte Features, 24 Bit Befehlsbreite, maximal 40 MIPS, nur 3,3 Volt. Diese Produktfamilie ist weitestgehend identisch zur dsPIC33-Familie, sie ist zu dieser nur um die DSP-Features reduziert. Zurzeit (2007) beinhaltet die Familie Produkte von 16 kB bis 256 kB Flash in Gehäusen von 20 bis 100 Pins.
   * dsPIC30: 16 Bit Signalcontroller, 24 Bit Befehlsbreite, maximal 30 MIPS, 2,5 (3) - 5,5 Volt Betriebsspannung
       Drei Unterfamilien:
      * Sensor- und Standardfamilie, zum Teil mit AC97/I²S Interface, CAN usw. 12 kB bis 144 kB Flash, 20 bis 80 Pins.
      * Motion-Controlfamilie, mit Interface für Quadratur Encoder, spezieller Motor Control PWM, CAN usw. 12 kB bis 144 kB Flash, 28 bis 80 Pins.
      * SMPS-Familie, speziell für Schaltnetzteile, USV, Frequenzumrichter und teilweise auch für Motion Control (z. B. Servomotoren), mit sehr schneller PWM, schnellen Komparatoren und AD-Wandlern. 6 kB bis 12 kB Flash, 28 bis 44 Pins.
   * dsPIC33: 16 Bit Signalcontroller, 24 Bit Befehlsbreite, maximal 40 MIPS, 3 - 3,6 Volt Betriebsspannung
       Zwei Unterfamilien:
      * Standardfamilie, zum Teil mit AC97/I²S Interface, CAN usw. 16 bis 256 kB Flash, 20 bis 100 Pins, weitere mit bis zu 144 Pin und bis zu 512 kB Flash sind geplant.
      * Motion-Controlfamilie, mit Interface für Quadratur-Encoder, spezieller Motor Control PWM, CAN usw. 16 kB bis 256 kB Flash, 20 bis 100 Pins, hier sind ebenfalls weitere mit bis zu 144 Pin und bis zu 512 kB Flash geplant.
* PIC32: 32 Bit PICmicro mit MIPS M4K CPU Kern. Typisch sind maximal 80 MIPS Rechenleistung. Einige PIC32 unterstützen DMA-Datentransfer. Produkte der PIC32-Familie sind die PIC32MX, mit 32 bis 512 kB Flash, 8 kB bis 128 kB RAM und 64 bis 100 Pins. Es existieren mittlerweile weitere Produkte mit USB On-the-go und Ethernet mit ansonsten vergleichbaren Eigenschaften in dieser Familie. Diese Produktfamilie lässt sich mit dem aktuell vertriebenen pickit4 programmieren und debuggen, welches einen sehr kostengünstigen Einstieg ermöglicht.

## Hobby und Privatverwendung

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.
* 8 Pin: PIC12F615, es ist kein 8 Pin PIC18Fxx verfügbar und Programmentwicklungen für solch kleine Produkte sind für gewöhnlich in Assembler. Ebenfalls verfügbar sind die Typen PIC12F675 und PIC12F683.
* 14 Pin: PIC16F684 (mit Pulsweitenmodulation) oder der PIC16F688 (mehr Speicher und UART). In diesem Gehäuse sind ebenfalls keine PIC18Fxx Produkte verfügbar.
* 18 Pin bzw. Ersatz für den oben genannten PIC16F84: PIC16F628A, PIC16F819, PIC16F88 oder der aus der Enhanced-Familie stammende PIC18F1320.
* 20 Pin: PIC16F690. Für Designs, bei denen ein PIC18Fxx eingesetzt werden soll, bieten sich 18 oder 28 Pin Mikrocontroller der PIC-Familie an.
* 28 oder 40 Pin: PIC16F886 oder alternativ aus der Enhanced-Familie die PIC18F2620 (Standardtyp, mit 64 kByte Flash-Speicher), PIC18F2680 (Standardtyp mit CAN, ebenfalls mit 64 kByte Flash-Speicher) oder auch PIC18F2550 (Standardtyp mit USB, allerdings nur mit 32 kByte Flash-Speicher). Die Produktbezeichnungen der 40 Pin-Gehäuse sind (in gleicher Reihenfolge) PIC16F887, PIC18F4620, PIC18F4680 oder PIC18F4550.
    Speziell für 28 oder 40 Pin kann auch z. B. ein 16 Bit dsPIC30F4012 (28 Pin) oder dsPIC30F4011 (40 Pin) verwendet werden. Eine Pinkompatibilität zu den 8bit-PIC ist hier aber nicht mehr gegeben. Ebenfalls möglich ist der PIC16F876A.
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.

### Einfache Programmiergeräte

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 Development Programmer für Windows und Linux. Freeware Programmer Software für eine Vielzahl von PICs wie 10F, 12F, 16F, 18F und dsPIC30F. Unterstützt verschiedene Programmer Hardware wie z. B. JDM, Tait, AN589, …
* „JDM“ Programmer für den RS232 Port
* „David Tait“ Programmer für den LPT-Port
* „sprut Brenner“ für den LPT-Port und USB-Port, mit neuentwickelter und stabiler Hardware und Software, welche fast alle aktuellen Flash-basierten PIC Typen unterstützt. Platinenlayouts, Tipps und Handbücher sind ebenfalls verfügbar.
* „ICD2 Clones“, MPLAB-kompatible Nachbauten des Microchip ICD2 In-Circuit Debuggers, welche viele aktuelle Flash-basierte PICs in der Zielschaltung programmieren und debuggen können

## Kommerzielle Verwendung

* Prozessor-Chipkarten vom Typ Gold- und Silvercard
* Alarmanlagen und Zutrittskontrollsysteme von Security Products
* Leistungsmessgeräte von Linyang
* Management von (elektrischer) Energie in Autos von BMW
* Beleuchtungssysteme von Insta Elektro GmbH aus Lüdenscheid
* Modchips für die Playstation, PS2 und Nintendo Wii
PIC Derivate:
* bestimmte BASIC-Stamp-Varianten
* PICAXE
* OOPic

## Gehäuse

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.

## Speicheraufteilung

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.
    Je nach Ausführung des Programmspeichers werden verschiedene Typen unterschieden:
   * Flash-Typ (EEPROM-Programmspeicher, Kennbuchstabe F)
       Dies sind die mittlerweile am häufigsten eingesetzten Bausteine, sie sind in der Schaltung lösch- und wiederbeschreibbar. Das umständliche Entnehmen aus der Schaltung und Einsetzen in ein Programmiergerät kann somit entfallen. So können also auch fest eingelötete Bausteine programmiert werden.
       Ebenso lassen sich die meisten dieser Bausteine ohne Entnahme aus der Schaltung debuggen. Das heißt, dass das im Controller laufende Programm an jeder Stelle unterbrochen oder im Einzelschrittmodus laufen kann. Dabei kann jedes interne Register und der interne Speicher auf einem angeschlossenen PC-Bildschirm beobachtet werden. Dazu werden fünf Pins des PIC über eine zusätzliche Elektronik (über die der PIC auch programmiert werden kann) und dann über USB oder RS232 mit dem PC verbunden. Diese fünf Pins sind zunächst die positive und die negative Spannung sowie der Reset-Eingang des Controllers. Dazu kommen noch zwei Funktionspins (PGC und PGD), die als alternative Funktion auf einem Portpin verfügbar sind. Das funktioniert bei größeren Controllern ab dem PIC16F818/819 (18 Pins). Jeder einzelne dieser Controller kann so debugged werden, wie er ist. Für kleinere Controller gibt es spezielle Testadapter, bei denen diese Pins zusätzlich vorhanden sind.
   * OTP-Typ (One Time Programmable; Kennbuchstabe C ohne Suffix /JW)
       Diese können nur einmal programmiert werden und eignen sich nur für Massenproduktionen, wo es auf geringe Kosten ankommt.
   * EPROM-Typ (UV-löschbar durch Quarzglas-Fenster; Kennbuchstabe C mit Suffix /JW)
       Die JW Typen stellen das teure Entwicklungswerkzeug für die OTP-Typen dar. Sie sind wie EPROMs nur durch UV Bestrahlung zu löschen. Mit dem Erscheinen von Flash-PICs, die exakt kompatibel zu OTP/EPROM-Typen sind, kann auf EPROM-Typen in der Entwicklungsphase verzichtet werden und beispielsweise der Code für einen 12C508A auf einem 12F508 statt einem 12C508A/JW entwickelt werden.
   * ROM-Typ (Maskenversion; Kennbuchstaben R)
       Die ROM-Typen stellen die preiswerteste Klasse der PICmicros, sie werden nur für sehr hochvolumige Anwendungen eingesetzt, da die Controller direkt in der Fabrik bei der Herstellung durch Eindiffundierung des Programms in den Chip ‚programmiert‘ werden. Ein späteres Ändern oder Löschen ist für bereits gefertigte Produkte nicht mehr möglich.
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.

## Befehlsstruktur

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.

## Interruptbehandlung

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.

## Interne Peripherie

Es existiert eine große Vielfalt an verschiedenen Ausführungen von PICs. Diese enthalten viele unterschiedliche interne Peripherieeinheiten. Die gebräuchlichsten sind:
* Timer – teilweise sind bei den PIC24 und dsPIC auch je zwei 16-Bit-Timer als 32-Bit-Timer zu verwenden
* A/D-Wandler, je nach Variante sind 8, 10 oder 12 Bit möglich. Bei den PIC24H und dsPIC33 sind teilweise zwei unabhängig voneinander arbeitende A/D-Wandler vorhanden, diese können vom Anwender in verschiedenen Betriebsmodi mit schnellen 10 Bit oder genaueren 12 Bit programmiert und verwendet werden. Die schnellsten A/D-Wandler finden sich derzeit bei den dsPIC30 der SMPS-Unterfamilie mit bis zu ca. 2 MSPS (Millionen A/D-Wandlungen pro Sekunde)
* Analogkomparatoren, bei vielen PIC sind ein oder zwei Komparatoren vorhanden, sie können auch als „Fensterkomparator“ zusammengeschaltet werden. Die schnellsten Komparatoren sind bei der SMPS-Unterfamilie dsPIC30 zu finden. Sie haben eine Schaltzeit von ca. 20 ns
* Capture/Compare-Einheiten dienen zum Zeitmessen oder zum zeitgesteuerten Erzeugen von digitalen Signalen
* PWM ist bei vielen PIC vorhanden, neuere Modelle verfügen zumeist über sogenannte „Enhanced-PWM“ mit der Möglichkeit, zwischen dem quasi zeitgleichen Umschalten eine sogenannte Totzeit einzusteuern, dies wird vor allem bei elektrischen Motor- und Spannungsregelungen benötigt. Die schnellsten PWMs finden sich derzeit bei den dsPIC30 der SMPS-Unterfamilie mit einer Bit-Zykluszeit von nur ca. 1,1 ns, dies entspricht einer Frequenz von ca. 960 MHz, damit ist z. B. eine PWM mit 10 Bit Auflösung bei ca. 950 kHz möglich
* Standard-Kommunikationsschnittstellen (seriell, z. B. RS232, SPI, I²C, …) sind auf den meisten Controllern vorhanden. Neue Controller haben zumeist eine sogenannte „EnhancedUART“, diese Bezeichnung bedeutet, dass die Hardware auch das LIN-Protokoll voll unterstützt
* USB, bei den Enhanced Micros der Unterfamilien PIC18Fxx[J]5x gibt es verschiedene Produkte mit einem USB-Function (Slave) für maximal 12 MBit/s, FullSpeed-USB. Verfügbar sind bei der PIC24F-Familie auch neue Produkte mit einem USB-OTG on Chip, die Bezeichnungen sollen PIC24FJxxxGB1xx lauten. In der Familie der PIC32 sollen ebenfalls bis zum Sommer 2008 neue Produkte mit USB OTG kommen.
* CAN, sowohl bei den Enhanced Micros der Unterfamilien PIC18Fxx8x, wie auch bei den PIC24 und dsPIC gibt es eine große Zahl an verschiedenen Controllern mit Unterstützung für CAN 2.0B
* Watchdog-Timer, ist bei allen Mikrocontrollern vorhanden, meistens auch mit einem eigenen, niederfrequenten Oszillator auf dem Chip, z. B. 32 kHz oder 512 kHz
* LCD-Treiber sind nur bei den MidRange und Enhanced 8 Bit Micros zu finden, Produkte sind alle PIC16F9xx und PIC18Fxx[J]9x. Sie können kleine, einfarbige Displays mit bis zu 48 Elementen oder im Multiplexverfahren bis 196 Elemente ansteuern
* Ethernet-Controller sind ein neues Feature bei der Enhanced-Reihe in der Unterfamilie PIC18FxxJ6x und beinhalten sowohl den MAC als auch den PHY für 10BASE-T (IEEE 802.3i). Microchip bietet für diese Controller einen kostenlosen Ethernet-Stack in Form einer Applikation note an
Diese Peripherien werden über SFRs (special function register) angesprochen und können je nach Funktion verschiedene Interrupts auslösen.

## Oszillator

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.
* Verschiedene onChip-Oszillator-Optionen
* Oszillatoroptionen bei aktuellen PIC16F-Versionen
* Oszillatoroptionen bei aktuellen PIC18F-Versionen
* Oszillatoroptionen bei aktuellen dsPIC30F-Versionen

## Programmentwicklung

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.
* Programmierung in Assembler
    Alle PIC können mit dem passenden Assembler in der kostenlosen Software MPLAB von Microchip programmiert werden. Diese MPLAB-Software stellt neben dem Assembler auch einen Simulator zum Testen des Codes und die Schnittstellen zu den verschiedenen Entwicklungswerkzeugen zur Verfügung.
* Programmierung in C
    Von Microchip sind als sogenannte Students-Edition (LITE) ebenfalls kostenlose C-Compiler für die Enhanced (PIC18)-Familie, für die 16 Bit-Familien (PIC24 und dsPIC) und für die neue PIC32-Familie erhältlich. Weitere C-Compiler gibt es von verschiedenen Anbietern, siehe Weblinks.
* Fehlersuche – Debugging
    Zum Debuggen kann man auf den kostenlosen Simulator in MPLAB zurückgreifen oder mittels einer zusätzlichen Hardware, Debugger oder Emulator, direkt in der Schaltung den Programmfluss überwachen und bei Fehlern korrigieren.
* Debugger
    Neben anderen Anbietern bietet Microchip selbst eine Palette von Debugtools an. Am weitesten verbreitet ist dabei das ICD2, aber auch das viel günstigere PICkit2 kann diese Aufgabe jetzt bei einigen wenigen PIC leisten. Das seit kurzem lieferbare, wesentlich leistungsfähigere und auch teurere Real-ICE kann zurzeit nur die 16 und 32 Bit-Produkte und einige Produkte der PIC18-Familie debuggen, dies soll aber mittel- bis langfristig auch auf die anderen Produktfamilien ausgedehnt werden. Alle drei hier genannten Produkte können auch zum Programmieren (Brennen) der PIC verwendet werden. Im Internet existieren zahlreiche Schaltungen zum Selbstbau eines ICD2-Nachbaus, welcher MPLAB kompatibel ist. Diese Nachbauten werden von Microchip trotz der Verwendung von urheberrechtlich geschütztem Programmcode geduldet
* Emulator
    Auch Emulatoren gibt es sowohl von anderen Herstellern als auch von Microchip selbst. Zurzeit gibt es ein ICE2000, für die PIC10 bis PIC18, sowie ein ICE4000 für die PIC18 und dsPIC30. Die aktuellen LowVoltage-Versionen PIC18FxxJxx, PIC18FxxKxx, PIC24, dsPIC33 und auch der neue PIC32 werden von keinem dieser Emulatoren unterstützt, hier muss zur Fehlersuche auf einen der obigen Debugger zurückgegriffen werden. Die Emulatoren können ein fertiges Programm nicht programmieren (brennen).
* Programmierung
    Dieser Vorgang wird auch als Brennen bezeichnet. Das bedeutet, dass Informationen (z. B. ein kompiliertes Programm, auch Firmware genannt) auf dem internen EPROM oder Flash-Speicher des Bausteins gespeichert werden. Hierzu bieten die meisten PIC-Mikrocontroller eine sogenannte ICSP-Schnittstelle, die auch noch zur Übertragung des Maschinencode benutzt werden kann, wenn der Chip bereits in die Schaltung eingebaut wurde. Dieser Vorgang kann dann mit einem Programmiergerät durchgeführt werden. Daneben gibt es für die meisten 16 und 32 Bit Controllerfamilien auch die Möglichkeit über die integrierte JTAG-Schnittstelle zu programmieren.

### Kostenloser Compiler

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.

## Sicherheit und Kopierschutz

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:

## PIC-kompatible Mikrocontroller und Nachbauten

* Ubicom, ehemals Scenix, stellte die SX-Serie her. Diese funktionsähnlichen Mikrocontroller waren viel schneller als die PIC-Baseline-Architektur. Ab 2005 wurden die Mikrocontroller der SX-Serie exklusiv von Parallax verkauft, daher hatten die neueren Serien ein Parallax-Herstellerlogo. Da Ubicom keine oder zu wenig Ressourcen für die Herstellung der SX-Serie hatte, lieferte Ubicom an Parallax die fertig verarbeiteten und gesägten Silizium-Wafer, während Parallax die Dies in Gehäuse montieren ließ und exklusiv vertrieb. Da jedoch 2009 Ubicom die Produktion der Dies einstellte, gibt es nur noch jene „Lifetime Buy“ Lagerbestände, die Parallax von Ubicom aufgekauft hatte. Neue SX-Controller werden nicht mehr hergestellt, und es existiert auch kein funktionsgleicher Ersatz.
* Holtek, ein taiwanischer Halbleiter-Hersteller, bietet zu der PIC-Architektur sehr ähnliche, jedoch nicht vollständig kompatible Mikrocontroller an.
* G-Alantic Enterprises, ein taiwanischer Hersteller, stellt neben PC-Gehäusen auch Mikrocontroller der MTD-Serie her, welche als PIC-kompatibel beschrieben werden.
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.