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
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
Wieso die sleep Funktion hört sich doch viel einfacher an. Oder gibt es da irgendwelche Probleme
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
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
Hat jemand schon ein Blinklicht programmiert und kann mir jemand den Quelltext dazu schicken
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
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.
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
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.
@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
#asm start: sbi PORTB, 0 cbi PORTB, 0 rjmp start #endasm ... und schon ist es c-Code ;-)
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
@Dieter Atmega8 und 4MHz habe ich 4 sec. an und 4 sec. aus. Rechnung falsch!???? oder????
@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.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.