Blinklicht mit sleep

Gast
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
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
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
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
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
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
@Rolf:
Sorry, bin wohl etwas "avr geschädigt"; da ist der WDT deutlich
ungenauer.

@Thorsten:
start:
sbi     PORTB, 0
cbi     PORTB, 0
rjmp    start
blinkt halt mit ca. 40kHz

grüsse leo9
Gast
@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

Eine eigene Frage? Dieser Thread ist über 22 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.