[PIC16F690] Kein TMR1-Interrupt mit Quarz

OP #2470283
Lesenswert?

Hallo Leute!

Habe einen 32.768kHz Quarz an OSC1/OSC2 hängen, welcher auch schwingt. 
Jedoch wird das Interrupt für den Timer1 nicht ausgelöst und ich weiß 
nicht warum, liegt es an der Konfiguration?
1
ANSEL=0;
2
  ANSELH=0;
3
  
4
  TRISA=0b11111011;
5
  TRISB=0b11111111;
6
  TRISC=0b11100000;
7
  
8
  PORTA=0b00000000;
9
  PORTB=0b00000000;
10
  PORTC=0b00000000;
11
  
12
  //----Interrupt-Initialisierung-------
13
  RABIF=0;
14
  TMR1IF=0;  
15
  GIE=1;
16
  PEIE=1;
17
  TMR1IE=1;
18
  RABIE=1;
19
  IOCA0=1;
20
  IOCA1=1;
21
  
22
  //----Timer1-Initialisierung----------
23
  T1CON=0b00111111;
24
       //T1GINV(1) TMR1GE(2) T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
Gast #2470340
Lesenswert?

Manuel H. schrieb:
> Jedoch wird das Interrupt für den Timer1 nicht ausgelöst

Sieht erstmal alles richtig aus. Hast du mal das TMR1 (Zählregister) 
ausgelesen um zu sehen ob er überhaupt zählt? Nächster Schritt wäre dann 
einen anderen Interrupt zu triggern um zu sehen ob das funzt.
#2470358
Lesenswert?

Läuft der Chip überhaupt?
Hast du MCLR richtig beschalten?
Wie sieht denn das Konfigurationswort aus?
Und wie stellst du fest, dass der Interrupt nicht stattfindet?

PS: Ich lese gerade der 16F690 hat bereits einen eingebauten low-power 
crystal oszillator für Timer1. Just to let you know.
Gast #2470612
Lesenswert?

Hallo!

Meine Konfiguration ist folgende:

__CONFIG(FOSC_LP & WDTE_OFF & PWRTE_OFF & MCLRE_OFF & CPD_OFF & CP_OFF & 
BOREN_OFF & IESO_OFF & FCMEN_OFF);

und dass kein Interrupt ausgeführt wird merke ich an folgendem Code:
1
void interrupt isr(void)
2
{
3
  if(TMR1IF==1)
4
  {
5
    clock++;
6
    clock2++;
7
    if((clock%2048)==0)//alle 500ms wird halftakt getoggled
8
    {
9
      halftakt=~halftakt;
10
    }
11
    else if((clock%4096)==0)//alle 1000ms wird takt getoggled
12
    {
13
      takt=~takt;
14
      clock=0;
15
    }
16
    if((clock2%40960)==0)//alle 10000ms wird pressed auf 0 gesetzt (damit bei Einstellen der Minuten von 59 auf 0, Stunde nicht um 1 erhöht wird)
17
    {
18
      pressed=0;
19
      clock2=0;
20
    }
21
    TMR1IF=0;
22
  }

In dem TMR1IF==1 Zweig habe ich direkt mal RA2=~RA2; stehen gehabt, 
welches bei mir eine LED über einen Transistor toggled.

Wie soll ich denn TMR1-Zählregister auslesen, während der PIC läuft, 
beim Debuggen übers PICkit v2 kommt bei mir nur eine Fehlermeldung, weiß 
jetzt nicht genau welche aber ich muss jetzt grad weg kann nachher 
nochmal nachschauen.

Andere Interrupts funktionieren, hab noch zwei tastergesteuerte 
Interrupts welche funktionieren.
Gast #2470954
Lesenswert?

Ach danke, hatte einen Denkfehler im Programm. Nun toggled die Led im 
halben Sekunden Takt, ich wollte aber das interrupt alle halben sekunden 
haben. Dazu musst ich aber die zählregister miteinberechnen in meine 
rechnung.

Gut dass wenigstens dieses Problem schonmal gelöst ist. Danke!!

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren