Forum: Mikrocontroller und Digitale Elektronik TMR2IF ist da und lässt sich nicht löschen


von Fuerst-Rene (Gast)


Lesenswert?

Hallo

Ich habe den Timer 2 Konfiguriert

movlb   0
movlw   T2CON_          ; Timer2 konfigurieren (00000101)
movwf   T2CON
bcf     pir1,tmr2if     ; Timer2 Interrupt Flag löschen
movlw   BIT_TIME        ; Timer2 Zeit festlegen (.103)
movwf   PR2

movlb  1
bsf     pie1,tmr2ie     ; Timer2 Interrupt enablen
bsf     pie1,rcie       ; SCI Rx enablen
bsf     pie1,tmr1ie     ; Timer1 enablen

Sobald ich "movwf T2CON" mache, steht der Interrupt in PIR1 und läßt 
sich nicht löschen.

Daher hänge ich voll im Interrupt fest.
Hardware:
ICD2 + 16f1939
Software:
MPLAP IDE v8.63

org     0x04

clrf  Status
clrf  PCLATH
clrf  FSR0H
clrf  BSR

INT_T2
btfss   pir1,tmr2if     ; Timer2 Interrupt ?
goto    INT_EXT         ; Nein
.
.
.
bcf     PIR1,TMR2IF  ; Interrupt Flag löschen TMR2IF
.
.
.
INT_END
clrf  IOCBF
retfie

Irgendwo hänge ich wieso kann ich das Bitt nicht löschen aber testen ob 
es da ist ?

von Fuerst-Rene (Gast)


Lesenswert?

Ach ja da war noch was:

Das get 16 mal durch den Interrupt und dann ist Stackoverflow :-(

von Fuerst-Rene (Gast)


Lesenswert?

?
?
?
?
Wenn ich ihn von hand Stoppe :
BCF    T2CON,TMR2ON
Und am Ende des Interrupts Einschalte, dann gehts
?
?
?

von Fuerst-Rene (Gast)


Lesenswert?

OK zu früh :-(
Sobald ich setze ist er wieder im Interrupt

von .... (Gast)


Lesenswert?

INT_T2

movlb, 0                ; das muss noch rein

btfss   pir1,tmr2if     ; Timer2 Interrupt ?
goto    INT_EXT         ; Nein

von Fuerst-Rene (Gast)


Lesenswert?

Ne das hat auch nicht funktioniert.
Sobald er Timer an ist (keine Verzögerung) get das Ding in den 
Interrupt.

von .... (Gast)


Lesenswert?

wie wird denn der Timer geladen?

von Fuerst-Rene (Gast)


Lesenswert?

So wie Beschrieben:

movlb   0
movlw   T2CON_          ; Timer2 konfigurieren (00000101)
movwf   T2CON
bcf     pir1,tmr2if     ; Timer2 Interrupt Flag löschen
movlw   BIT_TIME        ; Timer2 Zeit festlegen (Wert = .103)
movwf   PR2

Und wenn ich das Datenblatt richtig gelesen habe,
Sollte er erst bei erreichen des Wertes in PR2 auslösen und sich selbst 
reseten.

von .... (Gast)


Lesenswert?

Da gibt es noch einen Prescaler und einen Postscaler ...

woher weisst Du, dass er SOFORT in den Interrupt geht, die .103 für PR2 
sind doch evtl. ratz-fatz erreicht, wenn der Core mit 8 Mhz rennt ...

von Fuerst-Rene (Gast)


Lesenswert?

Ich habe den ICD2 als Debugger drann und ich gehe stepin = 1 Schritt.
Wäre natürlich fatal wenn der Timer Trotz debuggen weiterläuft.
Aber, wenn ich das Gerät direckt programmiere und Einschalte sehe ich 
das auch denn es klackert das Relai so schnell es kann.
Post und PRE sind Deaktivirt und ich habe 16MHZ.
und er soll auch so oft in die Interrupts (alle 103 Takte = 6,4375µS)
PS.:

Beim Stepin zählt der Timer2 komisch = 74, 9, 82, ...

von usuru (Gast)


Lesenswert?

> und er soll auch so oft in die Interrupts (alle 103 Takte = 6,4375µS)

Wenn der Interrupt alle 103 Takte aufgerufen wird, dann ist es doch ok, 
das wären aber bei 16 MHz Oszillator alle 25.75 µsec (16 MHz Oszillator 
sind 4 MHz Takte für den Core = 250 nsec * 103 = 25.75 µsec). Wenn er 
SOFORT in den Interrupt ginge, wäre das VIEL öfter (bin zu faul, das 
jetzt auszurechnen). Setze im INT doch mal einen Pin auf 1 und dann 
wieder auf 0 und hänge ein Oszi oder einen LA dran, dann siehts Du doch, 
ob die Zeiten stimmen.

von Fuerst-Rene (Gast)


Lesenswert?

Habe den Fehler gefunden.

DER ICD2 LÄSST IM HINTERGRUND IMMER ALLE TIMER WEITERLAUFEN !!!!

Habe nun einen ICD3 bestellt, der kann richtig einfrieren.

Danke an alle die sich beteiligt haben.

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.