Aus RN-Wissen.de
Wechseln zu: Navigation, Suche
Laderegler Test Tueftler Seite

K (Interrupts)
Zeile 167: Zeile 167:
  
  
Autor: PicNick
+
====Autor/en====
 +
* PicNick
 +
 
  
 
[[Kategorie:Microcontroller]]
 
[[Kategorie:Microcontroller]]
 
[[Kategorie:PIC]]
 
[[Kategorie:PIC]]

Version vom 28. März 2007, 08:35 Uhr

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).

quelle:Microchip

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 is 16-bit, max. resolution is 12.5 nS
    • 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

quelle:Microchip

Pinout PC16F877

quelle:Microchip


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.

quelle:Microchip

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

quelle:Microchip

Flash

Auch hier ist das Bereich in Pages geteilt, die man zur Adressierung ebenfalls umschalten muß.

quelle:Microchip
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.

quelle:Microchip

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

LiFePO4 Speicher Test