Hallo Leute! Ich verwende bei einem meiner Programme den PIC16F737, und möchte mit dem internen Komparator einen Interrupt auslösen. Leider passiert das fälschlicherweise sofort nach dem Starten des Programmes. Wenn ich das Programm Schritt für Schritt im debugger laufen lasse passiert kein interrupt. Sobald ich das Programm aber normal laufen lasse springt es sofort in die Interrupt Routine. Mein main Program ist momentan nur eine nop-Schleife, also nach meiner Initialisierung passiert erstmal gar nichts. Die Eingänge des Komparators hängen an jeweils einem Shunt der mit Masse verbunden ist. Ich bin momentan relativ ratols, habe die Komparatorfunktion auch noch nie vorher verwendet, und hoffe mal auf ein paar Tipps oder vorschläge. LG, Jonny... Und hier meine Initialisierung: init clrf STATUS clrf PORTA clrf PORTB clrf PORTC clrf ADCON0 ; Komperator init bsf STATUS, RP0 bcf STATUS, RP1 movlw b'10100101' ;Komparator Referenzspannung movwf CVRCON movlw b'00110110' movwf CMCON bcf STATUS, RP0 bcf STATUS, RP1 bcf PIR2, CMIF ; Komperator init ende movlw b'11000000' movwf INTCON clrf T1CON clrf T2CON bsf STATUS, RP0 ; Bank 1 bcf STATUS, RP1 movlw b'11000011' movwf TRISA movlw b'00010111' movwf TRISB movlw b'10000000' movwf TRISC movlw b'10000000' movwf OPTION_REG clrf PIE1 movlw b'01000000' movwf PIE2 clrf PCON clrf OSCTUNE clrf OSCCON movlw b'00001101' movwf ADCON1 clrf ADCON2 bcf STATUS, RP0 ; Bank 0 bcf STATUS, RP1 bcf STATUS, RP0 ; Bank 2 bsf STATUS, RP1 movlw b'00000000' ; Watchdogtimer ; movwf WDTCON bcf STATUS, RP0 ; Bank 0 bcf STATUS, RP1 clrf memoR clrf memoL clrf d1 clrf d2 clrf d3 clrf d4 clrf counterR clrf counterL clrf Endlage_R clrf Endlage_L clrf Endlage goto main
Prüf mal, ob die verwendete Referenzspannung nicht erst eine Zeit zum stabilisieren braucht. Ich würde da etwas Wartezeit einbauen und dann erst den IF löschen.
Ich habe nun eine Verzögerung von einer Sekunde eingebaut, leider hat das nicht geholfen. Wenn ich das CMIF mit der Watch funktion beobachte bleibt es immer 0 solange ich Schritt für Schritt debugge, nur wenn ich auf Run klicke lande ich sofort beim Interrupt. :-( Hat noch jemand einen Hinweis für mich? :-D
GIE (bit 7 von INTCON) sollte erst am Ende der Initialisierung gesetzt werden und nicht schon vor die Komponenten initialisiert werden, eventuell erst im main. Speziell aber wenn du schon PIE aktivierst, die aber gar noch nicht konfiguriert sind.
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.