ATTINY 817 Sleep Mode

OP #4951504
Hallo zusammen,

ich versuche mich gerade an einem der neuen ATTINY´s, dem 817.
Leider bekomme den Prozessor nicht mehr aus den Sleep-Mode im PowerDown 
aufgeweckt.

Mal zu meiner HW:
- Taster mit PCINT an PC3
- LED an PC0 (wird geflipt bei PCINT
- LED an PC2 (wird jede sec. geflipt im main)

Mein Code läuft solange ich den Sleep Mode nicht aktiviere.
Leider erweckt mein PCINT an PC3 die CPU nicht aus dem Schlaf.
Da das ganze Coding auf den neuen Tiny´s etwas anders läuft als auf 
meinen bisher gewohnten, habe ich bestimmt etwas übersehen.

Für eure Hilfe bedanke ich mich schon mal.
Hier mein Code:
1
#define F_CPU 3333333UL
2

3
#include <avr/io.h>
4
#include <avr/interrupt.h>
5
#include <util/delay.h>
6

7
int main(void)
8
{
9
  PORTC.DIR |= (PIN0_bm);
10
  PORTC.DIR |= (PIN2_bm);
11
  PORTC.PIN3CTRL = 1 << PORT_PULLUPEN_bp | PORT_ISC_FALLING_gc;
12
  SLPCTRL.CTRLA = 1 << SLPCTRL_SEN_bp | SLPCTRL_SMODE_PDOWN_gc; 
13
    
14
  sei();
15
  
16
  //Enter Sleep mode
17
  asm("sleep");
18
  
19
    while (1) 
20
    {
21
    PORTC.OUTTGL = PIN2_bm;
22
    _delay_ms(1000);
23
    }
24
}
25

26
//PORTC INT
27
ISR(PORTC_PORT_vect)
28
{
29
  cli();
30
  PORTC.INTFLAGS = 0xFF;
31
  
32
  PORTC.OUTTGL = PIN0_bm;
33
  sei();
34
  
35
}
Seite 20

2. All pins can be used for external interrupt, where pins Px2 and Px6 
of each port have full asynchronous detection.

Die anderen Pins funktionieren nur, wenn die CPU-Clock läuft, also nicht 
bei Power-Down.
OP
Na so ein Scheibenkleister... nur gut das man das auf der Seite 92 nicht 
rein schreibt :)

Da meine Leiterplatte schon fertig ist werde ich das Morgen mal mit 
Lackdraht umbasteln und berichte dann.

Nachtrag:
Kann man das eventuell über das Event-System umrouten?

Danke schon mal ;)
Hi

cli() und sei() sollten in der ISR nicht nur unnötig sein, sondern auch 
gefährlich.
Der ATtiny schaltet beim Sprung in die ISR das I-Flag eh ab, wodurch 
keine weiteren Interrupts auslösen.
Durch Dein sei() am Ende der ISR wird danach (wohl noch vor Ende der 
Funktion) ein eventuell anstehender neuer Interrupt ausgelöst - mit 
'etwas Glück' verheddert sich Dein Code bis zum Stack-Überlauf.

Am Ende der ISR wird das I-Flag automatisch wieder aktiviert (in 
Assembler durch den Befehl reti, statt ret in der 'normalen' Funktion)

MfG
Stefan G. schrieb:
> Kann man das eventuell über das Event-System umrouten?

Nein. Die synchronen, mit CPU-Clock getakteten Eingänge kann man nicht 
auf asynchron umschalten. Wenn Du die anderen Eingänge benutzen willst, 
mußt Du den Sleep-Mode z.B. auf Idle umstellen, dann läuft die CPU-Clock 
weiter. Er verbraucht dann natürlich auch mehr Strom als im Power-Down.

Patrick J. schrieb:
> Der ATtiny schaltet beim Sprung in die ISR das I-Flag eh ab, wodurch
> keine weiteren Interrupts auslösen.

Nein. Die neuen Tinies tun das nicht. Die haben einen xmega-ähnlichen 
Kern, mit einen xmega-ähnlichen Interruptcontroller.

Seite 108:

Interrupt generation must be globally enabled by writing a '1' to the 
Global Interrupt Enable bit (I) in the CPU Status register (CPU.SREG). 
This bit is not cleared when an interrupt is acknowledged.

Und da sie zwei Interruptprioritäten haben, sollte man das globale 
Interruptflag natürlich nur verändern, wenn man genau weiß, was man tut. 
Der Interruptcontroller sperrt Interrupts gleicher Priorität 
hardwaremäßig.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 9 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.