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äßt. Das wirkt sich positiv auf die
Schnelligkeit
des Programmcodes aus.
mathematische
Berechnungen
Ein Microcontroller muß 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 muß 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 muß 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 muß 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
muß
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
muß 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 muß 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 muß ja die DSP-Einheit
nicht benutzen), etwas billiger kommt man aber mit den PIC24F-Typen,
sobald die im Bastlerhandel erhältlich sind.
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