Frage: AT90S2313 und Sleep-Mode

Gast #94838
Lesenswert?
• ▲
▼
Hallo allerseits,
folgendes Problem beschäftigt mich seit gestern Abend:
In AVR-Studio (4.09) funktioniert das Programm wie gewünscht.
Wird es auf den uC übertragen, fällt dieser sofort in den Sleep-Mode
und lässt sich über INT0 nicht mehr aufwecken.
Woran könnte das liegen ?

-----------------<< CODEANFANG >>-----------------
;******************************************************************
;*                                                                *
;* Beschreibung:                                                  *
;*                                                                *
;* Programm zur Demonstration des 'Power-Down'-Modus              *
;*                                                                *
;* Direkt nach dem Power-On-Reset fällt der 2313 in den Sleep-Mode*
;* Betätigen von T1 bewirkt ein 'aufwachen'                       *
;* Betätigen von T2 -> wieder in Sleep-Mode fallen                *
;*                                                                *
;* Hardware:                                                      *
;*                                                                *
;* T1  - PD2 (INT0), aufwachen                                   *
;* T2  - PD3 (INT1), schlafen                                    *
;* Die Taster werden über Pull-Down-Widerstände (5k) angeschlossen*
;*                                                                *
;* AT90S2313 @ 4MHz an 5V                                         *
;* Die Stromaufnahme wird mit Hilfe eines Multimeters kontrolliert*
;*                                                                *
;* Keine sonstige Hardware ist angeschlossen (Programmer, LEDs, ..*
;*                                                                *
;******************************************************************
;*                                                                *
;* Autor:   Alexander Nießen                                      *
;* Datum:   18.06.2004                                            *
;*                                                                *
;******************************************************************
;
.include "2313def.inc"

.def temp1 = r16

;------------------------------------------------------------------
.cseg
            ; Resetvektoren initialisieren
            rjmp reset
            rjmp ext_int0
            rjmp ext_int1
;------------------------------------------------------------------
ext_int0:   ldi temp1, 0b00001111       ; SM nicht zugelassen
            out MCUCR, temp1
            reti
;------------------------------------------------------------------
ext_int1:   ldi temp1, 0b00111111       ; SM zulassen
            out MCUCR, temp1
            reti
;------------------------------------------------------------------
reset:
            ldi temp1, LOW(RAMEND)      ; Stackpointer init.
            out SPL, temp1

            ; beide Ports als Ausgang definieren
            ldi temp1, 0b11111111
            out DDRB, temp1
            out DDRD, temp1

            ldi temp1, 0b11000000
            out GIMSK, temp1            ; INT0 und INT1 Enable

            ldi temp1, 0b00111111       ; SE, SMode, ISC
            out MCUCR, temp1

            sei                         ; IRQs freigeben

loop:       sleep                       ; schlafen gehen ?!
            rjmp loop
;------------------------------------------------------------------
------------------<< CODEENDE >>------------------

Grüße,
Alex
Gast #94841
Lesenswert?
• ▲
▼
Hallo Alex,
nochmal eine (hofentlich nicht zu Dumme) Frage.
Im 2313 Manual auf Seite 25 steht doch, das die INT-Eingänge Low Aktiv
sind, habe jetzt nicht Deine MCUCR Einstellungen nachgeschaut, ob Du
auf Flanke "Interruptst".
Da wären die Taster mit Pull-Down Rs doch fehl am Platze, oder?
Gruß
Quark

P.S. "mal scauen was ich hier lernen kann." und "nochmal eine
(hofentlich nicht zu Dumme) Frage."
könnten Dir und anderen ironisch oder so vorkommen, dem ist aber nicht
so, bin selber Anfänger und weiß es auch noch nicht so richtig. Morgen
teste ich es mal.
Gast #94842
Lesenswert?
• ▲
▼
Hallo Quark.
Die Interrupts sind auf Rising Edge eingestellt.
Das funktioniert ganz gut so, obwohl beide Datenrichtungsregister auf
Ausgang stehen.
... und weil ich nicht verstehe wieso der MC nicht aufwacht habe ich in
der Interrupt Service Routine für INT0 mal zum 'debuggen' eine LED
eingeschaltet und mit INT1 ausgeschaltet (Natürlich ohne Sleep Mode.
Wollte nur sehen, ob die Interrupts richtig funktionieren.)
Das ging ...
Nur das mit dem aufwecken über INT funktioniert nicht.
Naja - war eh' nur, um den Stromverbrauch im normalen Modus und im
Sleep Modus zu verifizieren.
In der Schaltung, die ich gerade für meine Frau bastel, wird der MC
über einen normalen Reset aus dem Tiefschlaf geholt. Ist halt
Batteriebetrieben. Da kam ich um den SM diesmal net drumherum ;)

Grüße,
Alex
Gast #94843
Lesenswert?
• ▲
▼
--- interessiert das überhaupt noch jemanden?? --- g

Hallo Alex,

wollte es ja "Morgen" testen, hatte aber leider keine Zeit.
Es ist wohl so, das es zwei Sleep-Modes gibt. Aus dem
"Power-Down"-Mode kann nur ein Level-Interrupt die mcu aufwecken
(MCUCR = 0b00111100).
Wenn man den "Idle"-Mode nimmt (Bit4 = 0, im MCUCR),
geht es auch mit dem "edge"-interrupt (MCUCR = 0b00101111)
(Seite 25-27) .
Habe dazu mit hilfe Timer0 ein LED blinken lassen, und den
Timer int. zugelassen wenn kein "Sleep enabled" war, und
gesperrt wenn "Sleep enabeld" war.

Danke für Deine Frage, habe durch das Testen was gelernt!

Gruß
Quark

Antwort schreiben

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.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.