PIC

Aus Modellbau-Wiki
Wechseln zu: Navigation, Suche
UniversalEditButton.png Dieser Artikel ist im Prinzip zur eine (möglicherweise veraltete) Kopie des wikipedia-Artikels und – zumindest hinsichtlich der speziellen Einsatzmöglichkeiten im Modellbau – ist noch sehr unvollständig oder besteht nur aus Platzhaltern oder Stichworten. Bitte hilf mit, diesen Artikel zu verbessern und durch Wissenswertes zu erweitern. Dazu kannst Du den Artikel gerne bearbeiten.


Bei PICmicro handelt es sich um eine Mikrocontrollerfamilie, die von der Firma Microchip Technology Inc. hergestellt wird.

Abgeleitet wurde sie von dem PIC1650, der ursprünglich von der Mikroelektronik-Abteilung bei General Instruments (GI) entwickelt wurde. Die Bezeichnung PIC wird von Microchip nicht mehr als Abkürzung verwendet, beim PIC1650 stand es für Peripheral Interface Controller. Die Originalausführung des PIC war als externe Erweiterung der 16-Bit-CPU CP1600 (ebenfalls von GI) gedacht, um die eher mäßige I/O-Performance dieser zu verbessern. Als Befehlsformat kam ein simpler Mikrocode zum Einsatz, der in einem ROM abgelegt war.

1985 verkaufte GI die Mikroelektronikabteilung, und die neuen Besitzer beendeten beinahe alle Produktlinien. Der PIC hingegen wurde mit einem EPROM ausgestattet, um einen Mikrocontroller daraus zu machen. Durch diverse Erweiterungen und Variationen, die interne Peripherie, Bauteilform und Geschwindigkeit betreffend, entstand eine sehr große Produktfamilie, die passende Mikrocontroller für viele unterschiedliche Anwendungsbereiche bereit stellt.

Inhaltsverzeichnis

Grundsätzliches

PICs sind größtenteils 8-Bit-RISC-Mikrocontroller, die ursprünglich mit Fokus auf einen kleinen Befehlssatz und einfache Handhabung entwickelt wurden. Der Befehlssatz umfasst etwa 35 (bei den Basistypen) bis 70 (bei den erweiterten) Befehle. Durch die große Vielfalt an verschiedenen Typen lässt sich für praktisch jede Anwendung ein passender PIC finden. Die Chips sind so ausgelegt, dass sie je nach Bedarf mit sehr wenig Beschaltung auskommen (es ist auch ein interner Oszillator verfügbar).

Extrembeispiel: Der 6-Pin PIC10F200

Die PICmicro Controller teilen sich in 5 Unterfamilien:

  • PIC12CXXX – Base line – die 8-Pin-Familie
  • PIC16C5X – Base line
  • PIC16CXXX – Mid range – 14Bit-Befehlssatz. Diese Controller gehören zur mittleren Leistungsklasse.
  • PIC17CXXX – Die High-Performance-Familie
  • PIC18CXXX – High Performance Enhanced Architecture (16-bit mit Hardware-Multiplizierer)
  • PIC24CXXX - Neu erscheinende 16-Bit Controller

Die drei Leisungsklassen sind:

  • Base line: Standardfeatures, 33 Befehle, 12 Bit Befehlsbreite, 5MIPS
  • Mid range: Standardfeatures, Interrupt Support, 35 Befehle, 14 Bit Befehlsbreite, 5MIPS
  • High performance: Lineare Speicheradressierung, 79 Befehle, 8x8 Hardware-Multiplizierer, 16 Bit Befehlsbreite, 10MIPS

Je nach Ausführung des Programmspeichers werden drei Typen unterschieden:

  • OTP-Typ (One Time Programmable; Kennbuchstabe C)
  • JW- Typ (UV-löschbares EPROM; mit Fenster)
  • Flash-Typ (EEPROM- Programmspeicher; Kennbuchstabe F)

Weiters stellt die Firma Microchip mittlerweile auch 16Bit-Signalprozessoren nach dem PIC-Vorbild her, diese tragen die Bezeichnung „dsPIC“. Die am weitesten verbreitete Leistungsklasse ist mid range, daher wird in diesem Dokument auch auf diese eingegangen.

Speicheraufteilung

Die Speicheraufteilung ist nach der Harvard-Architektur ausgeführt, d.h. Programm- und Datenspeicher werden über einen getrennten Bus angesprochen. Dies ist alleine schon durch die unterschiedliche Wortbreite (Programm 14Bit, Daten 8Bit) nötig.

Der Programmspeicher ist in Pages (Seiten) organisiert, jede Page enthält 2Kx14Bits. Die Umschaltung der Pages geschieht durch die Änderung des 4. und 5. Bits im Special Function Register PCLATH.

Der Datenspeicher ist in 4 Bänke zu je 128 Bytes unterteilt. Er enthält alle GPRs und SFRs. Die Bankumschaltung erfolgt durch die Bits RP0 und RP1 im STATUS Register.

Der Stapelspeicher kann nur von der CPU und auch nur als Speicher für den Befehlszähler verwendet werden. Er ist 13 Bit breit (11 Bit um die 2048 Adressen pro Seite anzusprechen plus 2 Bit zur Seitenumschaltung) und bei Mid-range PICs 8 Stufen tief. Nach 8 Unterprogramm- /Interruptaufrufen wird wieder die erste Stufe des Stacks beschrieben, was zum Verlust der ersten Rücksprungadresse führt.

Interruptbehandlung

Im Gegensatz zu vielen anderen Controllern besitzen PICs nur einen Interruptvektor, der bei Auslösung eines beliebigen Interrupts angesprungen wird. Seine Adresse ist 0004h. Durch die Hardware erfolgt keine Prioritätssteuerung, diese muss durch die Interruptroutine selbst übernommen werden. Jeder Interrupt kommuniziert mit der Software über zwei Bits, von denen eines verwendet wird, um den Interrupt zu aktivieren (z.B. T0IE für Timer 0 – Interrupt Enable). Das andere Bit wird von der Hardware auf 1 gesetzt, wenn der Interrupt ausgelöst wurde (z.B. T0IF – Interrupt Flag). Es muss rückgesetzt werden, bevor der Rücksprung aus der Interruptroutine erfolgt. Die Bits für die Standard-Interrupts liegen im Register INTCON. Die Aktivierungsbits für erweiterte Interrupts liegen SFR PIE (Peripheral Interrupt Enable), die Flag-Bits in PIR. Weitere wichtige Bits sind GIE (Global Interrupt Enable) und PEIE (Peripheral Interrupt Enable), wobei ersteres wenn rückgesetzt alle Interrupts blockiert und letzteres nur die erweiterten.

Wird ein Interrupt ausgelöst, dann wird zunächst GIE rückgesetzt, damit kein zweiter Interrupt die Interruptroutine unterbricht. Danach springt das Programm auf den Interruptvektor. Nun kann die Software durch abfragen der einzelnen Flag-Bits herausfinden, welcher Interrupt ausgelöst wurde (wobei z.B. durch die Abfolge der Abfrage eine Prioritätssteuerung realisiert werden kann) und entsprechend reagieren. Durch den Rücksprungbefehl RETFIE wird GIE wieder gesetzt. Ist nun noch ein Flag gesetzt, dann wird der Interruptvektor wieder angesprungen.

Befehlssatz

Wie schon oben erwähnt handelt es sich bei PICs um RISC-Prozessoren, sie verfügen also über einen sehr kleinen, aber effektiven Befehlssatz. Ein Word (=12-16Bit, siehe oben) im Programmspeicher entspricht einem kompletten Befehl inklusive Argumenten, jeder Befehl außer Sprungbefehle wird innerhalb eines Zyklus abgearbeitet. Die ALU(Arithmetic Logical Unit) ist eine Ein-Adress-Maschine. Bei Befehlen, die zwei Argumente benötigen, ist eines immer das W (Work)-Register. Letzteres kann als Pendant zum Akkumulator von Intel-Prozessoren gesehen werden.

Das Befehlsformat lässt sich nach den Argumenten in drei Gruppen einteilen.

Befehle für Byte-orientierte Register

Es handelt sich hier um Befehle, die Werte des Datenspeichers ver- oder bearbeiten. Sie erhalten als Argumente eine 7-Bit-Zahl f, die die Adresse des Registers angibt, und ein Bit d, das angibt, wo das Resultat der Operation hingespeichert werden soll. d=0 bedeutet hier, das Ergebnis soll in das W-Register gespeichert werden, bei d=1 wird das Ergebnis in das durch f adressierte Register geschrieben. Beispiele:

  • ADDWF f,d (Addition von f und W)
  • SUBWF f,d (Subtraktion W von f)
  • ANDWF f,d (logisches UND)
  • IORWF f,d (logisches ODER)
  • MOVF f,d (Move-Befehl kopiert f entweder auf W oder auf sich selbst)
  • MOVWF f (kopiert den Inhalt von W auf f)

Der Sinn von MOVF f,1 besteht darin, dass MOVF das Zero-Bit setzt. Siehe später.

Befehle für Bit-orientierte Register

Diese Befehle sprechen gezielt einzelne Bits an. Sie sind auf den gesamten Datenspeicher anwendbar. Als Argumente werden die 7-Bit-Adresse des Registers f im Datenspeicher und die Stelle des Bits b (3 Bit) in diesem.

  • BCF f,b (Bit Clear File ... Bit löschen)
  • BSF f,b (Bit Set File ... Bit setzen)
  • BTFSC f,b (Bit Test File and Skip if Clear)
  • BTFSS f,b (Bit Test File and Skip if Set)

Bei den letzten beiden Befehlen handelt es sich um die hauptsächlich verwendeten Verzweigungsbefehle. Skip bedeutet, dass wenn die Bedingung erfüllt ist, der nächste Befehl übersprungen werden soll. Die anderen Verzweigungsbefehle des PIC sind DECFSZ (decrement file and skip if zero) und INCFSZ (increment file and skip if zero). Beide sind für Zählschleifen gedacht.

Befehle für literale Werte

Diese Befehle sind durch ein L im Namen gekennzeichnet. Sie benötigen als Argument nur den konstanten Wert, der zweite Operand ist das W-Register. Beispiele:

  • ADDLW k (Addition einer Konstanten zu W)
  • SUBLW k (Subtraktion von W von einer Konstanten)
  • ANDLW k (UND-Verknüpfung einer Konstanten mit W)
  • MOVLW k (eine Konstante ins W Register schreiben)
  • XORLW k (EXOR-Verknüpfung von W mit einer Konstanten)
  • RETLW k (RETurn with literal in W)

Kontrollbefehle

Hier noch ein paar Befehle, die den Programmfluss koordinieren bzw. andere Features der CPU bedienen.

  • CALL k
  • GOTO k

Dies sind der Unterprogrammaufruf bzw. der Jump-Befehl. Die übergebene Konstante ist die 11-Bit Zieladresse in der Page.

  • RETFIE
  • RETURN
  • RETLW k

Hierbei handelt es sich um die Rückkehrbefehle für Interrupt und Unterprogramme.

  • SLEEP ... Schaltet den Prozessor in den Schlafmodus. Hierbei wird der Stromverbrauch auf ein Minimum reduziert. Er wird durch einen Interrupt wieder erweckt.
  • CLRWDT ... Setzt den Watchdog-Timer zurück.

Interne Peripherie

Es existiert eine große Mannigfaltigkeit von verschiedenen Ausführungen von PICs. Diese enthalten viele unterschiedliche interne Peripherieeinheiten. Folgend die gebräuchlichsten:

  • Timer
  • Analog-digital-Umsetzer
  • Analogkomparatoren
  • CapCom-Units
  • Kommunikationsschnittstellen (seriell, z.B. RS232, Universal Serial Bus, I²C, ...)
  • Watchdog-Timer
  • LCD-Treiber

Diese werden über SFRs angesprochen und lösen je nach Funktion Interrupts aus.

Der Oszillator

Bei Mid-range PICs können 8 verschiedene Oszillatormodi eingestellt werdern. Die Auswahl geschieht bei der Programmierung. Ein besonderer Modus ist der interne Oszillator der mit Hilfe eines eingebauten RC-Glieds auf 4 MHz läuft.

Programmierung

Um den Microcontroller in einer Anwendung einsetzen zu können, muss dieser zuerst vom Entwickler programmiert werden. Dies bedeutet, dass Informationen auf dem internen EPROM oder Flash-Speicher des Bausteins gespeichert werden. Hierzu bieten die meisten PIC-Microcontroller eine sogenannte ICSP-Schnittstelle, die auch noch zur Übertragung des Maschinencode benutzt werden kann, wenn der Chip bereits in die Schaltung eingebaut wurde. Dieser Vorgang kann etwa mit dem ICD von Microchip durchgeführt werden, mit dem sich außerdem der Programmablauf debuggen lässt.

Weblinks

Kommerzielle C Compiler

Weitere Informationen und Selbstbau-Brenner für die Flash-Serie


Dieser Artikel basiert auf dem Artikel PICmicro aus der freien Enzyklopädie Wikipedia, teilweise können Textpassagen übernommen worden sein. In der Wikipedia ist eine Liste der Autoren verfügbar.
Bitte fügt detaillierte Infos zu den Vorbildern entsprechend in der Wikipedia hinzu, so dass wir uns hier auf die Modellbauaspekte konzentrieren können.