Allgemeines
Initialisierung
Compare-Funktion
Beispiel
Der Compare-Ausgang eignet sich zum zeitgenauen Erzeugen von Impulsen. Dazu wird der Timer1 auf das Zählen des Prozessortaktes eingestellt. Und im 16-Bit-Compare-Register (CCPR1H/CCPR1L) ein Sollwert geladen.
Nun wird der Wert im Compare-Register ständig mit dem Wert im Timer1-Register verglichen. Sind beide Werte gleich (Timer1 hat den Wert des Compare-Registers erreicht), wird das Flag CCP1IF (CCP2IF für den 2. Kanal) gesetzt, und der Ausgang RC2 wird je nach Voreinstellung auf Low oder auf High gesetzt.
Das zweite CCP-Modul wirkt auf den
Ausgang
RC1.
Zusätzlich kann ein Interrupt
ausgelöst
werden.
.
Initialisierung
Das Capture-Modul Nr.1 wird mit dem
Register
CCP1CON (Adresse 17h) gesteuert, das Capture-Modul Nr.2 mit dem
Register
CCP2CON (Adresse 1Dh).
CCP1CON: CAPTURE/COMPARE/PWM-1-CONTROL (ADDRESS 17h):
bit 7 | bit 6 | bit 5 | bit 4 | bit 3 | bit 2 | bit 1 | bit 0 | |
Name: | - | - | CCPxX | CCPxY | CCPxM3 | CCPxM2 | CCPxM1 |
|
|
|
|
|
|
|
|
|
|
Für den Capture-Mode ist CCPxM3=1
und
CCPxM2=0 zu setzen. Mit den Bits CCPxM1 und CCPxM0 wird
ausgewählt,
was bei Gleichheit von Timer1 und Compare-Register geschehen soll.
|
|
|
|
|
|
|
|
|
|
|
|
Ausgang unverändert, Timer1 auf 0 setzen |
|
|
Die Spezialfunktion ist für die
beiden
CCP-Module unterschiedlich, in beiden Modulen wird aber der Ausgang
(RC2/1)
nicht verändert aber der Timer1 zurückgesetzt. Das
CCP2-Modul
startet aber zusätzlich die AD-Wandlung, falls der ADC
eingeschaltet
ist.
Soll bei Übereinstimmung RC2 auf High gesetzt werden, muss also CCP1CON mit 8 (binär B'00001000') geladen werden:
; CAPTURE MODE mit CCP1 initialisieren
CLRF
CCP1CON ;
CCP1-Modus
aus
BSF
CCP1CON,CCPxM3 ; CCP1-Modus in Compare Mode (RC2 auf
H)
Natürlich muss auch der Timer1 auf Zählen eingestellt werden. Außerdem sollte das zugehörige Pin als Ausgang konfiguriert sein:
; RC2 auf Ausgang stellen
BSF
STATUS,RP0 ; Bank1
BCF
TRISC, 2 ; RC2:
output
BCF
STATUS,RP0 ; Bank 0
Jedes Compare-Ereignis setzt das
Interruptflag
CCP1IF
(CCP2IF) im Register PIR1. Soll dadurch ein Interrupt
ausgelöst
werden, so ist ist das zugehörige Enable-Bit zu CCP1IE
(CCP1IE)
im Register PIE1 setzen. Das sollte erst erfolgen,
nachdem
die anderen Einstellungen abgeschlossen sind, und CCP1IF gelöscht
wurde, da jedes Verändern von CCP1CON versehentlich CCP1IF setzen
kann.
Zum Erlauben des Interrupts müssen
noch das Haupt-Interrupt-Flag GIE und das
Peripherie-Interrupt-Flag
PEIE
gesetzt sein.
folgt bei Gelegenheit
wenn ich Zeit und Lust dazu habe
Autor: sprut
erstellt: 03.07.2001
letzte Änderung: 30.07.2010