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.
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 |
| Programmiergerät |
Brenner8/Brenner5 |
(Brenner9N
in
Vorbereitung) |
Brenner9 |
Brenner9 |
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 gur für eine
Programmierung in C. Sie haben deutlich größere, linear
addressierbare 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 muß, 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
Interrups 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 addressierbaren
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 koststet 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.
Meine Brennsoftware PBrenner unterstützt die 18F-Typen nicht, dafür habe ich aber die Brennersoftware P18 geschrieben, die viele der unten aufgelisteten Typen auf Tait-kompatiblen Brennern mit 28/40-poligen IC-Fassungen (Brenner5, Brenner3) brennen kann.
Wärend sich die 18Fxxx mit 13V programmieren lassen, gibt es bei den 18Fxxxx da Probleme. Für diese moderneren Typen muß die Programmierspannung auf 12V verringert werden.
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 |
unterstützt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C) |
ECCP |
|
|
Conrad |
Reichelt |
unterstützt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C) |
ECCP |
|
|
Conrad |
Reichelt |
unterstützt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Speicher [Byte] |
[byte] |
[byte] |
(PDIP) |
Pins |
Inputs |
|
Bus |
|
(RS232) |
(I2C |
ECCP |
|
|
Conrad |
Reichelt |
unterstützt |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Programm-Speicher:
Ist als Größe des
Programmspeichers
in Byte dargestellt, wobei k für den Faktor 1024 steht. So
bedeutet
also "16k", daß 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.
Darann 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äßt.
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ärend 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).
USART:
(oder auch SCI)
Serielle Schnittstelle, die sich z.B.
als RS232 verwenden läßt.
SSP: (oder auch MSSP)
Synchrone serielle Schnittstelle, die
sich als SPI wie auch als I2C verwenden läßt.
Die MSSP-Schnittstelle unterstützt
Slave- und Master-Funktionen, wärend die SSP-Hardware nor
Slave-Funktionen
unterstützt.
I2C:
I2C-Bus Anschluß. Dieser
Anschluß
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äßt 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 göß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.
von P18
unterstützt
hier steht, ob die Brennsoftware P18
den PIC-Typ brennen kann.
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.