(→Besonderheiten CPU und Memory) |
K (→Weblinks) |
||
(14 dazwischenliegende Versionen von 7 Benutzern werden nicht angezeigt) | |||
Zeile 8: | Zeile 8: | ||
*PIC16F874 | *PIC16F874 | ||
*PIC16F877 | *PIC16F877 | ||
− | Sie sind in den üblichen Bauformen PDIP, SOIC, PLCC und QFP im Handel und unterscheiden sich in der Ausstattung, haben aber im Wesentlichen die gleichen Eigenschaften. (Es gibt nur ein Datasheet für alle 4). Es können alle Programm-Sourcen, die für den PIC16F84 geschrieben wurden, mit einer einfachen Compilierung sofort lauffähig gemacht werden ( | + | Sie sind in den üblichen Bauformen PDIP, SOIC, PLCC und QFP im Handel und unterscheiden sich in der Ausstattung, haben aber im Wesentlichen die gleichen Eigenschaften. (Es gibt nur ein Datasheet für alle 4). Es können alle Programm-Sourcen, die für den PIC16F84 geschrieben wurden, mit einer einfachen Compilierung sofort lauffähig gemacht werden (es muss natürlich der Prozessortyp geändert werden). |
− | [[Bild:picfeat.jpg]] | + | [[Bild:picfeat.jpg|center|framed|quelle:Microchip]] |
===Peripheral Features=== | ===Peripheral Features=== | ||
Zeile 17: | Zeile 17: | ||
* Timer2: 8-bit timer/counter with 8-bit period register, prescaler and postscaler | * Timer2: 8-bit timer/counter with 8-bit period register, prescaler and postscaler | ||
* Two Capture, Compare, PWM Modules | * Two Capture, Compare, PWM Modules | ||
− | ** Capture | + | ** Capture/Compare is 16-bit, max. resolution is 200 nS |
− | + | ||
** PWM max resolution is 10-bit | ** PWM max resolution is 10-bit | ||
* 10-bit multi-channel Analog-to-Digital converter | * 10-bit multi-channel Analog-to-Digital converter | ||
Zeile 27: | Zeile 26: | ||
===PC16F876=== | ===PC16F876=== | ||
− | [[Bild:876pins.jpg]] | + | [[Bild:876pins.jpg|center|framed|quelle:Microchip]] |
===Pinout PC16F877=== | ===Pinout PC16F877=== | ||
− | [[Bild:877pins.jpg]] | + | [[Bild:877pins.jpg|center|framed|quelle:Microchip]] |
Zeile 126: | Zeile 125: | ||
===Besonderheiten Peripherie=== | ===Besonderheiten Peripherie=== | ||
Bei den Geräten wie ADC, TIMER, PWM, USART, INT0 unterscheiden sich diese PIC kaum von anderen Controllern. Vieleicht ein paar Bemerkungen | Bei den Geräten wie ADC, TIMER, PWM, USART, INT0 unterscheiden sich diese PIC kaum von anderen Controllern. Vieleicht ein paar Bemerkungen | ||
− | ====CPU | + | ====CPU / Clock==== |
Man darf sich von den angegebenen 20 MHZ nicht täuschen lassen. Da diese PIC nicht mit ähnlichen Tricks wir die AVRs arbeiten, brauchen die 4 RISC-Cycles auch wirklich 4 Takte. Daher muß man beim Konzipieren von 5 MHZ ausgegehen. | Man darf sich von den angegebenen 20 MHZ nicht täuschen lassen. Da diese PIC nicht mit ähnlichen Tricks wir die AVRs arbeiten, brauchen die 4 RISC-Cycles auch wirklich 4 Takte. Daher muß man beim Konzipieren von 5 MHZ ausgegehen. | ||
− | [[Bild:pic_qcyc.jpg]] | + | [[Bild:pic_qcyc.jpg|center|framed|quelle:Microchip]] |
+ | |||
====Programmierung==== | ====Programmierung==== | ||
Es gibt zwei Arten | Es gibt zwei Arten | ||
Zeile 146: | Zeile 146: | ||
Es gibt keine getrennten Bereiche für GPR, SFR und SRAM. Alles zusammen befindet sich in der "Register File", die einzelnen Register werden individuell gemappt. Dabei heißt es vorsichtig zu sein, denn dieses Bereich ist in 4 Banks (PIC16F877) unterteilt, und je nach effektiver Zieladresse muss man die Bank-Switch-Bits richtig setzen. Einen geschlossenen Speicherbereich, wie man es vielleicht gewohnt ist, gibt es hier nicht. | Es gibt keine getrennten Bereiche für GPR, SFR und SRAM. Alles zusammen befindet sich in der "Register File", die einzelnen Register werden individuell gemappt. Dabei heißt es vorsichtig zu sein, denn dieses Bereich ist in 4 Banks (PIC16F877) unterteilt, und je nach effektiver Zieladresse muss man die Bank-Switch-Bits richtig setzen. Einen geschlossenen Speicherbereich, wie man es vielleicht gewohnt ist, gibt es hier nicht. | ||
Da es also eigentlich nur Register und keine Memory gibt, entfallen das Load & Store, wie es z.B. bei den AVRs erfordelich ist, Alle Befehle gehen an jeder möglichen Adresse | Da es also eigentlich nur Register und keine Memory gibt, entfallen das Load & Store, wie es z.B. bei den AVRs erfordelich ist, Alle Befehle gehen an jeder möglichen Adresse | ||
− | [[Bild:877regis.jpg]] | + | [[Bild:877regis.jpg|center|framed|quelle:Microchip]] |
====Flash==== | ====Flash==== | ||
Auch hier ist das Bereich in Pages geteilt, die man zur Adressierung ebenfalls umschalten muß. | Auch hier ist das Bereich in Pages geteilt, die man zur Adressierung ebenfalls umschalten muß. | ||
− | [[Bild:877mem.jpg]] | + | |
+ | [[Bild:877mem.jpg|center|framed|quelle:Microchip<br>Auch hier ist das Bereich in Pages geteilt, die man zur Adressierung ebenfalls umschalten muß. ]] | ||
+ | |||
====Stack==== | ====Stack==== | ||
Der Stack + Stackpointer sind isoliert gehalten, es gibt keinen von aussen zugänglichen Stack. Der Stack Pointer ist festgelegt mit maximal 8 Leveln, dann erfolgt ein Wraparound mit schwer beherrschbaren Effekten. | Der Stack + Stackpointer sind isoliert gehalten, es gibt keinen von aussen zugänglichen Stack. Der Stack Pointer ist festgelegt mit maximal 8 Leveln, dann erfolgt ein Wraparound mit schwer beherrschbaren Effekten. | ||
Zeile 157: | Zeile 159: | ||
Der Hersteller hat nur 35 RISC Befehle bereitgestellt (AVR: 96). Es ist nun nicht so, daß der PIC irgendwas von den üblichen Befehlen nicht könnte. Aber im Gegensatz zu den AVRs, wo viele Befehle verschieden heissen, aber das gleiche tun, verfolgt Microchip die Strategie des Minimalismus. Es gibt zum Beispiel keinen eigenen Vergleichsbefehl. | Der Hersteller hat nur 35 RISC Befehle bereitgestellt (AVR: 96). Es ist nun nicht so, daß der PIC irgendwas von den üblichen Befehlen nicht könnte. Aber im Gegensatz zu den AVRs, wo viele Befehle verschieden heissen, aber das gleiche tun, verfolgt Microchip die Strategie des Minimalismus. Es gibt zum Beispiel keinen eigenen Vergleichsbefehl. | ||
Man muß das tun, was bei einem AVR im Grunde auch geschieht: Man subtrahiert, ohne das Ergebnis zu speichern. Übrig bleiben nur die Statusbits. | Man muß das tun, was bei einem AVR im Grunde auch geschieht: Man subtrahiert, ohne das Ergebnis zu speichern. Übrig bleiben nur die Statusbits. | ||
− | [[Bild:877cpu.jpg]] | + | [[Bild:877cpu.jpg|center|framed|quelle:Microchip]] |
====Interrupts==== | ====Interrupts==== | ||
Der PIC hat nur einen Interrupt Vector. Welches von den Geräten tatsächlich ausgelöst hat, muß der User den einzelnen Geräte-Flags entnehmen. | Der PIC hat nur einen Interrupt Vector. Welches von den Geräten tatsächlich ausgelöst hat, muß der User den einzelnen Geräte-Flags entnehmen. | ||
Zeile 164: | Zeile 166: | ||
− | Autor | + | ====Autor/en==== |
+ | * PicNick | ||
+ | |||
[[Kategorie:Microcontroller]] | [[Kategorie:Microcontroller]] | ||
+ | [[Kategorie:PIC]] | ||
+ | |||
+ | ===Weblinks=== | ||
+ | * [https://pic-projekte.de/blog/category/elektrotechnik/mikrocontroller/pic18-tutorial/ Tutorial für PIC(18) Microcontroller] |
Aktuelle Version vom 24. Januar 2017, 20:56 Uhr
Inhaltsverzeichnis
PIC16F87x Einführung
Der bekannteste und noch immer weit verbreitete PIC ist immer noch der PIC16F84. Es gibt, besonders im englischsprachigen Raum, zahllose Anwendungs-Beispiele in vielen Foren und Homepages.
Hier soll eine Gruppe der (grösseren) Nachfolge-Modelle vorgestellt werden, der
- PIC16F873
- PIC16F876
- PIC16F874
- PIC16F877
Sie sind in den üblichen Bauformen PDIP, SOIC, PLCC und QFP im Handel und unterscheiden sich in der Ausstattung, haben aber im Wesentlichen die gleichen Eigenschaften. (Es gibt nur ein Datasheet für alle 4). Es können alle Programm-Sourcen, die für den PIC16F84 geschrieben wurden, mit einer einfachen Compilierung sofort lauffähig gemacht werden (es muss natürlich der Prozessortyp geändert werden).
Peripheral Features
- Timer0: 8-bit timer/counter with 8-bit prescaler
- Timer1: 16-bit timer/counter with prescaler, can be incremented during SLEEP vie external crystal/clock
- Timer2: 8-bit timer/counter with 8-bit period register, prescaler and postscaler
- Two Capture, Compare, PWM Modules
- Capture/Compare is 16-bit, max. resolution is 200 nS
- PWM max resolution is 10-bit
- 10-bit multi-channel Analog-to-Digital converter
- Synchronous Serial Port (SSP) with SPI tm (Master mode) and I2Ctm (Master/Slave)
- Universale Synchronous Asynchronous Receiver Transmitter (USART/SCI) with 9-bit address detection
- Parallel Slave Port (PSP) 8 -bits wide, with external /RD, /WR and /CS controls (40/44-pin only)
- Brown-out detection circuitry for Brown-out Reset (BOR)
PC16F876
Pinout PC16F877
OSC1/CLKIN | Quartz Input oder Input für externe Clock-Source. |
OSC2/CLKOUT | Quartz Output. Im RC-Mode kann hier 1/4 Frequenz von OSC1 entnommen werden. |
/MCLR /Vpp | Reset oder Programmierspannung (+12 V oder +5V). |
RA0 / AN0 | PORTA Bit 0 (TTL) oder Analog Input 0. |
RA1 / AN1 | PORTA Bit 1 (TTL) oder Analog Input 1. |
RA2 / AN2 / Vref- | PORTA Bit 2 (TTL), Analog Input 2 oder Referenzspannung - |
RA3 / AN3 / Vref+ | PORTA Bit 3 (TTL), Analog Input 3 oder Referenzspannung + |
RA4 / T0CKI / Vref- | PORTA Bit 4 (TTL mit ST), oder Clock-In für Timer0 timer/counter. Wenn Output, dann Open drain |
RA5 / /SS / AN4 | PORTA Bit 5 (TTL), Analog Input 4 oder Slave Select für SSP |
RB0 / INT | PORTB Bit 0 (TTL) mit Schmitt-Trigger, wenn INT |
RB1 | PORTB Bit 1 (TTL) |
RB2 | PORTB Bit 2 (TTL) |
RB3 / PGM | PORTB Bit 3 (TTL) Bei Low-Voltage-Programming ist dieser Pin besetzt |
RB4 | PORTB Bit 4 (TTL) Interrupt-on-change möglich |
RB5 | PORTB Bit 5 (TTL) Interrupt-on-change möglich |
RB6 / PGC | PORTB Bit 6 (TTL) Interrupt-on-change möglich. CLOCK beim Programmieren u. Debug |
RB7 / PGD | PORTB Bit 7 (TTL) Interrupt-on-change möglich. DATA beim Programmieren u. Debug |
RC0 / T1OSO/ T1CKI | PORTC Bit 0 (TTL/ST) Timer1 oscillator output oder clock input |
RC1 / T1OSI/ CCP2 | PORTC Bit 1 (TTL/ST) Timer1 oscillator input oder CAP2 input od. COMP2/PWM2 output |
RC2 / CCP1 | PORTC Bit 2 (TTL/ST) CAP1 input od. COMP1/PWM1 output |
RC3 / SCK / SCL | PORTC Bit 3 (TTL/ST) Clock in / Out für SSP oder I2C |
RC4 / SDI / SDA | PORTC Bit 4 (TTL/ST) Data in (SSP) oder DATA für I2C |
RC5 / SDO | PORTC Bit 5 (TTL/ST) Data out (SSP) |
RC6 / TX / CK | PORTC Bit 6 (TTL/ST) USART-Async TX oder USART-Sync Clock |
RC7 / RX / DT | PORTC Bit 7 (TTL/ST) USART-Async RX oder USART-Sync Data |
RD0 - 7 / PSP0 - 7 | PORTD Bit 0 - 7 (TTL/ST) Parallel Slave Port |
RE0 / /RD / AN5 | PORTE Bit 0 (TTL/ST) Parallel Slave Port READ oder analog 5 |
RE1 / /WR / AN6 | PORTE Bit 1 (TTL/ST) Parallel Slave Port WRITE oder analog 6 |
RE2 / /CS / AN7 | PORTE Bit 2 (TTL/ST) Parallel Slave Port SELECT oder analog 7 |
Besonderheiten Peripherie
Bei den Geräten wie ADC, TIMER, PWM, USART, INT0 unterscheiden sich diese PIC kaum von anderen Controllern. Vieleicht ein paar Bemerkungen
CPU / Clock
Man darf sich von den angegebenen 20 MHZ nicht täuschen lassen. Da diese PIC nicht mit ähnlichen Tricks wir die AVRs arbeiten, brauchen die 4 RISC-Cycles auch wirklich 4 Takte. Daher muß man beim Konzipieren von 5 MHZ ausgegehen.
Programmierung
Es gibt zwei Arten
- HVP "High Voltage Programming". Anders als bei den AVRs muß die 12 Volt Programmierspannung extern erzeugt werden
- LVP "Low Voltage Programming". Hier braucht man keine 12 Volt, allerdings geht dann ein Pin verloren (RB3 /PGM).
USART
Diese PIC können die RS232 auch im Synchronmode (fremdgetaktet) betreiben, allerdings nur als Receiver.
I2C / SPI
Hier gibt es nur entweder-oder. Für den I2C-Bus wird die gleiche Hardware benutzt wie für das SPI
PSP / Parallel Slave Port
Sowas gibt's bei den AVRs nicht. Hier kann ein anderer (Slave) Chip 8-Bit parallel in den Controller reinstellen oder abholen
Interrupt on change
Bei den oben bezeichneten Pins kann ein gemeinsamer Interrupt bei jeder Pegel-Änderung ausgelöst werden.
Besonderheiten CPU und Memory
Memory
Es gibt keine getrennten Bereiche für GPR, SFR und SRAM. Alles zusammen befindet sich in der "Register File", die einzelnen Register werden individuell gemappt. Dabei heißt es vorsichtig zu sein, denn dieses Bereich ist in 4 Banks (PIC16F877) unterteilt, und je nach effektiver Zieladresse muss man die Bank-Switch-Bits richtig setzen. Einen geschlossenen Speicherbereich, wie man es vielleicht gewohnt ist, gibt es hier nicht. Da es also eigentlich nur Register und keine Memory gibt, entfallen das Load & Store, wie es z.B. bei den AVRs erfordelich ist, Alle Befehle gehen an jeder möglichen Adresse
Flash
Auch hier ist das Bereich in Pages geteilt, die man zur Adressierung ebenfalls umschalten muß.
Stack
Der Stack + Stackpointer sind isoliert gehalten, es gibt keinen von aussen zugänglichen Stack. Der Stack Pointer ist festgelegt mit maximal 8 Leveln, dann erfolgt ein Wraparound mit schwer beherrschbaren Effekten.
Pointer Register
Es gibt nur EIN Register, mit dem man indirekt adressieren kann, wiederum mit eigenen Bank-Select-Bits.
CPU / Instruction Set
Der Hersteller hat nur 35 RISC Befehle bereitgestellt (AVR: 96). Es ist nun nicht so, daß der PIC irgendwas von den üblichen Befehlen nicht könnte. Aber im Gegensatz zu den AVRs, wo viele Befehle verschieden heissen, aber das gleiche tun, verfolgt Microchip die Strategie des Minimalismus. Es gibt zum Beispiel keinen eigenen Vergleichsbefehl. Man muß das tun, was bei einem AVR im Grunde auch geschieht: Man subtrahiert, ohne das Ergebnis zu speichern. Übrig bleiben nur die Statusbits.
Interrupts
Der PIC hat nur einen Interrupt Vector. Welches von den Geräten tatsächlich ausgelöst hat, muß der User den einzelnen Geräte-Flags entnehmen.
Autor/en
- PicNick