www.mikrocontroller.net

Forum: Compiler & IDEs Sleept Modus startet nicht


Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo, ich habe folgendes Problem. Ich möchte die Sleep Funktion meines 
Crumb 168 (mit AtMega168) testen. Habe hierzu das Bsp programm aus der 
Sleep.h angepasst.
#define F_CPU 8000000ul
#include <avr/io.h>
#include <util/delay.h>  
#include <avr/interrupt.h>
#include <avr/sleep.h>

int main(void)
{
int i = 0;
DDRB = (1 << DDB2);
DDRC = (1 << DDD2);
PORTD = 0xff;
for(;;)
  {
  PORTB ^= (1<<PB2);  //toggel LED
  _delay_ms(1500);
  i++;
  set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    cli();
    if (i == 3)
      {
      sleep_enable();
      sei();
      sleep_cpu();
      sleep_disable();
      }
      sei();
  }
return 0;
}

Leider hört die LED am Pin B2 nicht auf zu blinken. Oder wird dieser 
Sleep Modus sofort wieder beendet, sodas man dies nicht mitbekommt. Auch 
beim Strom kann man nix davon sehen. Im Datenblatt steht, das der µC 
anhält und dann per INT 0 oder 1 erst wieder gestartet werden kann.
Kann mir jemand nen Tip geben, was ich falsch mache.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Karl schrieb:
> Habe hierzu das Bsp programm aus der
> Sleep.h angepasst.

Dieses Beispielprogramm soll nur die Funktion der getrennten
Sleep-Makros erläutern.  Die brauchst du für deinen Zweck
gar nicht.

> DDRB = (1 << DDB2);
> DDRC = (1 << DDD2);

DDD2 gehört aber nach DDRD, nicht nach DDRC. ;-)

Ich würde das einfach so schreiben:
#define F_CPU 8000000ul
#include <avr/io.h>
#include <util/delay.h>  
#include <avr/interrupt.h>
#include <avr/sleep.h>

int main(void)
{
  int i = 0;
  DDRB = (1 << DDB2);

  for(;;)
  {
    PORTB ^= (1<<PB2);  //toggel LED
    _delay_ms(1500);
    i++;
    set_sleep_mode(SLEEP_MODE_PWR_DOWN);
    if (i == 3)
         sleep_mode();
  }
  return 0;
}

Beachte, dass du derzeit rein gar nichts definiert hast, was den
Prozessor wieder aus dem Schlaf aufweckt.  Außerdem wird die
CPU mit PB2 = low angehalten aber mit aktivem Ausgang.  Falls
deine LED low-aktiv ist, wird sie also weiterhin Strom ziehen.
Die offenen Eingänge der anderen Pins können u. U. auch recht
viel Stromverbrauch verursachen.

Autor: Karl (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Viele dank für die Antwort. Kann man nicht die Eingänge  INT 0 und INT 1 
zum beenden des Sleep Modus nutzen? Dies soll das Programm für einen 
Ladeprozess sein und dann über eine OPV schaltung an den INT 0 oder 1. 
Oder kann man auch intern eien ADC aktiv lassen, der dies dann alle 5 
min überprüft?

Mit dem Power Down Modus möchte ich dann im normalen einsatz die PWM´s 
von PB1 und 2 und 2 ADC´s abschalten. Gibt es eigentlich eine 
Möglichkeit im Sleep Modus die LED und offenen Eingänge abzuschalten?

Autor: Falk Brunner (falk)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@  Karl (Gast)

>Viele dank für die Antwort. Kann man nicht die Eingänge  INT 0 und INT 1
>zum beenden des Sleep Modus nutzen?

Kann man, siehe Sleep Mode.

>von PB1 und 2 und 2 ADC´s abschalten. Gibt es eigentlich eine
>Möglichkeit im Sleep Modus die LED und offenen Eingänge abzuschalten?

Logisch. Einfach auf LOW oder HIgh legen bzw. interne Pull-Ups 
einschalten.

MFg
Falk

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]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [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.