www.mikrocontroller.net

Forum: Compiler & IDEs Blinklicht mit sleep


Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Kann ich den sleep Befehl benutzen um ein Lämpchen blinken zu lassen.
Wenn ja welche Biliothek muss ich dann einbinden (zB.:
#include<avr/io.h>.
Wenn das nicht mit dem sleep Befehl geht, wie kann ich das dann lösen

Autor: Dieter B (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Les dir das erstmal durch.

Slepp ist für den Anfang nicht so ganz geeignet.

http://www.mc-project.de/

http://www.mikrocontroller.net/articles/c/

MFG
Dieter

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wieso die sleep Funktion hört sich doch viel einfacher an. Oder gibt es
da irgendwelche Probleme

Autor: Torsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Christian (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Nachtrag: #include <avr/sleep.h>

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hat jemand schon ein Blinklicht programmiert und kann mir jemand den
Quelltext dazu schicken

Autor: Dieter B. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rolf F. (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Atmega 8 von Atmel mit 4MHz. Das Licht ist an PB0 angeschlossen

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@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

Autor: Thorsten (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das ist assembler möchte aber in C programmieren

Autor: leo9 (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
#asm
start:
sbi     PORTB, 0
cbi     PORTB, 0
rjmp    start
#endasm

... und schon ist es c-Code ;-)

Autor: Dieter B (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Thorsten

Hier mal ein kleines C Pro. zum blinken lassen der LED.

Verwendet wird TIMER0 .

Schau mal rein und frage, falls was unklar ist.

MFG
Dieter

Autor: Cen (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Dieter

Atmega8 und 4MHz habe ich 4 sec. an und 4 sec. aus. Rechnung
falsch!???? oder????

Autor: nobody0 (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.