Hallo, Ich würder gerne nach einem Programmdurchlauf eine Pause von 30 Minuten einfügen. Dafür eignet sich soweit ich weis der sleep mode am besten, jedoch weis ich leider nicht wie ich das in C schreiben soll, speziel für die 30 Minuten. Falls mir jemand weiterhelfen könnte wäre ich sehr erfreut. Verwende "PCW C Compiler IDE" mfg
Und wie soll er aufgeweckt werden nach 30 Minuten ? Durch einen Timer ? Was für ein µC ?
Du kannst z.B. einen Uhrenquarz an den Timer1-Osc anlöten. Damit kriegst du hin, dass der µC jede Sekunde einmal aus dem Sleep aufwacht. Die Sekunden kannst du einfach mitzählen, wenn's 1800 waren, ist die halbe Stunde um. Geht natürlich auch ohne Uhrenquarz. Dann geht aber nicht mehr der RTC-Beispielcode unverändert ;)
Ein externes Signal zum einschalten wäre in meinem Aufbau etwa unpassend. Etwas Programmtechnisches wäre angenehm.
Micro schrieb: > Ich würder gerne nach einem Programmdurchlauf eine Pause von 30 Minuten > einfügen. Dann nimm einen Timerinterrupt, die sind dafür gedacht. Micro schrieb: > Dafür eignet sich soweit ich weis der sleep mode am besten, Nö. Der Sleepmode ist zum Strom sparen bei Batteriebetrieb. Braucht man keinen Batteriebetrieb, dann besteht auch kein Grund, das Programm unnötig kompliziert zu machen. Peter
Man könnte z.B. TMR0 nehmen, mit einem 1:256 Prescaler im 16-Bit Modus. Dann eine IRQ Routine für den Timer die nichts weiter macht als das IRQ Flag des Timers zu löschen. In der Main-Schleife dann an der Stelle, wo die Pause sein soll z.B.:
1 | pause_ticks = <Anzahl der Timer-Überläufe um auf ca. 30 Sek. zu kommen> |
2 | T0CONbits.TMR0ON = 1; |
3 | |
4 | while(pause_ticks) |
5 | { |
6 | pause_ticks--; |
7 | _asm SLEEP _endasm |
8 | } |
9 | |
10 | T0CONbits.TMR0ON = 0; |
Der Zähler "pause_ticks" muss natürlich ein passender Typ sein um die benötigte Anzahl der Überläufe darstellen zu können. Zwar wacht der PIC dann bei jedem Überlauf auf, schläft dann aber schnell wieder ein da ja nur das IRQ Flag gelöscht wird und der pause_ticks Zähler um einen heruntergezählt wird (plus der Vergleich ob er dann 0 ist). Natürlich muss man vorher den Timer passend konfigurieren. Je nachdem wie genau man die 30 Sekunden treffen will muss dann halt der Prescaler und der Zählerwert angepasst werden. Grüße, Chris
Es sollen wohl 30 Minuten werden. Da kommt es vermutlich nicht auf eine Sekunde mehr oder weniger an...
Peter Dannegger schrieb: > Der Sleepmode ist zum Strom sparen bei Batteriebetrieb. Es läuft über Akku.
Peter Dannegger schrieb:
> Der Sleepmode ist zum Strom sparen bei Batteriebetrieb.
Nimm es mir nicht übel, aber wenn dass Ding 30 Minuten lang nichts
tut, sollte es so wenig Strom verblasen wie es nur irgend geht. Egal ob
Akku oder nicht.
Micro schrieb: > Es läuft über Akku. Das häätest du im übrigen gleich mit in dein erstes Posting schreiben können, besser sollen und eher sogar müssen. ;-)
Sven H. schrieb: > Es sollen wohl 30 Minuten werden. Da kommt es vermutlich nicht auf eine > Sekunde mehr oder weniger an... Ahh, stimmt, mein Fehler. Aber die Grundidee ist die gleiche. Grüße, Chris
Christian Klippel schrieb: > Aber die Grundidee ist die gleiche. Und was spricht gegen die Lösung mit dem Uhrenquarz am Timer1? Das ist kein externes Wecksignal und auch keine Uhr, nur der Quarz für <10cent. Damit kriegst du (laut Datenblatt) deine Warterei mit ~ 25 µA hin. Du must halt umdenken: Statt dem PIC zu sagen: "Warte 30 Minuten" musst du ihm 1800-mal sagen: "Warte eine Sekunde".
Εrnst B✶ schrieb: > Christian Klippel schrieb: >> Aber die Grundidee ist die gleiche. > > Und was spricht gegen die Lösung mit dem Uhrenquarz am Timer1? > > Das ist kein externes Wecksignal und auch keine Uhr, nur der Quarz für > <10cent. > > Damit kriegst du (laut Datenblatt) deine Warterei mit ~ 25 µA hin. > > Du must halt umdenken: Statt dem PIC zu sagen: "Warte 30 Minuten" musst > du ihm 1800-mal sagen: "Warte eine Sekunde". Meiner Ansicht nach? Nichts, dafür ist eine solche Funktionalität ja da. So wie man den TO aber verstehen koönnte möchte er da keine Extra-Teile verwenden: "Ein externes Signal zum einschalten wäre in meinem Aufbau etwa unpassend. Etwas Programmtechnisches wäre angenehm." Grüße, Chris
raute schrieb: > Nimm es mir nicht übel, aber wenn dass Ding 30 Minuten lang nichts > tut, sollte es so wenig Strom verblasen wie es nur irgend geht. Egal ob > Akku oder nicht. Der Sleep-Mode ist nicht dazu da, um irgendeine Aufgabe zu erfüllen. Er soll nur Strom sparen. D.h. zuerst macht man allein die Funktion des Programms. Und erst wenn alles richtig läuft, kann man auf Stromverbrauch optimieren, also den Sleep-Mode hinzufügen. Ich hab das hier mal an einem Beispiel demonstriert: Beitrag "AVR Sleep Mode / Knight Rider" Bei Netzbetieb lohnt sich der zusätzliche Programmieraufwand in der Regel nicht. Ob der MC nun 1mA oder 10µA zieht, macht sich nirgends bemerkbar. Der 7805 Spannungsregler verbraucht sogar mehr, als der MC. Bei ner 2kW Herdplatte kommt ja auch niemand auf die Idee, die Kontrollglimmlampe rauszudrehen, um Strom zu "sparen". Peter
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.