- 12V Akku mit 280 Ah bauen         
Ergebnis 1 bis 10 von 11

Thema: PIC16F84A Interruptproblem - oder doch sleep-Problem?

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Ort
    Villmar
    Alter
    34
    Beiträge
    92

    PIC16F84A Interruptproblem - oder doch sleep-Problem?

    Hallo,

    ich habe ein Problem mit einer Interruptroutine.
    Diese wird nur einmalig ausgeführt (bei RB7 = low) und dann nie wieder.
    Der PIC soll eigentlich immer schlafen, es sei denn RB6 oder RB7 wechseln von high zu low - dann soll er eine Routine abarbeiten und wieder einschlafen
    Beim ersten Interrupt durch RB7 springt der PIC in das richtige Unterprogramm (im Bsp unten "UP1"), arbeitet es ab und stellt danach komplett seine Arbeit ein. Dann kann ich an RB6 / 7 soviel Pegelwechsel vornehmen wie ich will, es passiert nichts mehr.
    Ich habe mal den Quelltext angehängt: Mache ich etwas falsch mit dem Setzen / Rücksetzen der Interruptbits?
    Oder habe ich ein Problem mit dem "Einschlafen"?

    Danke schonmal für alle Tipps im Voraus!

    Code:
    	org	0x0000	;Startadresse des Prozessors
    	goto main		;springe in das Hauptprogramm
    
    
    
    
    ;**********************************************************************
    ;-----------Interrupt-Service-Routine---------------
    
    
    	org		0x4					; Startadresse ISR
    
    
    ;Interruptroutine
    	bcf		INTCON,GIE
    	bcf		INTCON,RBIE			; PortB Interrupt verbieten
    	bcf		INTCON,RBIF
    	movwf	w_copy				; Arbeitsregister retten
    	swapf	        STATUS,w			                ; Status retten
    	movfw	s_copy				; statusregister retten
    
    
    	btfss	PORTB,7			;Wenn Eingang AB=0 überspringe nächsten Befehl
    	call	UP1			        ;Rufe UP AB_Setzen auf
    	btfss	PORTB.6			;Wenn Eingang AB=0 überspringe nächsten Befehl
    	call	UP2			        ;Rufe UP AB_Setzen auf
    
    
    	swapf 	s_copy,w		; STATUS zurückholen 
    	movwf	STATUS		; Status aus dem Arbeitsregister in die Speicherzelle schreiben
    	swapf	w_copy,f			; w zurück mit flags  
    	swapf	w_copy,w
    
    
        bsf     INTCON, RBIE                  ; RBIF kann wecken
        bcf     INTCON, RBIF
        bsf     INTCON, GIE
    
    
    	retfie						; ISR verlassen
    
    
    
    
    ; Hauptprogramm
    
    
    main:							;Initialisierung
    				
    	clrf	PORTA 				; PortA löschen
    	clrf	PORTB				; PortB löschen 
    	bsf		STATUS,RP0		; Umschalten auf Bank1
    	movlw	B'00011111'			; 
    	movwf	TRISA			; RA0-RA4 als Eingang definieren
    
    
    	movlw	B'11000111'			; 
    	movwf	TRISB				; RB0-2=Eingang; RB3-5= Ausgang; RB6&7=Eingang
            bcf     OPTION_REG, 7 
    	bcf		STATUS,RP0		; Umschalteten auf Bank0 
    
    
            clrf    INTCON          ; GIE aus 
    
    
            bsf     INTCON, RBIE    ; RBIF kann wecken
            bcf     INTCON, RBIF
    	bsf		INTCON, GIE
    
    
    sleeploop
    	sleep
    	nop
    	goto	sleeploop

  2. #2
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Hallo!

    Ich denke, dass dein µC im Schlaf in endloser Schleife "für immer" bleibt.
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

  3. #3
    Benutzer Stammmitglied
    Registriert seit
    23.02.2007
    Ort
    Villmar
    Alter
    34
    Beiträge
    92
    Nein, dadurch dass der PortB Interrupt aktiviert ist (INTCON, RBIE und INTCON, GIE) sind ja Interrupts auf Pegelwechsel an PortB4-7 erlaubt.

    Beim ersten Durchlauf funktioniert es ja: Der PIC schläft zunächst ein und auf Pegelwechsel von high zu low startet die ISR und das UP wird abgearbeitet.
    Das Interruptflag was gesetzt wurde wird zurück gesetzt und der RB Interrupt Enable wird wieder aktiviert.
    Somit sind die Interrupts wieder erlaubt und der PIC geht schlafen.

    Ein Interrupt durch Pegelwechsel an RB4-7 soll den PIC16F84A laut Datenblatt wecken (macht er ja im Prinzip auch beim 1. Durchlauf).

    Wenn ich das in MPLAB simuliere klappt alles wunderbar, aber in der Schaltung funktioniert es komischerweise nicht.
    Am Unterprogramm kanns nicht liegen, das funktioniert ohne sleep und ohne Interruptroutine.

    Sonst noch jemand ne Idee?

  4. #4
    Erfahrener Benutzer Lebende Robotik Legende Avatar von PICture
    Registriert seit
    10.10.2005
    Ort
    Freyung bei Passau in Bayern
    Alter
    72
    Beiträge
    11.077
    Wo in deinem unkomplettem Code sind die UP1 und UP2 und was sollten sie machen ?
    MfG (Mit feinem Grübeln) Wir unterstützen dich bei deinen Projekten, aber wir entwickeln sie nicht für dich. (radbruch) "Irgendwas" geht "irgendwie" immer...(Rabenauge) Machs - und berichte.(oberallgeier) Man weißt wie, aber nie warum. Gut zu wissen, was man nicht weiß. Zuerst messen, danach fragen. Was heute geht, wurde gestern gebastelt. http://www.youtube.com/watch?v=qOAnVO3y2u8 Danke!

Ähnliche Themen

  1. Asuro oder Robby RP5? Oder doch etwas anderes?
    Von whitecrane22 im Forum Allgemeines zum Thema Roboter / Modellbau
    Antworten: 4
    Letzter Beitrag: 18.09.2011, 08:01
  2. Deepsleep oder Sleep
    Von hubert_K im Forum PIC Controller
    Antworten: 1
    Letzter Beitrag: 02.09.2010, 12:32
  3. sleep modus oder ähnliches
    Von xxrider im Forum Basic-Programmierung (Bascom-Compiler)
    Antworten: 4
    Letzter Beitrag: 30.08.2007, 20:18
  4. PIC16LF84A = PIC16F84A oder wie?
    Von orph im Forum PIC Controller
    Antworten: 6
    Letzter Beitrag: 05.04.2007, 09:06
  5. Kleines Problem? Oder doch ein GROSSES???
    Von DreamLiner07 im Forum Elektronik
    Antworten: 25
    Letzter Beitrag: 19.02.2007, 22:30

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

LiFePO4 Speicher Test