Forum: Mikrocontroller und Digitale Elektronik sleep-Mode Dauer


von Jan Hofer (Gast)


Lesenswert?

Guten Morgen,

ich habe hier einen Code vorliegen, welcher 5 Sekunden lang alle 0,5 
Sekunden eine bestimmte Aktion durchführen soll (ist ein Radiomodul, das 
Signale aussendet). Jetzt krieg ich aber am Empfänger nur jede Sekunde 
ein Signal und das Problem ist, dass ich nicht weiß, wie und wo ich 
diese Zeit verkürzen kann. Im Code ist u.a. folgendes zu finden:
1
  cli();
2
  //RTC Intterupt aktivieren
3
  PCMSK2|=(1<<PCINT22);
4
  PCICR |=(1<<PCIE2);
5
  LED1 (LED_OFF);
6
  sleep_enable();
7
  sei();
8
  sleep_cpu();
9
  sleep_disable();

Ich glaube, dass die Zeit ja damit zusammenhängt. Nur woher weiß ich, 
wie lange der µc in den sleep-Modus geht? Und dazu muss ich doch auch 
wissen, welche Abarbeitungsfrequenz von Code der µc hat, oder? Wie kann 
ich denn das rausfinden?

Vielen Dank!
Grüße
Jan

von Peter D. (peda)


Lesenswert?

Jan Hofer schrieb:
> Im Code ist u.a. folgendes zu finden:
>   cli();
>   //RTC Intterupt aktivieren

Dann solltest Du mal im dazugehörenden RTC-Code suchen.


Peter

von Jan Hofer (Gast)


Lesenswert?

An welcher Stelle im oben gezeigten Code wird denn dieser Interrupt 
aufgerufen?
Also mir ist das Ganze mit den Interrupts leider eh noch nicht so ganz 
klar. Das wird doch benutzt, um den µc aus dem Schlafmodus zu holen, nur 
eben an welcher Stelle ist mir irgendwie nicht klar. Sollte da dann 
irgendwo im Code "ISR ....." oder so zu finden sein?

Danke
Gruß
Jan

von Peter II (Gast)


Lesenswert?

Jan Hofer schrieb:
> Das wird doch benutzt, um den µc aus dem Schlafmodus zu holen, nur
> eben an welcher Stelle ist mir irgendwie nicht klar. Sollte da dann
> irgendwo im Code "ISR ....." oder so zu finden sein?

nicht zwingend, der aufwachen wird ja eventuell von "aussen" gemacht. 
Dafür muss ja kein code ausgeführt werden.

von Lutz (Gast)


Lesenswert?

Vermutlich wird die RTC den Schlaf beenden. Also nach den dortigen 
Interrupts suchen. Das kannst aber nur du wissen ...

von Jan Hofer (Gast)


Lesenswert?

Wo finde ich denn den RTC-Code?

von Lutz (Gast)


Lesenswert?

Ist doch jetzt nicht ernst gemeint, oder? Woher sollen wir denn wissen, 
welchen code du wo hast?

von Karol B. (johnpatcher)


Lesenswert?

Du solltest dich vielleicht noch einmal vernünftig mit dem Konzept der 
Interrupts beschäftigen. Das ist ein sehr universelles Konzept ohne 
welches du in der Welt der (Mikro-)Controller nicht sehr weit kommen 
wirst.

Das wird doch in beiden Tutorials hier 
(http://www.mikrocontroller.net/articles/AVR-Tutorial:_Interrupts) und 
hier 
(http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Interruptgesteuerter_Programmablauf) 
erläutert. Auch die Wikipedia enthält einen brauchbaren Artikel dazu, 
siehe hier (http://de.wikipedia.org/wiki/Interrupt).

von Falk B. (falk)


Lesenswert?

Siehe Interrupt

von Jan Hofer (Gast)


Lesenswert?

Danke schonmal für die Links, gibts denn so einen Tutorialeintrag, in 
dem man mal ein bisschen Code sehen kann auch für C?

Gruß

von tiny (Gast)


Lesenswert?

Zur Beantwortung dieser Frage währe ein Schaltbild und der komplette 
code enorm hilfreich. Der Codeschnipsel sagt nur aus, dass es sich um 
einen interrupt handelt, nicht jedoch um welchen.

Sollte es sich um einen externen interrupt von einer RealTimeClock 
handeln (was der Kommentar mit "RTC" nahelegt), ist diese für die 
Häufigkeit verantwortlich. Dann könnte man den Mikrocontroller mit 
_delay_ms(500) statt mit sleep_cpu() für jeweils eine halbe Sekunde 
warten lassen.

von Thomas E. (thomase)


Lesenswert?

tiny schrieb:
> Der Codeschnipsel sagt nur aus, dass es sich um
> einen interrupt handelt, nicht jedoch um welchen.
Das sagt der schon aus: Pinchangeinterrupt2.
> Sollte da dann
> irgendwo im Code "ISR ....." oder so zu finden sein?
Ja.
ISR(PCINT2_vect)
{
}
> Nur woher weiß ich,
> wie lange der µc in den sleep-Modus geht?
Von irgendwoher wird er aufgeweckt. Und wenn er alle 0,5s geweckt wird, 
macht er auch alle 0,5s was.
Erstmal schmeisst du den Sleepmode komplett raus und testest das 
Programm ohne. Dann siehst du, ob die Intervalle beim Sender im 
richtigen Abstand kommen und der Empfänger entsprechend reagiert.

mfg.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.