Forum: Mikrocontroller und Digitale Elektronik Tiny24V geht nicht aus Sleep modus mit INT0


von Condor (Gast)


Lesenswert?

Hallo ich habe ein Problehm mit dem Tiny24V.
wenn ich ihn in den sleep Modus versetze startet er nicht mehr mit der 
taste an INT0
ich habe an dem Pin "Motor" eine LED hängen die beim INT0 angehen soll 
und beim WDR INT aus .
wenn ich in der Hauptschleife den sleep befehl weglasse geht alles wie 
gewünscht nur sobald die CPU in sleep geht startet sie nicht mehr.
kann mir einer sagen wo da mein Denkfehler liegt !!!



.include "tn24def.inc"

.def temp  = r16

; portA Belegung
.equ LDR1     = 0
.equ LDR2  = 1
.equ res_1    = 2
.equ Power_LDR = 3
.equ JMP2      = 4
.equ JMP1  = 5
.equ JMP5  = 6
.equ  Motor   = 7

; portB Belegung
.equ RM_Auf   = 0
.equ RM_zu  = 1
.equ Schalter = 2
.equ Reset_pin = 3

.org 0x00
 rjmp  Reset
 rjmp  INT0_pin
 rjmp  PCint0_pin
 rjmp  PCint1_pin
 rjmp  WDT
 rjmp  Tim1_Capt
 rjmp  Tim1_CompA
 rjmp  Tim1_CompB
 rjmp  TIM1_ovf
 rjmp  Tim0_CompA
 rjmp  Tim0_CompB
 rjmp  Tim0_ovf
 rjmp  Ana_comp
 rjmp  ADCc
 rjmp  EE_RDY
 rjmp  USI_STR
 rjmp  USI_OVF


Reset:
 ldi temp,ramend
   Out Spl , temp

   ldi temp, 0b10001000 ; A7 und A3 Ausgang
   Out ddra , temp
   ldi temp, 0b01110111
   Out Porta , temp

  ldi temp, 0b00000000
   Out ddrb , temp
   ldi temp, 0b11111111
   Out Portb , temp


 ldi  temp,0b00110001 ;Sleep enabele / power down einschalten DB S.37
 out  MCUCR,temp  ;int0 pin weschsel DB S.51

 ldi  temp,0b01100001 ;WDT einschalten / interrupt ca 8sec DB S.45
 out  WDTCSR,temp

 ldi  temp,0b01000000 ;int0 einschalten  DB S.51
 out  GIMSK,temp

 ldi  temp,0b00000000 ;vorteiler auf 1  DB S.32
 out  CLKPR,temp

 sei

Loop:

 sleep

 rjmp Loop


WDT:

 cbi porta,motor

 reti


Int0_pin:

 sbi porta,motor

 reti


;INT0_pin: reti
PCint0_pin: reti
PCint1_pin: reti
;WDT: reti
Tim1_Capt: reti
Tim1_CompA: reti
Tim1_CompB: reti
TIM1_ovf: reti
Tim0_CompA: reti
Tim0_CompB: reti
Tim0_ovf: reti
Ana_comp: reti
ADCc: reti
EE_RDY: reti
USI_STR: reti
USI_OVF: reti

von Ziegenpeter (Gast)


Lesenswert?

Condor schrieb:
> ldi  temp,0b01100001 ;WDT einschalten / interrupt ca 8sec DB S.45
>  out  WDTCSR,temp

Mein Vorschlag: benutze statt direkter Bit-Kodierung die Konstanten aus 
der tn24def.inc

Dann ist die Wahrscheinlichkeit geringer, dass du die Falschen Bits 
setzt bzw siehst Fehler schneller.

Den Fehler würd ich vermuten beim WDTCSR, müsste evtl. noch WDE (Bit 3) 
gesetzt sein (?).

von Condor (Gast)


Lesenswert?

Danke schon mal für deine Antwort
aber der WDR INT geht aus dem sleep Modus ohne Probleme .
Sorgen macht mir der INT0 . mit INT0 erwacht die CPU nicht mehr

ich habe es aber versucht und des ändert nichts an meinen Problem

von spess53 (Gast)


Lesenswert?

Hi

>ldi  temp,0b00110001 ;Sleep enabele / power down einschalten DB S.37
> out  MCUCR,temp  ;int0 pin weschsel DB S.51

Aus dem Power-Down-Mode wird der Controller nur durch einen 
Level-Interrupt aufgeweckt. Du hast aber für INT0 Pin-Change 
eingestellt.

MfG Spess

von Condor (Gast)


Lesenswert?

Manchmal sieht man den Wald vor lauter bäumen nicht !
ich habe nämlich fallende flanke und steigende flanke auch schon 
versucht nur beide Bits auf 0 habe ich noch nie getestet....
Jetzt geht es vielen herzlichen Dank
jetzt muß ich mir was einfallen lassen weil an dem Int0 eigentlich ein 
Schalter sitzt und bei jedem umschalten der INT ausgeführt werden 
soll...

von spess53 (Gast)


Lesenswert?

Hi

Dann schalte doch im Interrupt in einen anderen Mode.

MfG Spess

von Condor (Gast)


Lesenswert?

also entweder verstehe ich es jetzt nicht oder wir reden von 
unterschiedlichen Sachen .
An INT0 hängt ein Schalter und wen der umgeschaltet wird soll der Tiny 
erwachen . da er aber nur durch einen Level-Interrupt aufgeweckt werden 
kann geht das doch dann nicht...

von Christian K. (at90s2313)


Lesenswert?

Condor schrieb:
> An INT0 hängt ein Schalter und wen der umgeschaltet wird soll der Tiny
> erwachen . da er aber nur durch einen Level-Interrupt aufgeweckt werden
> kann geht das doch dann nicht...

Doch, aber nicht mit dem synchronen INT0, sondern mit dem asynchronen 
PCINT7:0 oder PCINT11:8. Such mal nach den Bits PCIE0 und PCIE1 sowie 
den Registern PCMSK0 bzw. PCMSK1.

Christian.

von Condor (Gast)


Lesenswert?

Danke für den Tip - das macht jetzt genau das was ich brauche

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.