Hey, also ich hab nur eine kurze Frage, ob ich mir das richtig Vorstelle wie ich es in C Umsetze: Ich will eine Lampe z.b. 8h lang leuchten lassen, aber wenn ich per Interrupt einen Schalter umlege, soll die Lampe an sein, egal was ist. Wenn er wieder umgelegt wird, soll die restliche Zeit bis zu 8h weiterlaufen. Nun dacht ich mir ich nehm eine _delay_ms Schleife mit 1ms und lass es laufen. Und wenn ich dann Abbreche, speichert es den Wert in einer globalen Variablen. Die ich bei zurücklegen wieder nehme und die restlichen Durchläufe nehme. Ist das so die beste Lösung, oder habt ihr zufällig bessere Ansätze dafür? Danke, Lg Niine
Niine schrieb: > Nun dacht ich mir ich nehm eine _delay_ms Schleife mit 1ms und lass es > laufen. Und wenn ich dann Abbreche, speichert es den Wert in einer > globalen Variablen. Was willst du da speichern? > Ist das so die beste Lösung, oder habt ihr zufällig bessere Ansätze > dafür? Interrupt braucht es doch gar nicht dafür. Wenn deine Hauptschleife eine Durchlaufdauer von ca. 1ms hat, dann ist das schnell genug, dass du da drinnen auch einen Schalter abfragen kannst. Dein Konzept hat noch einen wunden Punkt: wie startest du die 8 Stunden? Ich geh mal davon aus, dass die 8 Stunden nach dem Einschalten des µC laufen sollen
1 | Sekunden = 8L * 60L * 60L; // 8 stunden als Sekunden ausgedrückt |
2 | Millisekunden = 0; |
3 | Schaltausgang auf ein; |
4 | |
5 | while( 1 ) { |
6 | |
7 | if( Schalter auf aus ) { // d.h. die Uhr soll zählen |
8 | Millisekunden++; |
9 | if( Millisekunden == 1000 ) { |
10 | if( Sekunden > 0 ) { |
11 | Sekunden--; |
12 | if( Sekunden == 0 ) |
13 | Schaltausgang auf aus; |
14 | } |
15 | } |
16 | } |
17 | |
18 | _delay_ms( 1 ); |
19 | } |
Die Zeit wird nicht ganz genau stimmen. Wenn es genauer sein soll, müsste man einen Timer im CTC Modus benutzen und den auf den Quarz einstellen, so dass man exakte Zeitpulse kriegt und nicht nur ungefähres, so wie mit _delay_ms
Hallo kbuchegg, danke für deine Tipps. Werde es so umsetzen. Die 8 Stunden sollen nicht genau sein. Geht darum eine LED Aquariumlampe zu steuern, so mit Sonnenaufgang, -untergang per PWM für die Fische zu machen. Das An und Ausschalten übernimmmt eine Zeitschaltuhr, da eine direkte Uhr mit zu implementieren würde mein Projekt sprengen. Also quasi so An -> Sonnenaufgang 15min -> 12h Anbleiben 100% -> Sonnenuntergang 15min -> Aus - Fertig und wenn Aus und An geht, geht das Spiel von vorn los. Von daher ist es jetzt nicht so schlimm wenn es 12h 35min anbleibt. Danke nochmal. Lg Niine
Niine schrieb: > Das An und Ausschalten übernimmmt eine Zeitschaltuhr, da eine direkte > Uhr mit zu implementieren würde mein Projekt sprengen. Na ja. So schwer ist das auch wieder nicht. An den µC kommt ein Quarz, damit du eine einigermassen stabile Zeitbasis hast und fürs erste reicht das schon. Wenn man die Uhr alle paar Monate mal nachstellt, ist das ja nicht weiter schlimm. Und da Stromausfälle bei uns eher selten sind, ist das auch kein Drama, wenn man danach die Uhr einstellen muss. Dann sollte allerdings ein LCD mit rann und ein paar Taster, damit man die Zeiten auch alle einstellen kann. So gesehen ist das dann schon aufwändiger.
Karl Heinz Buchegger schrieb: > Na ja. > So schwer ist das auch wieder nicht. An den µC kommt ein Quarz, damit du > eine einigermassen stabile Zeitbasis hast und fürs erste reicht das > schon. Wenn man die Uhr alle paar Monate mal nachstellt, ist das ja > nicht weiter schlimm. Und da Stromausfälle bei uns eher selten sind, ist > das auch kein Drama, wenn man danach die Uhr einstellen muss. Weil ich sie gerade in einem anderen Thread gesehen habe http://www.avr-projekte.de/tinyclock.htm Die Temperatur musst du ja nicht bestücken. Auf der anderen Seite, warum nicht. Und ein Pin für die Beleuchtung ist auch noch fei.
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.