Versuche gerade verzweifelt den Capture Modus eines PIC18F46K80 im MPLAPX in Betrieb zu nehmen. Unten sehr ihr den Code dazu. Der Timer kann mittels Interrupt einen Pin toggeln lassen. Daraus schliesse ich, dass ich diesen richtig aufgesetzt habe. Doch mit dem Capture Modus passt was noch nicht. Im Anhang seht ihr den Auszug aus dem Datenblatt. Hoffe jemand kann mir helfen. Vielen Dank im Voraus! //TIMER //////////////////////////////////////////////////////////////////////// /// // Beschreibung: Initialisiert timer 3 // Parameter: - // Rückgabewert: - //////////////////////////////////////////////////////////////////////// /// void init_timer_3(void) { T3CON = 0b00111111; // Timer 3 Control Register //00 Fosc / 4 //--11 Prescaler 1/8 //----1 Osc Enable //-----1 Don't care //------1 16-Bit Buffer //-------1 Enables Timer3 T3GCON= 0b00000000; //Timer 3 Gate Control Register //0 Gate function disabled //-0000000 Don't care because G.f. disabled OSCCON2=0b01010010; //Osc Controll Register 2 //0 Read as "0" //-0 System clk comes not from SOSC //--0 Read as "0" //---1 Dont case because no SOSC //----1 Osc running, even if no other sources reguesting it //-----0 Read as "0" //------1 MF-INTOSC is stable(DOnt care) //-------0 MF-INTOCS is unused -> HF INTOSC PIE2bits.TMR3IE=1; //Enables Interrupt Timer 3 ei(); //Enables Global Interrupts } //////////////////////////////////////////////////////////////////////// /// // Beschreibung: Initialisiert Capture Mode //////////////////////////////////////////////////////////////////////// /// void init_capture(void) { PIE4bits.CCP3IE=0; //Verhindert Falschen Interrupt beim konfigurieren PIR4bits.CCP3IF=0; //Verhindert Falschen Interrupt beim konfigurieren io_DAC1=IN; //Setzt Pin als Input CCP3CON = 0b00000101; //Controll Register //00 Read as "00" //--00 Unused for capture mode //----0101 Mode Select -> Steig. Flanke CCPTMRS |= 0b00000100; //Timer Select Register //-----1 //Capture auf TMR3 PIE4bits.CCP3IE=1; //Enables CCP3 Interrupt PIR4bits.CCP3IF=1; } //////////////////////////////////////////////////////////////////////// /// // Beschreibung: Interrupt Subroutine von Timer 3 / CCP3 //////////////////////////////////////////////////////////////////////// ///// void interrupt isr_timer_3_overflow(void) { // OVERFLOW TIMER 3 //Wenn Interrupt Enable und Flag gesetzt... if(PIE2bits.TMR3IE && PIR2bits.TMR3IF) { //onbrd_H0^=0x01;//For testing PIR2bits.TMR3IF=0; // Int Flag zurücksetzen } //FLANKE AN CCP3 //Wenn Interrupt Enable und Flag gesetzt... if(PIE4bits.CCP3IE && PIR4bits.CCP3IF) { onbrd_H0^=0x01; // LED toggeln für Test PIR4bits.CCP3IF=0; // Int Flag zurücksetzen } }
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.