avr sleep m328p

OP #3876472
Lesenswert?
• ▲
▼
Hallo,

ich habe vor, meinen Atmega328P mit 16MHz Resonator, jede Sekunde einmal 
kurz aufzuwecken. Später soll die Resonsatorfrequenz noch niedriger 
gewählt werden (<8MHz). Habe derzeit aber nur 16 und 20MHz Resonatoren 
hier rumliegen.
Ich habe mich für den Resonator entschieden, da der interne Oscillator 
scheinbar doch recht "lange" braucht, bis er startet. (siehe 
"Morgenmuffel" unter http://www.mikrocontroller.net/articles/Sleep_Mode)

*SUT_CKSEL = EXTXOSC_8MHZ_XX_1KCK_14CK_4MS1*

EXTENDED = 0xFF (valid)
HIGH = 0xD7 (valid)
LOW = 0xFE (valid)

Nur habe ich das Problem, dass meine Led ganz komisch angesteuert wird 
(6kHz) (siehe Anhang).

Gleiches konnte ich auch feststellen, als ich in der ISR einen Wert 
immer um 1 erhöhen ließ. Der Wert ging rasant nach oben.

Womit hängen diese Probleme zusammen?

Der µC soll in einer bestimmten Zeit mehrmals aufgerufen werden. 
Hauptsächlich zum Überprüfen, ob ein Wert wahr ist (Alarm), wenn nicht, 
darf er sich wieder hinlegen. Das ganze wird ein Wecker, welcher auch 
ohne externe Spannungsversorgung funktionieren soll. (Nicht dauerhaft, 
aber min 1-2 Nächte, große Batterien fallen weg).

Der externe Interrupt kommt von einem DS3231 welcher mit einem PullUp an 
PD2 verbunden ist. Frequenz steht auf 1Hz.
1
#include "main.h"
2
#include <avr/sleep.h>
3
#include <avr/interrupt.h>
4

5
ISR(INT0_vect)
6
{
7

8
}
9

10
int main(void)
11
{
12
  ACSR = 0x80;            // Analogcomparator ausschalten
13
  MCUCR |= (1<<ISC01) | (1<<ISC00);  // Positive Flanke
14
  DDRD &= ~(1<<2);          // INT0
15
  DDRD |= 1<<4;            // Debug LED
16
  
17
  sei();                // Interrupts freigeben
18

19
  while(1)
20
  {
21
    EIMSK  |= (1<<INT0);      // externen Interrupt freigeben
22
    
23
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
24
    sleep_mode();          // in den Schlafmodus wechseln
25
    
26
    EIMSK &= ~(1<<INT0);      // externen Interrupt sperren
27
    PORTD ^= 1<<4;          // Debug LED togglen
28
  }
29
  return 0;
30
}

Edit:
1.PNG zeigt oben externen Interrupt, und unten die Led. In 2.PNG habe 
ich das Signal der LED vergrößert, da diese nicht darstellbar war mit 
dem externen Interrupt zusammen.
Angehängte Dateien:
OP #3876496
Lesenswert?
• ▲
▼
Georg G. schrieb:
> Die Bits ISC00 und ISC01 liegen nach meinem Datenblatt aber nicht im
> MCUCR sondern im EICRA.

Hätte ich mir den Beitrag fast sparen können :) So gehts direkt. Hatte 
zwischenzeitig auch bereits den EICRA genommen gehabt. Hab den wohl 
irgendwann wieder umbenannt, da überall MCUCR genannt wurde. Hab auf 
Anhieb nicht die passenden Register gesehen im DB.

Mal eine andere Frage nebenbei. Gibt es, ausser alle DB durch zugehen, 
heraus zu finden, wie sich die Register bei den unterschiedlichen AVR 
(Atmel 8Bit) nennen? Hatte zB auch GICR überall nur gefunden, die es 
beim 328p natürlich nicht gibt.
#3876935
Lesenswert?
• ▲
▼
Stefan S. schrieb:
> Ich habe mich für den Resonator entschieden, da der interne Oscillator
> scheinbar doch recht "lange" braucht, bis er startet. (siehe
> "Morgenmuffel" unter http://www.mikrocontroller.net/articles/Sleep_Mode)

Der interne Oszillator, von dem in diesem Artikel die Rede ist, ist der 
Oszillator mit externem Quarz. Der interne RC-Oszillator schwingt 
mindestens genauso schnall an, wie der Oszillator mit externem 
RC-Resonator.

Stefan S. schrieb:
> Hatte zB auch GICR überall nur gefunden, die es
> beim 328p natürlich nicht gibt.

GICR haben die alten Megas(z.B. Atmega8)
Die neueren haben stattdessen EICRA und EIMSK. Sowie andere Funktionen 
im MCUCR.

mfg.

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.