Blinklicht mit sleep

Gast #99784
Lesenswert?

Naja, weil man damit "schlecht" programmiert. Zumindest für ein
Blinklicht. Das sollte man immer mit einem Timer machen. Bibliothek
braucht du für sleep gar keine. geht ja so:

while(...)
 asm volatile "nop";

Für die Ports die <io.h>

MfG Torsten
Gast #99785
Lesenswert?

Hallo

sleep, beim aktuellen gcc, geht zB so:
MCUCR = _BV(SE); // sleep enable
set_sleep_mode(SLEEP_MODE_IDLE);
sleep_mode();
Aufwachen kann man mittels Interrupt (zB Timer oder extern). Es steht
aber alles in der libc Beschreibung (evtl. da
C:\WinAVR\doc\avr-libc\avr-libc-user-manual-1.0.3.pdf)

Gruss
Christian
Gast #99788
Lesenswert?

Hallo Thorsten

Klappt das mit dem Sleep doch nicht so. Grins

Spaß beiseite. Wo hängst du denn ?

Es gibt soviele Möglichkeiten LEDs zum blinken zu bekommen.

1. Blinkleds    Port auf High und die Dinger blinken ( Grins )

2. Delays   Rechenzeit in einer Schleife verbraten, nicht so
geschickt.

3. Timer  schöne Möglichkeit, ist auch nicht so schwer

Sag mal wo es klemmt und welchen uC mit welchem Takt du verwendest.
Und an welchem Port die LED angeschlossen wird, dann schauen wir mal.

MFG
Dieter
Gast #99789
Lesenswert?

Normalerweise nimmt man dafür den WDT.
Ich benutze den als Blinklicht so: Nach dem Start von main nach init()
in den Sleep-Mode (LPM3 beim MSP430) und die sekündlich aufgerufene
WDT-ISR macht das Blinken (1 Pin auf high schalten). Dabei wird der WDT
von 1s-Intervall auf 1/512 s -Intervall umgeschaltet und nach dem 1/512
s-Intervall wird wieder auf low und 1s-Intervall umgeschaltet.
Dadurch verbraucht der MC durchschnittlich weniger als 3 uA, also
weniger als 1/1000 dessen, was die LED verbraucht.
Gast #99790
Lesenswert?

Das "normalerweise" möchte ich relativieren: Für eine z.B.
Alarmanlagenimitation ist das eine perfekte Lösung in Bezug auf
Stromverbrauch, wenn es um genaues Timing geht versagt diese Methode.

Ich denke bei den meisten Anwendungen wird das Timing wichtiger als der
Stromverbrauch sein. Es kommt natürlich auch auf das gewünschte
Gesamttiming an. Im Minutenbereich würde sich auch sleep mit externem
Interrupt durch einen RTC-Baustein anbieten (damit kommt man dan auch
auf wenige uA Stromverbrauch).

@Thorsten:
spezifiziere doch deine Rahmenparameter etwas genauer, dann werden sich
auch Lösungen finden.

grüsse leo9
Gast #99791
Lesenswert?

Der WDT ist beim MSP430 mit einem 32768 Hz Quarz getaktet; da stimmt das
Timing quarzgenau.
Man kann da auch Sekunden mit einem 64-Bit-Int zählen und so richtig
lange Wartezeiten programmieren, aber die Uhrenquarze haben ohne
Kalibrierung eine Ungenauigkeit von einigen Sekunden pro Tag.
Gast #99798
Lesenswert?

@leo9: Das ist kein Standard-C und wird von Prettyprintern wie indent
häufig kaputt gemacht.
Deshalb sind auch Assembler-Makros in Include-Dateien problematisch.
Die saubere Lösung sind getrennte Dateien für Assembler u. C.

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