mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Frage zu Sleep Modus


Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann das so funtkionieren?
Der Controller ist ein AT90CAN128
#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

SIGNAL (SIG_INTERRUPT0)
  {
   MOTOR_Stop ();
  }


int main (void)
{
 
 // Initialize Modules
 MOTOR_Init();
 CAN_Init(); 
 sleep_enable();
 set_sleep_mode (SLEEP_MODE_IDLE);
 sei();
 DDRD |= (1 << PD0);
 PORTD |= (1 << PD0);  //Das ist der INT0-Eingang
 EIMSK |= (1 << INT0);
 EICRA |= (1 << ISC01);

 // Everything is ready, Start Main Loop
 while (1)
 {
    sleep_mode();

     }
 return 0;
  }

Beim Debuggen mit AVR Studio bleibt er immer bei sleep_mode() stehen und 
ich kann nichts mehr simulieren.

Könnt Ihr mir helfen?

Gruss Patrick

Autor: 1391 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Dann nimm den Sleep fuer den simulator raus. Der bringt dort nichts.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Und wo soll ich ihn dann hintun?

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfach auskommentieren.

Oder mit Makros vom Compilieren ausschliessen:

// #define USE_SLEEP

#include <avr/io.h>
#include <inttypes.h>
#include <stdlib.h>
#include <avr/interrupt.h>
#include <avr/sleep.h>

SIGNAL (SIG_INTERRUPT0)
  {
   MOTOR_Stop ();
  }


int main (void)
{
 
 // Initialize Modules
 MOTOR_Init();
 CAN_Init(); 
#ifdef USE_SLEEP
 sleep_enable();
 set_sleep_mode (SLEEP_MODE_IDLE);
#endif
 sei();
 DDRD |= (1 << PD0);
 PORTD |= (1 << PD0);  //Das ist der INT0-Eingang
 EIMSK |= (1 << INT0);
 EICRA |= (1 << ISC01);

 // Everything is ready, Start Main Loop
 while (1)
 {
#ifdef USE_SLEEP
    sleep_mode();
#endif
     }
 return 0;
  }

Wenn du dann vom Simulator auf die reale Hardware gehst,
dann nimmst du den Kommentar an der ersten Zeile wieder
raus, compilierst neu und die Sleep Funktionalität ist
wieder im Programm enthalten.

Autor: Patrick (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vielen Dank. Dann würde es also auf der Hardware so mit dem Interrupt 
funktionieren?

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.