Forum: Mikrocontroller und Digitale Elektronik ATTINY 817 Sleep Mode


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Stefan G. (lightning86)


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

von P. M. (mikro23)


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

von Stefan G. (lightning86)


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

: Bearbeitet durch User
von Patrick J. (ho-bit-hun-ter)


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

von P. M. (mikro23)


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

: Bearbeitet durch User
von Stefan G. (lightning86)


Bewertung
0 lesenswert
nicht lesenswert
So ich habe meinen Taster mit einem Lackdraht auf PinA2 verlegt und es 
Funktioniert perfekt!

Danke für die schnelle Hilfe

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]
  • [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.