sleep-Mode Dauer

Gast #2696915
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
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
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.
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
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.
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

Eine eigene Frage? Dieser Thread ist über 14 Jahre alt. Stell sie in einem eigenen Thread – dort lesen mehr Leute mit, und sie wird öfter und schneller beantwortet.

Neuen Thread starten

Eine Lösung, Ergänzung oder Rückmeldung zu diesem Thread? Dann antworte hier.

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.