PICs mit 16-Bit-Datenbreite


zurück zu PIC-Prozessoren , Elektronik , Homepage

Konfus: Sind das nun 24-Bit-Kern PICs oder 16-Bit-PICs???

Die Vorteile der PICs mit 16-Bit-Datenbreite


Familien


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.

nach oben

Die Vorteile der PICs mit 16-Bit-Datenbreite

PIC-Typen-Übersicht 
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.
Sicherlich, allerdings lassen sich mit 24 Bit viel komplexere Befehle codieren als mit 12 Bit. Die Notwendigkeit der großen Befehlsbreite erkennt man besonders bei: Innerhalb der 16-Bit-Familie (Datenbreite) gibt es einige Unterfamilien die als "Digital Signal Controllers" (DSP) bezeichnet werden (dsPIC). Das sind Microcontroller, die neben ihrer normalen ALU (arithmetisch-logische Recheneinheit) noch eine zweite Recheneinheit besitzen. Diese DSP (digital signal processing) Einheit ist auf Berechnungen spezialisiert, die bei der digitalen Signalverarbeitung auftreten, wie z.B. Fourier-Analyse (FFT) oder digitale Filter (FIR, IIR). (Wenn einem das anfangs zu mystisch ist, kann man einen dsPIC aber auch wie einen normalen PIC benutzen, und die DSP-Einheit einfach links liegen lassen.)
 
nach oben

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.
 

nach oben

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.
 

nach oben

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.
 

nach oben

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.

nach oben



Es gibt mehrere PIC-Familien  mit 16-Bit Datenbreite:

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
Datenwort 16 Bit
Befehlswort 24 Bit
typische Programmspeichergröße 64k  .. 256k Byte
linear
typische EEPROM-Größe sehr oft nicht vorhanden
typische RAM-Größe 8 .. 16 kByte
Stack-Tiefe Softwarestack
Interrupts priorisiert
Gehäusegrößen 64 .. 100 Pin
max. Taktfrequenz 4 MHz .. 16 / 40 MHz
verschiedene Befehle <84
Hardwaremultiplikation ja 16x16
DSP-Einheit nein
Betriebsspannung 3,25 V (2,0/3,0 .. 3,6 V)
typische Vertreter: PIC24Fx
PIC24Fxx
PIC24HJ256GP610
Datenwort 16 Bit
Befehlswort 24 Bit
typische Programmspeichergröße 12k  .. 144k Byte
linear
typische EEPROM-Größe 0 .. 4096 Byte
typische RAM-Größe 512 .. 8193 Byte
Stack-Tiefe Softwarestack
Interrupts priorisiert
Gehäusegrößen 18 .. 80 Pin
max. Taktfrequenz 4 MHz .. 40 MHz
verschiedene Befehle ~84
Hardwaremultiplikation ja 16x16
DSP-Einheit ja
Betriebsspannung 5 V (2,5 .. 5,5 V)
typische Vertreter: dsPIC30F3012
dsPIC30F4013
dsPIC30F6014
Datenwort 16 Bit
Befehlswort 24 Bit
typische Programmspeichergröße 64k  .. 256k Byte
linear
typische EEPROM-Größe keiner
typische RAM-Größe 8 .. 32 kByte
Stack-Tiefe Softwarestack
Interrupts priorisiert
Gehäusegrößen 64 .. 100 Pin
max. Taktfrequenz 4 MHz .. 40 MHz
verschiedene Befehle ~84
Hardwaremultiplikation ja 16x16
DSP-Einheit ja
Betriebsspannung 3,25 V (3,0 .. 3,6 V)
typische Vertreter: dsPIC33Fx
dsPIC33Fxx
dsPIC33Fxxx
sehr Leistungsstark (16 / 35 MIPS) sehr Leistungsstark (30 MIPS)
digitale Signalverarbeitung
EEPROM
sehr Leistungsstark (40 MIPS)
DMA, Dualport-RAM
digitale Signalverarbeitung

nach oben

zurück zu PIC-Prozessoren , Elektronik , Homepage

Autor: sprut
erstellt am: 05.02.2006
letzte Änderung: 05.09.2007

Quelle: Microchip