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 ?
Ach ja da war noch was: Das get 16 mal durch den Interrupt und dann ist Stackoverflow :-(
? ? ? ? Wenn ich ihn von hand Stoppe : BCF T2CON,TMR2ON Und am Ende des Interrupts Einschalte, dann gehts ? ? ?
OK zu früh :-( Sobald ich setze ist er wieder im Interrupt
INT_T2 movlb, 0 ; das muss noch rein btfss pir1,tmr2if ; Timer2 Interrupt ? goto INT_EXT ; Nein
Ne das hat auch nicht funktioniert. Sobald er Timer an ist (keine Verzögerung) get das Ding in den Interrupt.
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.
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 ...
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, ...
> 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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.