High-End-Family
&
Enhanced-Family
/ 8 Bit Datenbreite
(PIC18Fxxx)
Nach den 14-Bit-Kern Controllern der Serien PIC16Fxxx und PIC12Fxxx gibt es inzwischen auch 16-Bit-Kern-Controller der Serien PIC18Fxxx mit Flash-Programmspeicher. Was ist der Unterschied zwischen 16F und 18F??
Mit den 18F-Typen versucht Microchip
Controller
anzubieten, die deutlich leistungsstärker sind als die
16F-Typen,
den vertrauten 'kleinen' Typen aber noch ähneln. Die PIC18F sind
nicht
die Ablösung für die PIC16F, sondern die Chips der Wahl, wenn
man umfangreiche Berechnungen nicht mehr mit einem PIC16F in den
Griff
bekommt.
PIC18F-Typen sind für die Programmierung in der Sprache
C geeignet, wodurch Sie es gerade dem Assemblerunkundigen
einfacher
machen, PIC-Projekte zu erstellen.
Es gibt verschiedene
PIC18F-Unterfamilien.
Unterfamilie |
PIC18Fxxxx (premium-Typen) |
PIC18FxxK20 PIC18FxxK22/50 PIC18LFxxK22/50 |
PIC18FxxJxx (low-cost-Typen) |
PIC18FxxJ6x (low-cost-PIC18F97J60-Familie) |
Betriebsspannung
normal |
5V |
3,6V |
3,25V |
3,25V |
Betriebsspannung
maximaler
Bereich (L-Ausführung, bzw. separate Core-Speisung) |
(2V)
4,2V..5,5V |
(1,8V)
2.7V
..
3,6V (1,8V) 2.7V .. 5,5V (1,8V) 2.7V .. 3,6V |
(2V)
2.7V
..
3,6V |
(2V) 2.7V .. 3,6V |
Takt |
max.
40
MHz |
max
64
MHz |
max.
41
MHz..
48
MHz |
max. 41 MHz.. 48 MHz |
MIPS |
10 |
16 |
10..12 |
10..12 |
Flash
[kByte] |
4
.. 128 |
8
.. 64 |
4 .. 128 | 64 .. 128 |
Flash-Schreibzyklen |
100.000 |
10.000 |
1.000
..
10.000 |
100 |
Flash-Speicherzeit |
40
Jahre |
40
Jahre |
20
Jahre |
20 Jahre |
EEPROM |
ja |
ja |
- |
- |
EEPROM-Emulation
im
Flash |
- |
- |
Ja |
Ja |
Was sind die Features der PIC18Fxxx ?
Die kleinere
PIC-Familien (PIC10/PIC12/PIC16) werden vorzugsweise in Assembler programmiert. Ihre
kleinen und zerklüftet organisierten Speicher erfordern in der
Regel den Einsatz optimierten Assemblercodes. In Zeiten von
Fotohandys,
Flatscreen-TVs und YouTube ist Assembler aber nicht mehr besonders
sexy. Heutzutage programmiert jeder lieber in Hochsprachen. Das
hat
auch seinen guten Grund. In einer Hochsprache wie z.B.
C lassen sich Programme viel schneller und fehlerfreier
erstellen
als in Assembler. Die PIC18-Typen eignen sich gut für eine
Programmierung in C. Sie haben deutlich größere, linear
adressierbare Speicher, und sind schneller als die kleinere PICs.
Damit kompensieren Sie die typischen Nachteile einer Hochsprache:
höheren Speicherbedarf und langsameren Programmlauf.
Multiplikation
Eine wesentliche Schwäche der PIC16F
ist das Fehlen einer Hardwaremultiplikation. Die PIC18F
besitzen
eine 8X8-Bit Multiplikation mit 16-Bit Ergebnis. Das
beschleunigt viele
Berechnungen enorm.
Bedingte Sprünge
Es gibt ganz normale bedingte
Sprungbefehle.
Mit denen kann man zwar nur einige 100 Byte im Programm vor und
zurück
springen, aber für die meisten Schleifen reicht das allemal.
Für
weite Sprünge gibt es ja noch die alte Kombination BTFSx &
GOTO.
16-Bit Befehlsbreite
Neben den Multiplikationsbefehlen
kamen
auch einige andere Befehle hinzu. Die nunmehr 77 Befehle (früher
unter
40) lassen sich nicht mehr mit 14-Bit-Worten codieren. Deshalb
haben im
PIC18F alle Befehle nunmehr 16-Bit Breite. Die 16 Bit beziehen
sich nur
auf den Programmspeicher. Die gesamte Datenverarbeitung ist wie
im
PIC16F
nur 8 Bit breit. Die 16-Bit Befehlsbreite sind also kein Vorteil
für
den Anwender, sondern ein technisches Erfordernis, das nach
außen
keine wesentlichen Auswirkungen hat.
lineare Adressierung
Die op-codes der direkten
Sprungbefehle
wie CALL und GOTO sind nun 32 Bit lang (2 Worte), und enthalten
eine
20-Bit
lange Sprungadresse. Dadurch kann man innerhalb des
Programmspeicher
herumspringen, ohne dass man sich mit Bank-Umschaltungen
herumschlagen muss, wie man sie vom PIC16F... kennt.
Takt
Die PIC18F können mit 40 MHz externem
Takt doppelt so schnell getaktet werden wie die PIC16F. Das
beschleunigt
den Prozessor.
Durch eine interne PLL-Schaltung kann
der externe Takt vervierfacht werden, so dass ein 10-MHz-Quarz
oder
Schwinger
für den PIC 40 MHz bereitstellt.
Viele neue Typen haben aber nanoWatt-Technologie,
sie können den Takt im Betrieb verändern.
Interrupt
Interrupts können unterschiedliche
Prioritäten haben. Damit ist es möglich, dass ein wichtigerer
Interrupt einen unwichtigeren Interrupt unterbricht. Das
verbessert das
Echtzeitverhalten.
Quelltextkompatibilität zum
PIC16F
?
Der Befehlssatz der PIC18F enthält
alle Befehle des PIC16F - und eine Reihe neuer Befehle.
Allerdings
werden
die bekannten Befehle im PIC18F anders codiert. Ein für den
PIC16F
übersetztes Programm (HEX-File) läuft also nicht auf dem
PIC18F.
Ganz anders sieht das aus, wenn man
den
Quelltext eines für den PIC16F geschriebenen Programms hat. Wird
dies
nun für den PIC18F compiliert/assembliert, dann läuft das so
entstandene HEX-File prinzipiell auf dem PIC18F. (Änderungen im
Quelltext
sind wegen anderen Taktes oder anderer Hardware sowieso kaum
gänzlich
vermeidbar.) Damit ist ein Umstieg vom PIC16F auf den PIC18F
unkompliziert.
FLASH
Die handelsüblichen PIC18F besitzen
riesige Flash-Programmspeicher von bis zu 32 kByte (einige Typen
sogar
bis zu 128 kByte). Dank neuer Table-Read/Write-Befehle lassen
diese
sich
auch gut nutzen. Bei großen, linear adressierbaren
Programmspeichern
sind nun auch Hochsprachencompiler relativ problemlos
einsetzbar, was
die
Softwareentwicklung erheblich vereinfacht.
Was sind die Nachteile der PIC18Fxxx ?
Der Preis! Microchip bietet z.Z. in der PIC18Fxxx-Familie nur recht große und komplett ausgestattete Chips (28/40/44-Pin) an. Der preiswerteste Typ kostetet als Einzelstück bei Reichelt ca. 7 €. Noch fehlen kleine, billige PICs mit 8 oder 18 Pins, diese wurden von Microchip aber schon angekündigt.
Aus der Typenbezeichnung lassen sich
recht
gut die Features eines PIC18Fxxx(x) ableiten. Die nachfolgende
Tabelle
ist kein Dogma, sondern eine grobe Orientierung. Einen Blick in
das
Datenblatt
ersetzt sie nicht. PIC18F-Typen mit dreistelligen
Zahlenschlüssel
sind eigentlich schon wieder veraltet, und werden durch
Nachfolgetypen
mit vierstelligen Zahlenschlüssel ersetzt. Der Nachfolger des
PIC18F242 ist z.B. der PIC18F2420.
Ziffer im Typencode | Bedeutung | ||||||||||||||||||||||||||||||||||||
1. Ziffer: Gehäusegröße |
|
||||||||||||||||||||||||||||||||||||
2. Ziffer: Speicherausbau |
|
||||||||||||||||||||||||||||||||||||
3. Ziffer |
|
||||||||||||||||||||||||||||||||||||
4. Ziffer (wenn vorhanden) |
|
Nachfolgen die detailliertere Auflistung einiger interessanter Typen. (Eine vollständige Liste aller mir bekannter 16-Bit-Kern-Typen findet man hier.)
Für den Bastler sind Typen am
Beginn
der folgenden Tabelle interessant, die bei Conrad und bei Reichelt
erhältlich sind.
Reichelt bietet meiner Erfahrung nach
die
kleineren
Preise und die kürzere Lieferzeit.
Microchip startet offensichtlich eine Typen-Offensive im Bereich der PIC18F-Controller, so dass meine Liste nicht alle Typen auflisten kann, sondern nur die, für mich besonders interessanten, für die ich Programmiersoftware schreiben will oder schon geschrieben habe, und die schon bzw. hoffentlich bald für Bastler erhältlich sind.
Die PIC18F-Familie besteht inzwischen aus 3 Generationen:
PIC18F-Typen mit
dreistelligen
Zahlenschlüssel sind eigentlich schon wieder veraltet, und
werden
durch
Nachfolgetypen mit vierstelligen Zahlenschlüssel ersetzt. Der
Nachfolger des PIC18F242 ist z.B. der PIC18F2420.
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C) |
ECCP |
|
|
Conrad |
Reichelt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C) |
ECCP |
|
|
Conrad |
Reichelt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C) |
ECCP |
|
|
Conrad |
Reichelt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C |
ECCP |
|
|
Conrad |
Reichelt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Programm-Speicher:
Ist als Größe des
Programmspeichers
in Byte dargestellt, wobei k für den Faktor 1024 steht. So
bedeutet
also "16k", dass ein PIC 16384 Byte Programmspeicher hat. Da
Alle
Befehle jeweils 16-Bit (also 2 Byte) groß sind, lassen sich in
diesem
Speicher dann 8192 Befehle speichern.
Alle oben aufgelisteten PICs können
in ihre Programmspeicher selbst hinein schreiben.
Pins:
Die Anzahl der Pins am Gehäuse.
Daran erkennt man die physische Größe des Schaltkreises.
Die Pin-Zahl bezieht sich auf
DIL-Gehäuse
(PDIP). Beim Einsatz von SSOP, QFT oder PLCC-Gehäusen haben die
PICs
2 bzw. 4 zusätzliche Pins. Werden z.B. 40-polige PICs in
PLCC-Gehäuse
verpackt, dann haben sie 44 Pins.
I/O-Pins:
Die maximale Anzahl der Pins, die als
Bestandteil eines Ports (PORTA..PORTE) als Ein- oder
Ausgangsleitung
dienen
können. Dabei kann es vorkommen, dass eines der Pins sich nur
als
Eingang betreiben lässt.
ADC:
Eingänge für den
Analog/Digital-Wandler.
Ein PIC hat immer nur einen ADC, es können aber mehrere
Eingänge
wechselweise zum ADC zugeschaltet werden. Die ADCs haben
normalerweise
eine Auflösung von 10 Bit.
CAN-Bus
Controller Area Network: ein
schneller
Bus zum Datenaustausch zwischen Schaltkreisen. Dieser Bus wird
vor
allem
in der KFZ-Technik eingesetzt, da er sehr störfest ist.
USB-Bus
ein schneller, serieller Bus, der
wohl
jedem aus der PC-Technik bekannt ist.
Während die PIC16C-Serie nur USB1.1
(low-speed 1,5 Mb/s) unterstützte gibt es beim PIC18Fxxxx nur
USB2.0
mit full-speed (12 Mb/s) (also nicht mit high-speed).
Ethernet
Einige PICs haben die nötige Hardware für einen
10/100-MBit-Ethernet-Anschluss integriert. Es handelt sich dabei
ausschließlich um 3.3V-Typen mit mindestens 60 Pins, wie z.B.
den
PIC18F66J60.
USART:
(oder auch SCI)
Serielle Schnittstelle, die sich z.B.
als RS232 verwenden lässt.
SSP: (oder auch MSSP)
Synchrone serielle Schnittstelle, die
sich als SPI wie auch als I2C verwenden lässt.
Die MSSP-Schnittstelle unterstützt
Slave- und Master-Funktionen, während die SSP-Hardware nur
Slave-Funktionen
unterstützt.
I2C:
I2C-Bus Anschluss. Dieser
Anschluss
ist Bestandteile der SSP (synchroner serieller Port), aber nicht
alle
SSPs
unterstützen auch I2C. Deshalb ist diese Eigenschaft hier extra
aufgelistet.
CCP:
Anzahl der Capture/Compare/PWM-Module.
Mit
diesen
Modulen
lassen
sich
Impulse
Messen
und
Erzeugen.
Außerdem
können
pulsweitenmodulierte
Signale ausgegeben werden.
ECCP:
Ein erweitertes CCP-Modul, das
mehrere
PWM-Ausgänge bereitstellt, mit denen sich u.A. auch
Schrittmotoransteuerungen
realisieren lassen.
PWM:
Ein Ausgang für ein Rechtecksignal
mit einstellbarem Tastverhältnis. Ein CCP-Modul
kann ein PWM-Signal erzeugen. Ein ECCP-Modul kann maximal 4
PWM-Signale
erzeugen.
Timer:
Anzahl der Timer. Die PICs besitzen
in
der Regel einen 8-Bit Timer und mehrere 16-Bit-Timer. Der Watchdogtimer
ist in dieser Zahl noch nicht enthalten.
Der 8-bittige Timer0 lässt sich
bei den PIC18X-Typen auf 16 Bit umschalten.
Preis
Die Conrad-Preise sind aufgerundete
Einzelpreise
für die teuersten Varianten der Schaltkreise und wenn möglich
mit DIL-Gehäuse. Bei der Wahl
einfacherer
Gehäuse, niedrigerer Taktfrequenz oder größerer
Stückzahlen
(ab 3 Stk.) sind die Preise z.T. deutlich niedriger. Bei der
Abnahme
von
100 Stk. sinkt der Preis fast auf die Hälfte, aber das nützt
einem Hobby-Bastler nichts.
Die PICs sind in aller Regel bei
Reichelt
billiger als bei Conrad.
Alle Conrad-Preise beziehen sich auf
den
Stand Mitte 2006.
Alle Reichelt-Preise beziehen sich
auf
den Stand Dezember 2009.
Vpp
Das ist die nötige Programmierspannung
für den jeweiligen PIC in Volt. Die 16-Bit-PICs sind
erfahrungsgemäß
recht nörglerisch, wenn es um die Höhe der
Programmierspannung
geht. Auch wenn die offiziellen Toleranzen deutlich größer
sind,
sollte man doch von der Nominalspannung nicht um mehr als 0,25V
abweichen.
Ansonsten gibt es vor allem beim Löschen und beim Entfernen von
codeprotection
Probleme.