[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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.