19,99 €
16-Bit-PICs sind die perfekte Lösung, wenn Sie einfache Handhabung und eine große Anwendungsbreite bei Controllern suchen. Die Klasse der 16-Bit-PICs besitzt eine große Fülle von Typen, welche sich in ihrer Ausstattung und auch in einigen Punkten der Funktionalität unterscheiden. Der Schwerpunkt des Buches besteht darin, die gemeinsamen Eigenschaften verständlich zu machen. Alle Typen der 16-Bit-Klasse besitzen im Wesentlichen die gleiche Architektur, die gleiche Organisation der Speicher und vor allem die gleiche Sprache bis auf die DSP-Befehle, welche nur den dsPIC-Typen vorbehalten sind. Die dsPIC-Typen unterscheiden sich in ihren grundlegenden Eigenschaften nicht von den übrigen 16-Bit-Typen. Sie sind in ihrer Ausstattung auf schnelles Messen und auf schnelle Verarbeitung der Messergebnisse eingerichtet. Die DSP-Einheit ist nahtlos in die übrige Struktur eingebettet. Bei den Peripheriemodulen, die zunehmend an Bedeutung gewinnen, gibt es Varianten, auf die besonders hingewiesen wird. Das Grundprinzip beim Umgang mit den Peripheriemodulen ist aber immer ähnlich. Für die Beispiele werden vier typische Vertreter der verschiedenen Varianten verwendet: PIC24FJ128GA010 PIC24FJ256GB110 PIC24EP512GU810 dsPIC33FJ256GP710 Der praktische Umgang mit den Peripheriemodulen steht im Vordergrund der Beispiele. Hierbei sind oft feine Details zu beachten. Insbesondere die Verwendung der zugehörigen Interrupts erfordert einige Sorgfalt. Dieses Buch ist zur Anwendung der 16-Bit-PICs und dsPICs geschrieben. Es setzt aber grundlegende Kenntnisse über die Funktion von Mikrocontrollern voraus.
Das E-Book können Sie in Legimi-Apps oder einer beliebigen App lesen, die das folgende Format unterstützen:
Inhaltsverzeichnis
1Die 16-Bit-PIC-Klasse
1.1Oszillatoren
1.1.1Auswahl des Systemtakts
1.1.2Umschalten des Systemtakts
1.1.3Fail Save Clock Monitor (FSCM)
1.2Datenspeicher
1.2.1Organisation des Datenspeichers
1.2.2Besondere Datenregister
1.3Programmspeicher
1.3.1Adressierung des Programmspeichers
1.3.2Aufteilung des Programmspeichers
1.3.3Lesen des Programmspeichers
1.3.4Löschen und Schreiben des Programmspeichers
1.4Power Management
1.4.1Taktfrequenz verringern
1.4.2Peripheriemodule abschalten
1.4.3Sleep-Modus
1.4.4IDLE-Modus
1.4.5DOZE-Modus
2PIC24-Assemblersprache
2.1Funktion der Befehle
2.2Überblick über die Befehle
2.3Form der Befehle
2.4Argumente
2.4.1Konstante Argumente
2.4.2Direkte Adressierung eines Fileregisters
2.4.3Direkte Adressierung eines W-Registers
2.4.4Doppelregister
2.4.5Indirekte Adressierung
2.4.6Befehle mit mehreren Argumenten
2.4.7Befehle mit direktem Fileregister
2.5Verzweigungsbefehle
2.5.1Argumente der Verzweigungsbefehle
2.5.2CALL und RCALL
2.5.3Bedingungsloser BRA-Befehl
2.5.4Bedingte BRA-Befehle
2.6Transferbefehle
2.6.1MOV-Befehle
2.6.2Austauschbefehle
2.6.3PUSH und POP
2.6.4TBLRD- und TBLWT-Befehle
2.7Arithmetische und logische Befehle mit einem Operanden
2.8Find-First-Befehle
2.9Arithmetische und logische Befehle mit zwei Operanden
2.10Befehle mit Bitargumenten
2.11REPEAT-Befehl
2.12Multiplikation
2.13Division
3DSP-Einheit (nur dsPIC)
3.1DO-Befehl
3.2Akkumulatoren ACCA und ACCB
3.3Sättigung der Akkumulatoren
3.4Überläufe
3.5DSP-Zahlenformate
3.6X- und Y-Datenbereiche
3.7DSP-Befehle mit Prefetch
3.7.1Prefetch-Operanden
3.7.2Prefetch-Sonderfall für euklidische Abstände
3.7.3Beschreibung der DSP-Befehle mit Prefetch
3.7.4Modulo-Adressierung
3.8DSP-Befehle ohne Prefetch (Akkumulatorbefehle)
3.9DSP-Anwendung
4Assemblercode und C
4.1Assemblercode in MPLAB C30/XC16 Files
4.1.1Built-in-Funktionen
4.1.2Erstellen von eigenen Assemblerunterprogrammen
4.1.3Inline-Assemblerzeilen im C30/XC16-Compiler
4.2Der C30/XC16-Compiler und sein ASM-Code
4.2.1Compileroptimierungen
4.2.2Beobachten des erzeugten Assemblercodes
4.2.3Erstes kleines Beispiel
4.2.4Datentransfer
4.2.5Multiplikation: 16 Bit • 16 Bit mit 32-Bit-Ergebnis
4.2.6Division: 16 Bit / 16 Bit
4.2.7Division: 32 Bit / 16 Bit
4.2.8Anwendungsbeispiel GPS-Positionsdaten
5Umgang mit den Peripheriemodulen
5.1Ausschalten und Abschalten der Peripheriemodule
5.2Initialisierung von Peripheriemodulen
5.3Programmtechnische Verfahrensweisen in C
6Interrupts
6.1Interrupt-Status-Flags
6.2Zulassen von Unterbrechungen
6.3Ablauf von Unterbrechungen
6.4Schachteln von Interrupts
6.5Interrupt-Prioritäten
6.6CPU-Priorität
6.7Interrupt-Vektoren
6.8Alternative Interrupt-Vektoren
6.9Traps
6.10Register des Interrupt-Systems
6.10.1INTCON1-Register
6.10.2INTCON2-Register
6.10.3IFS- und IEC-Register
6.10.4Prioritätsregister
6.11Initialisieren der Interrupts
6.12Schreiben der Interrupt-Routine
6.13Ablauf von Interrupt-Routinen
7DMA
7.1DMA-Speicher
7.2DMA-Transfer
7.3Adressierungsarten
7.4Register des DMA-Controllers
7.4.1DMAxCON-Register
7.4.2DMAxREQ-Register
7.4.3DMAxPAD-Register
7.4.4DMAxSTA- und DMAxSTB-Register
7.4.5DMAxCNT-Register
8I/O-Ports
8.1Funktionen der Portpins
8.2Eingänge und Ausgänge
8.3Register der I/O-Ports
8.3.1Zustandsregister PORTx und Latch-Register LATx
8.3.2Richtungsregister TRISx
8.3.3Open-drain-Register ODCx
8.3.4AD1PCFG- und ANSx-Register
8.4Interrupts durch Flanken an Portpins
8.5Nutzung der Portpins durch Peripheriemodule
8.6Peripheral Pin Select
8.7Zuordnungsprozedere für Ausgangsfunktionen
8.8Zuordnungsprozedere für Eingangspins
9Timermodule
9.1Register der Timermodule
9.1.1TxCON-Register
9.2Zählweise
9.2.1Beispiel TMRint010: Beobachtung von Timer-Interrupt und Timerreset
9.3Vorteiler
9.4Timertypen
9.4.1Typ A
9.4.2Typ B
9.4.3Typ C
9.5Funktion als Zähler
9.6Gated Timer
9.6.1Beispiel T2GATE010: Demonstration des Gated-Timer-Modus
9.7Lesen und Schreiben der Timerregister
9.832-Bit-Timerpaar
9.9Schreiben und Lesen von 32-Bit-Timern
10Watchdog Timer
10.1Einschalten des Watchdogs
10.2Überlaufperiode
10.3Rücksetzen des Watchdog Timers
10.4Watchdog-Fenster
11AD-Wandler
11.1Register der einfachen 10-Bit-AD-Wandler
11.1.1ADxCON1-Register
11.1.2ADxCON2-Register
11.1.3ADxCON3-Register
11.1.4AD1CHS-Register
11.1.5AD1CSSL-Register
11.2Konfiguration des AD-Wandlers
11.2.1Konfiguration der Pins als analoge Eingänge
11.2.2Festlegen der Referenzspannung
11.2.3Festlegen des Wandlungstakts TAD
11.2.4Festlegen der Abtastzeit
11.3Einzelne Messungen
11.3.1Beispiel ADsingle010: Einzelmessungen mit wechselnden Kanälen
11.4Automatische Messfolgen
11.4.1Starten der Wandlung
11.4.2Ergebnisbuffer
11.4.3Beispiel ADint010: Wiederholte Messung eines Kanals
11.512-Bit-AD-Wandler mit mehreren parallelen 10-Bit-Kanälen
11.5.1ADxCON1-Register
11.5.2ADxCON2-Register
11.6Beispiel ADdma710: wiederholte Messung eines Kanals
12Analoge Komparatoren
12.1Komparatorereignis
12.2Register der analogen Komparatoren
12.2.1CMCON-Register für Dual-Comparator-Module
12.2.2CMSTAT-Register für Triple-Comparator-Module
12.2.3CMxCON-Register für Triple-Comparator-Module
12.3Komparatorreferenzspannung
12.3.1CVRCON-Register
12.4Beispiel ADCMP010: Komparator und AD-Wandler an einem gemeinsamen Pin
13Output-Compare-Module
13.1Gemeinsame Grundfunktionalität
13.2Output-Compare-Modi
13.2.1Modi 0 bis 5
13.2.2Modi 6 und 7
13.3Dedizierte Timer der OC-Module
13.4Controlregister der einfachen OC-Module
13.4.1OCxCON-Register
13.5Controlregister der komplexen OC-Module
13.5.1OCxCON1-Register
13.5.2OCxCON2-Register
13.6Initialisierung der OC-Module
13.6.1Beispiel OCpulse010: Erzeugen von Pulsen im 50-Hz-Takt
13.6.2Beispiel OCppulse: Pulse mit vorgegebenem Offset
13.6.3Beispiel OC1FLT110: Prüfen des OCx-Ausgangs im Fehlerfall
14Input Capture
14.1Grundfunktionalität
14.2Modi der Input-Capture-Module
14.3Dedizierte Timer der IC-Module
14.4Controlregister der einfachen IC-Module
14.4.1ICxCON-Register
14.5Controlregister der komplexen IC-Module
14.5.1ICxCON1-Register
14.5.2ICxCON2-Register
14.6Initialisierung der IC-Module
15UART-Module
15.1Register der UART-Module
15.1.1Status- und Controlregister UxSTA
15.1.2UxMOD-Register
15.2Baudrate
15.3Senden eines Bytes
15.4Die Status-Flags TRMT und UTXBF
15.5Die Bits UTXISEL [1:0]
15.6Senden von Zeichenketten
15.7Sporadisches Senden von Daten
15.8Empfangen von Bytes
15.9Das Status-Flag URXDA
15.10Die Bits URXISEL [1:0]
15.11RX-Interrupt-Routinen
15.12Empfang von Strings mit vereinbartem Endzeichen
16SPI-Module
16.1Register der SPI-Module
16.1.1SPIxSTAT-Register
16.1.2SPIxCON1-Register
16.1.3SPIxCON2-Register
16.2Übertragungsgeschwindigkeit
16.3Lesen und Schreiben von Daten
16.4SPI-Status
16.5Umgang mit dem SPI-EEPROM 25AA512 von Microchip
16.5.1Lesen von Datenblocks
16.5.2Schreiben von Datenblocks
16.6Beispiel SPIEE010: Bedienen des serielles EEPROM 25AA512
17I2C-Bus
17.1Geschwindigkeit der I2C-Übertragung
17.2Register der I2C-Module
17.2.1I2CxCON-Register
17.2.2I2CxSTAT-Register
18Parallel Master Port (PMP)
18.1Verwendung der Steuerleitungen (PMRD, PMWR oder PMRD, PMENB)
18.2Register des PMP-Moduls
18.2.1PMCON-Register
18.2.2PMMODE-Register
18.2.3PMADDR-Register
18.2.4PMAEN-Register
18.3Beispiel PMP010: SRAM IS61LV256AL
18.3.1Schreiben ins SRAM
18.3.2Lesen aus dem SRAM
18.3.3Geschwindigkeit der SRAM-Routinen
1Die 16-Bit-PIC-Klasse
Die Bezeichnung »16-Bit-PIC« bezieht sich auf die Breite des Datenbusses. Diese Datenbreite ist in vielen Anwendungen sehr praktisch. Der hauptsächliche Gewinn an Komfort gegenüber den 8-Bit-PICs ist aber dem 24 Bit breiten Befehlsformat zu verdanken. Dadurch sind größere Adressräume möglich – sowohl bei den Daten als auch bei den Befehlen. Außerdem erlauben die breiteren Programmworte effizientere Adressierungsarten.
Die Klasse besteht aus den Familien
•PIC24FJ
•PIC24HJ
•PIC24EP
und den dsPICs, die zusätzlich die DSP-Einheit besitzen:
•dsPIC30FJ
•dsPIC33FJ
•dsPIC33EP
Mit den DSP-Befehlen können lineare mathematische Algorithmen, z.B. für Filter, Regelprozesse oder Fourier-Funktionen, effektiv unterstützt werden.
Die Familien unterscheiden sich physikalisch und in schaltungstechnischen Einzelheiten. In jeder Familie gibt es eine große Anzahl von Derivaten, die sich in Größe und Ausstattung beträchtlich unterscheiden.
Alle Derivate der 16-Bit-PIC-Klasse haben aber die gleiche Architektur. Die CPU arbeitet auf die gleiche Weise. Die Befehle sind die gleichen, bis auf die dsPIC-Befehle, die zusätzlich zu den gemeinsamen Befehlen implementiert sind. Weitgehend gleich ist auch das interne Management, z.B. die Organisation der Interrupts oder die Zusammenarbeit der CPU mit den Peripheriemodulen.
In diesem Buch werden vorwiegend die gemeinsamen Eigenschaften beschrieben. Wichtig ist aber auch, die relevanten Unterschiede zu kennen. Man muss unbedingt wissen, welche Details man im jeweiligen Datenbuch nachlesen muss und worauf man sich höchstwahrscheinlich bei allen Derivaten verlassen kann. Man weiß natürlich nie, was den Entwicklern der 16-Bit-Klasse in der Zukunft einfällt.
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!
Lesen Sie weiter in der vollständigen Ausgabe!