Seltsames Problem mit Timer2 Atmega1284p

OP #7040917
Lesenswert?
• ▲
▼
Hallo Zusammen,
ich bin eben auf ein seltsames Problem mit Timer2 gestoßen. Und zwar 
läuft der Timer aus irgedeinem Grund nicht im Power_Save Mode.
Was ich nicht verstehe ist, dass ich genau den gleichen Code Teil auf 
einem anderen Atmega1284p am laufen habe. Das einzige, was ich auf dem 
anderen Atmega anders gemacht habe, ist ein anderer Prescaler, aber das 
kann ja eigentlich nicht das Problem sein. An TOSC habe ich einen 
Uhrenquarz angeschlossen. Jemand ne Idee, was ich falsch gemacht habe?
1
#include <avr/io.h>
2
#include <avr/interrupt.h>
3
#include <avr/sleep.h>
4
volatile int count=0;
5

6
int main(void){
7
  
8
    // Timer 2 konfigurieren
9
    GTCCR |= (1 << TSM) | (1 << PSRASY);  //Timer anhalten, Prescaler Reset
10
    ASSR = (1 << AS2);                    //Asynchron Mode einschalten
11
    TCCR2A = (1 << WGM21);                //CTC Modus
12
    TCCR2B = (1 << CS22) | (1 << CS21) | (1<< CS20);   //Prescaler 1024
13
    OCR2A = 128;
14
    while(ASSR & ((1<<TCN2UB) | (1<<OCR2AUB) | (1<<OCR2BUB) |  (1<<TCR2AUB) | (1<<TCR2BUB)));
15
  
16
  TIMSK2 |= (1<<OCIE2A); 
17
  GTCCR &= ~(1 << TSM);  
18
  sei();
19
  
20
  DDRB=0x01;
21

22
    while (1) {
23
//    set_sleep_mode(SLEEP_MODE_PWR_SAVE);
24
//    sleep_mode();  
25
    }
26
}
27

28
ISR (TIMER2_COMPA_vect){ //alle 4 Sekunden  
29
  if(count%2)
30
    PORTB=0x01;
31
  else
32
    PORTB=0;
33
  ++count;
34
}
Gast #7041091
Lesenswert?
• ▲
▼
Wie gesagt, das Programm, 1:1 übernommen, läuft hier, auf einem 
Steckbrett mit Standard-Fuses. Aber ich möchte auf das Datenblatt 
'Asynchronous Operation of Timer/Counter2', Unterpunkt '- If 
Timer/Counter2 is used to wake the device up from Power-save ...' 
hinweisen ("... the interrupt will not occur, and the device will fail 
to wake up").
Gast #7041168
Lesenswert?
• ▲
▼
Ah - jetzt - ja. Da hatte ich gedacht, mal eben schnell in der 
Kaffeepause ...

Also, dann wie es im Datenblatt steht, so etwas in der Art
1
OCR2A = 128;
2
while(ASSR & ((1<<TCN2UB) | (1<<OCR2AUB) | (1<<OCR2BUB) |  (1<<TCR2AUB) | (1<<TCR2BUB)));
vor das 'sleep_mode();'.

Antwort schreiben

Eine eigene Frage? Dieser Thread ist über 4 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.