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