Konfus: Sind das nun 24-Bit-Kern PICs oder 16-Bit-PICs???
Die Vorteile der PICs mit 16-Bit-Datenbreite
Grundlagen der 16-Bit-PICs
Konfus: Sind das nun 24-Bit-Kern PICs oder 16-Bit-PICs???
Na was den nun ? 16 oder 24 Bit ???? Nur nicht durcheinander kommen!!
Diese PIC-Typen bezeichne ich als als 24-Bit-Kern-Flash-Controller mit 16-Bit Datenbreite. Sie werden auch als 16-Bit-Microcontroller bezeichnet, was genauso richtig ist. Nehmen wir die Bezeichnung mal auseinander:
Die 24-Bit beziehen sich also auf die
Befehls-Wortbreite
des Programmspeichers, und die 16-Bit auf die Daten-Wortbreite
des Datenspeichers. Da in einer
Harvard-Architektur
beide Speicher getrennt sind, können sie unterschiedlich
strukturiert
sein.
Eigentlich werden Prozessoren eher nach der Daten-Wortbreite als nach der Befehls-Wortbreite klassifiziert. Über viele Jahre gab es aber nur PICs mit 8 Bit-Datenwort, aber unterschiedlich langen Befehls-Worten. So hat sich die 12-/14-16-Bit-Kern-Unterscheidung bei mir eingeschliffen (Microchip benutzte aber eher die Bezeichnungen Base-Line, Mid-Range, High-End&Enhanced.) . Mit der Einführung der 24-Bit-Kern PICs mit ihren 16-Bit-Datenworten wird es nun kompliziert, aber ich will nicht alles alte über den Haufen werfen.
Die Vorteile der PICs mit 16-Bit-Datenbreite
Anhand der Datenverarbeitungsbreite
kann
man die PIC-Microcontroller in 3 Hauptgruppen unterteilen:
Alle Hauptgruppen haben ihre
Existenzberechtigung.
Der Vorteil der 8-Bit-Typen steht klar und deutlich auf dem
Preisschild.
Was sind aber im Vergleich dazu die Vorteile der 16-Bit-Typen,
und wann
lohnt sich ihr
Einsatz?
Was sind die Features der PICs mit 16-Bit-Datenbreite
Rechnen:
Speicherverwaltung:
Was sind die Nachteile der PICs mit 16-Bit-Datenbreite
Die Datenverarbeitungsbreite wirkt sich an zwei wesentlichen Stellen aus:
Was bedeutet aber nun der 24-Bit-Kern? Im Prinzip nur, dass ein einzelner Befehl im Programmspeicher 24-Bit lang ist. Das scheint erst mal von Nachteil zu sein, da dadurch doppelt so viel Programmspeicher benötigt wird, wie für einen 12-Bit-Kern-PIC.Adressierung
von Arbeitsspeicher (RAM)
Im Arbeitsspeicher (RAM) legt der
Microcontroller
seine Daten ab. Für eine effektive Programmierung ist es
oft
erforderlich,
die Adresse einer RAM-Speicherzelle zu errechnen (z.B. beim
löschen
oder Kopieren ganzer Speicherblöcke).
Ein PIC mit einer 8-Bit-Datenbreite kann natürlich nur 8-Bit große Adressen errechnen. Somit stehen nur die Adressen von B'00000000' = 0 bis B'11111111' = 255 zur Verfügung. Das beschränkt die Zahl der adressierbaren Speicherzellen auf geradeeinmal 256. So ein Controller kann also nur 256 Byte verwalten, was nur für einfache Aufgaben genügt.
Um mehr Speicher verwalten zu können, haben 8-Bit-Controller oft mehrere parallele Speicherbänke. Jede Bank hat bis zu 256-Speicherzellen. Es ist immer nur eine Speicherbank aktiv. Mit speziellen Befehlen wird zwischen den einzelnen Speicher-Bänken umgeschaltet. Das ist sehr umständlich und langsam. Außerdem macht es den Einsatz von Hochsprachen (wie z.B. C) kompliziert. Compiler erzeugen für soche Microcontroller einen großen und langsamen Programmcode.
Ein PIC mit einer 16-Bit-Datenbreite
kann 16-Bit große Adressen errechnen. Das reicht für
die
Adressierung
von 65536 Speicherzellen (64 k). Bei vielen
Controller-Anwendungen ist
deshalb eine Segmentierung (Aufteilung in Speicherbänke)
nicht
mehr
nötig. Man hat einen linearen RAM-Adressraum, der sich
schnell und
effizient verwalten lässt. Das wirkt sich positiv auf die
Schnelligkeit
des Programmcodes aus.
mathematische
Berechnungen
Ein Microcontroller muss auch rechnen
können. Da gilt es z.B. Messwerte mit Sollwerten zu
vergleichen
u.ä.
Solange es sich bei den zu verarbeitenden Zahlen um ganzzahlige
Werte
zwischen
0 und 255 (oder alternativ zwischen -128 und +127)
handelt, ist
eine
8-Bit breite Datenverarbeitung ausreichend. Ist die Zahl aber
größer
als die Datenbreite des PICs (seiner ALU), dann muss die Zahl in
Stücke
zerlegt werden. Ein 8-Bit-PIC speicher eine 16-Bit-Zahl in zwei
jeweils
8-Bit großen Stücken ab. Werden jetzt Berechnungen
mit
diesen
zerstückelten Zahlen nötig, dann wird es etwas
umständlich.
Die einfache Adition zweier 16-Bit-Zahlen mit einem 8-Bit-PIC erfordert
6 Programmschritte. Ein 16-Bit-PIC kann die gleiche
Aufgabe in
einem
Schritt erledigen. Der Geschwindigkeitsvorteil ist klar
ersichtlich.
Natürlich sind auch 16-Bit oft
nicht
ausreichend. So muss eine 32-Bit-Zahl vom 16-Bit-PIC in zwei
Teile
zerlegt verarbeitet werden. Eine 32-Bit Addition benötigt
im
16-Bit
PIC also auch etwa 6 Programmschritte. Der 8-Bit PIC braucht
für
diese
Operation allerdings schon
14
Schritte.
Es wird klar, dass bei mathematischen Berechnungen der
16-Bit-Typ immer
wesentlich schneller arbeiten wird als der 8-Bit-Typ, und das
auch noch
mit einem deutlich kürzeren Programmcode.
Literal-Befehle
Wenn man mit 16-Bit breiten Daten
arbeiten
will, dann muss man auch 16-Bit-Zahlen in die Register schreiben
können.
Der harmlose Befehl
; Register W8 mit dem Wert 65000=0xFDE8 laden MOV #0xFDE8, W8 |
hat es in sich. Er schreibt den
dezimalen
Wert 65000 (oder in Hex 0xFDE8) in das 16-Bit-Register W8. Dazu
muss
der Code dieses Befehls natürlich auch diese 16-Bit lange
Zahl
beinhalten.
Dazu kommt dann noch der Code für den eigentlichen Befehl.
Folglich
muss der Befehl um einige Bit länger als 16-Bit sein.
Bei 24-Bit Befehlsbreite hat man ausreichend Platz.
Programmsprünge
Kaum ein Programm läuft einfach
linear
von Anfang bis Ende. Vielmehr gibt es Programmschleifen und
Verzweigungen.
Bei solchen Sprüngen im Programm, wird der Programmcounter
(PC)
verändert.
Im einfachsten Fall wird er mit einem Bitmuster
überschrieben, das
aus dem Sprungbefehl stammt. Dazu muss der binäre Code des
Befehls
natürlich lang genug sein, damit der binäre Code des
neuen PC
in ihn hinein passt. Deshalb ist der PC (insbesondere in
RISC-Prozessoren) in der Regel kürzer als die
Breite
des Befehlscodes eines Prozessors.
Der Programmcounter (PC) der
PIC24/dsPIC30F/dsPIC33F-Typen
ist 22 Bit lang. Damit können bis zu 4 MByte adressiert
werden.
Ein
Sprungbefehl (CALL oder GOTO) enthält den
eigentlichen
Befehl
und die Zieladresse. Dafür sind selbst bei 24-Bit-breitem
Code
noch
2 Befehls-Worte (2 x 24 Bit) nötig. Wäre der
Befehlscode nur
10-Bit breit, würde ein einziger Sprungbefehl warscheinlich
aus 5
Befehls-Worten bestehen.
Für den Hobbybastler sind die
dsPIC33F-Typen am interessantesten (man muss ja die DSP-Einheit
nicht benutzen), etwas billiger kommt man aber mit den
PIC24F-Typen.
All diese Familien sind
weitestgehend
codekompatibel und pinkompatibel. Die Unterschiede der Familien
sind
in folgender Tabelle grob zusammengefasst:
PIC24Fxxx / PIC24Hxxx-Familie | dsPIC30Fxxx-Familie | dsPIC33Fxxx-Familie | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
preiswerter Mikro Controller (PIC24F) High-Performance Mikro Controller (PIC24H) |
Universal Digital Signal Controller |
preiswerter High-Performance Digital Signal Controller |
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
sehr Leistungsstark (16 / 35 MIPS) | sehr Leistungsstark (30 MIPS) digitale Signalverarbeitung EEPROM |
sehr Leistungsstark (40 MIPS) DMA, Dualport-RAM digitale Signalverarbeitung |
Autor: sprut
erstellt am: 05.02.2006
letzte Änderung: 05.09.2007
Quelle: Microchip