Forum: Mikrocontroller und Digitale Elektronik PIC16 Kein Timer Interrupt bei Postscaler != 1:1


von Joe S. (bubblejoe)


Lesenswert?

Hallo,

ich habe ein für mich unerklärliches Problem.

Edit: µC PIC16F18877

Der Timer4 (Timer2 und Timer6 gleiches Verhalten) löst keinen Interrupt 
mehr aus, wenn ich den Postscaler auf andere Werte als 1:1 stelle.
1
    // Timer4 init
2
    T4CLKCONbits.CS = 0b0001;       // Clock Source FOSC/4
3
    T4CONbits.CKPS = 0b010;         // Prescaler 1:4
4
    T4CONbits.OUTPS = 0b0000;       // Postscaler 1:1
5
    T4HLTbits.MODE0 = 0;            // normal running mode
6
    T4PR = 208;
7
    PIE4bits.TMR4IE = 1;
8
9
    INTCONbits.PEIE = 1;
10
    INTCONbits.GIE = 1;
11
12
    T4CONbits.ON = 1;
1
void __interrupt() isr(void)
2
{
3
    if(TMR4IF == 1)
4
    {
5
       ...
6
        TMR4IF = 0;
7
    }
8
}

Dieser Code läuft wie erwartet. Sobald ich den Postscaler Wert auf 
irgendwas beliebig anderes stelle (1:2 ... 1:16) wird die ISR nicht mehr 
aufgerufen. Kennt jemand das Problem?

Viele Grüße, Joe

: Bearbeitet durch User
von H. H. (Gast)


Lesenswert?

Welcher PIC16...?

von Erich (Gast)


Lesenswert?

Zu jedem Pic gibt es neben dem datasheet auch ein errata sheet.

Dort reinschauen, evtl. steht da was drin über deine Beobachtung.

Gruss

von lesen bildet (Gast)


Lesenswert?

H. H. schrieb:
> Welcher PIC16...?

steht doch im Beitrag des TE: PIC16F18877

lesen bildet

von Teo D. (teoderix)


Lesenswert?

Joe S. schrieb:
> Edit: µC PIC16F18877

Joe S. schrieb:
> 09.02.2022 16:05:
>     Bearbeitet durch User

H. H. schrieb: <- 16:04
> Welcher PIC16...?

von Joe S. (bubblejoe)


Lesenswert?

Erich schrieb:
> Zu jedem Pic gibt es neben dem datasheet auch ein errata sheet.
>
> Dort reinschauen, evtl. steht da was drin über deine Beobachtung.
>
> Gruss

Hallo,

das hatte ich bereits getan. Steht nix zu drin.

von Teo (Gast)


Lesenswert?

Las dir das mal vom Codegenerator generieren.
....
Habs grad eh offen. Hier zum schmulen und kopieren:
1
void TMR2_Initialize(void)
2
{
3
    // Set TMR2 to the options selected in the User Interface
4
5
    // T2CS HFINTOSC; 
6
    T2CLKCON = 0x03;
7
8
    // T2PSYNC Not Synchronized; T2MODE Software control; T2CKPOL Rising Edge; T2CKSYNC Not Synchronized; 
9
    T2HLT = 0x00;
10
11
    // T2RSEL T2CKIPPS pin; 
12
    T2RST = 0x00;
13
14
    // PR2 0; 
15
    T2PR = 0x00;
16
17
    // TMR2 0; 
18
    T2TMR = 0x00;
19
20
    // Clearing IF flag before enabling the interrupt.
21
    PIR4bits.TMR2IF = 0;
22
23
    // Enabling TMR2 interrupt.
24
    PIE4bits.TMR2IE = 1;
25
26
    // Set Default Interrupt Handler
27
    TMR2_SetInterruptHandler(TMR2_DefaultInterruptHandler);
28
29
    // T2CKPS 1:1; T2OUTPS 1:16; TMR2ON on; 
30
    T2CON = 0x8F;
31
}

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.