Forum: Mikrocontroller und Digitale Elektronik 16F84, IRQ's und Sleep


von Binnesmann (Gast)


Lesenswert?

Mahlzeit,

ich dachte immer, daß ich den PIC aus dem Sleep Mode mit dem IRQ wieder 
aufwecken kann. Das scheint jetzt aber nicht zu funktionieren. Kennt 
jemand die Problematik?

Gruß Binnesmann

von Michael (Gast)


Lesenswert?

Hast du denn die Interrupt abhandlung aktiviert und den Externen 
Interrup auch?
Es funktioniert auch nur mit einem Externen Interrupt, glaub ich!
mfg

von Binnesmann (Gast)


Lesenswert?

Hi,

ich habe nur die externen IRQ's belegt. Habe dabei den normalen ext. IRQ 
und den Upper 4 Pin IRQ aktiviert. Geht leider nicht. Wenn ich in einer 
Endlosschleife laufe, dann komme ich in die IRQ Routine rein. Im Sleep 
Mode nicht. Ich möchte damit eine Fernbedienung bauen. Möchte aber 
zeitgleich keine große ext. Hardware haben. Soll eine Fernbedienung für 
den Schlüsselbund mit max. 5 Tasten werden. Somit würden die 5 IRQ 
Leitungen reichen und ich bräuchte nur die Taster als ext. Hardware. Im 
Sleep Mode reicht die Batterie dann auch 10 mal so lange.

Gruß Binnesmann

von Manfred Glahe (Gast)


Lesenswert?

Hallo,
das geht  sogar aus mehreren Zuständen herraus! Einer davon ist der gut
zu nutzende Change On Port IRQ auf Portb. Allerdings ist zu beachten,
daß das Anlaufen dauert (bis zu Sekunden). Mit dem  Scope mal den Osz
Pin beobachten und die Zeit ablesen.
Steht aber alles im Datenblatt gut beschrieben.

MfG  Manfred Glahe

von Tom (Gast)


Lesenswert?

Es ist bestimmt nicht schädlich wenn du deinen Quell-Code
veröffentlichst, oder? denn aus der fehrne zu sagen wo der fehler sitzt
ist kaum möglich.

von Binnesmann (Gast)


Lesenswert?

Habe endlich meinen Internetzugang wieder hinbekommen.

;Pic Initialisierung
    org     0      ;Programmstart

    jmp  Init

    org  4      ;Start nach Interrupt

    jmp  senden

Init    mov     !ra,#00000b    ;Port A Ausgabe
    mov     !rb,#0ffh    ;Port B Eingabe
    mov     ra,#00000b    ;Port A alles low
    mov     rb,#00h                 ;Port B alles low

    setb  ActivLED    ;Ich bin wach
    setb  DataOut      ;Breakpegel beenden

    mov  TasteRet,#00h
    clrb  INTCON.0    ;Upper 4 Bits / Port B Interruptflag
    clrb  INTCON.1    ;Ext. IRQ Flag
    clrb  INTCON.2    ;RTCC Overflowflag
    setb  INTCON.3    ;PortB Interrupt zulassen
    setb  INTCON.4    ;Externen Interrupt zulassen
    clrb  INTCON.5    ;RTCC Interrupt disable
    clrb  OPTION.6    ;Externen Interrupt bei Wechsel von High nach Low
    setb  INTCON.7    ;Interupts zulassen

    clrb    ActivLED    ;Ich geh wieder schlafen

    sleep

In der Routine mache ich nichts anderes als die Initialisierung. Das
klappt auch alles wenn ich statt dem sleep eine Endlosschleife
reinsetze. In dieser Version lande ich allerdings nie in der
Interruptroutine.

Gruß Binnesmann

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.