mikrocontroller.net

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


Autor: Condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Ziegenpeter (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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 (?).

Autor: Condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: spess53 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi

Dann schalte doch im Interrupt in einen anderen Mode.

MfG Spess

Autor: Condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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...

Autor: Christian K. (at90s2313)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Condor (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke für den Tip - das macht jetzt genau das was ich brauche

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.