sleep-Mode Dauer

Gast #2696915
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
Gast #2696963
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
Gast #2696967
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.
#2697029
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).
Gast #2697621
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.
#2697654
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren