Hallo:),
könntet ihr bitte mal drüber schauen was ich noch an der WakeUp Time
(zeit in dem der µC aufgeweckt ist und was tut) verbessern kann (je
kürzer desto besser).
Und ob ich noch Sachen abstellen kann um noch weniger Energie zu
brauchen.
Es soll ein Reaktiv Licht werden, wenn man es im Dunkeln anleuchtet soll
es Blinken. Die Blink Wiederholungen und Dauer sollen gleich bleiben
genau so wie die Wakeups alle 0.5 Sec zum checken des Lichtsensors.
Stefan A. schrieb:> je> kürzer desto besser
dann verzichte auf float
#define ADC_SAMPLES 3
adc_in = adc_in / ADC_SAMPLES;
Division durch 3 ist für die CPU recht schwer, bei 4 hätte er es viel
leichter.
Peter II schrieb:> Stefan A. schrieb:>> je>> kürzer desto besser>> dann verzichte auf float>> #define ADC_SAMPLES 3> adc_in = adc_in / ADC_SAMPLES;>> Division durch 3 ist für die CPU recht schwer, bei 4 hätte er es viel> leichter.
Aber dann misst er ja 4 mal, weis nicht ob das 1 mal mehr messen nicht
mehr zeit / energie verbraucht als 3 mal.
Hallo,
wie gut funktioniert es denn bis jetzt?
Weil: wie bekommst Du den ADC aufg 1024? mehr als 1023 kann der doch
garnicht.
Wozu der float-Kram?
Warum 3x messen? 2 oder 4x mal messen und die Divison als rechts
schieben ist in jedem Fall schneller als eine float-Rechnung.
Woher weiß das programm eigentlich, ob es heller Tag ist oder ob es
angeleuchtet wird?
Gruß aus Berlin
Michael
Michael U. schrieb:> Woher weiß das programm eigentlich, ob es heller Tag ist oder ob es> angeleuchtet wird?
1
if(adc_dev>DEVIATION&&adc_in>DARKVAL)
Er checkt den ADC wert, wenn er über 40 ist, ist es dunkel.
Wenn die letzte Messung > +/-5 ist erkennt er das er angeleuchtet wird.
In der Nacht wird denke innerhalb von 0.5 Sec das Licht sich nicht so
schnell verändern das er aus versehen auslöst.
Ich habe die Float durch Int ersetzt und mache nur noch 1 ADC
Auswertung.
Kann ich noch was tun?
Mach Dir keine Gedanken wegen dem bisschen Zeit, die der ADC länger
misst, oder wegen der Division durch 3 oder durch 4. Das spielt in der
Praxis keine Rolle. Bei meinem Nachtcache hängen auch zwei
Reaktivlichter im Wald, und der Batterieverbrauch verursacht dabei die
geringsten Kopfschmerzen. Mit einem Satz Batterien (2xAA) komme ich
locker drei Jahre aus. Ja, auch über den Winter.
Weil der Nachtcache sowieso am Tag nicht gesucht werden soll, habe ich
einen Tag- und einen Nachtmodus. In der Nacht wird alle 250 ms geschaut,
ob jemand leuchtet (d. h. ob die Helligkeit deutlich höher ist als bei
der letzten Messung). Am Tag schaue ich nur alle 8 Sekunden nach, ob es
inzwischen schon wieder Nacht ist. Den Durchschnittsverbrauch (ohne
LED-Blinken) habe ich auf knapp über 4 µA senken können. Rein
rechnerisch würde das bei einer Kapazität von 2 Ah über 50 Jahre
reichen, aber in der Praxis machen die Batterien schon die
Selbstentladung früher schlapp. Aber daran sieht man, dass es wenig Sinn
hat, hier das letzte Mikroampere herausoptimieren zu wollen.
Natürlich sieht die Sache etwas anders aus, wenn man eine Knopfzelle als
Stromquelle nimmt, aber Lithiumzellen möchte ich im Wald nicht
aufhängen, wenn ich nicht weiß, ob nicht irgendwann ein Harvester kommt
und die Zelle zermalmt (das ist bei meinem Nachtcache mal passiert).
Ich kann heute abend mal meinen Sourcecode rauskramen und hier
reinstellen (allerdings für einen ATtiny13), wenn Du Interesse hast.
Momentan habe ich nichts dabei.
Ja kannst du gern machen :)
Ich will das mit einer CR2032 betreiben und soll eine Boje / Marker für
Angler sein die nachts kurz mit der Taschenlampe über den See leuchten
und so erkenne könne wo ihre Marker liegen.
Das ganze hat in einem kleine PETling platz.
Hier der aktuelle code mit Änderungen:
- 4µA im Power Down
- 10µA währen Wakeup mit ADC Messung
Hallo,
du könntest die AD-Wandlung auch noch wärend des SLEEPs machen. Siehe
ADC-Noise-Reduction (gibts denke ich bein tn85 auch). Auch zum Blinken
kannst du einen Timer nehmen und noch ins Sleep gehen. Und noch paar
Takte kannst du sparen wenn du die Register direkt beschreibst anstatt
mit OR / UND-NICHT.
Sascha
Hi,
wo stehst Du denn im Stromverbrauch?
Hast Du alle Tipps aus den einschlägigen Low-power-Appnotes umgesetzt?
Zu einer LP-Anwendung gehört natürlich auch der passende
Schaltungsaufbau.
MCU Eingangsstufen brauchen mehr Strom, wenn sie nicht an den
Power-Rails hängen.
Das kannst Du entweder durch Zuschalten der PU/PD-Widerstände oder, man
vergisst das gerne mal, durch Schalten von ungenutzten IOs als Ausgang
erreichen.
Wo kommt der Takt her? Sind 8MHz notwendig? Kannst Du den internen
128kHz Oszillator nehmen?
Ein Tiny kommt bei Zimmertemperatur relativ einfach in den Bereich 200nA
- siehe diese Spielerei:
http://www.harerod.de/applications_ger.html#TQ10_melody
Es gibt einen optimalen, anwendungsabhängigen Punkt aus MCU-/ADC-Takt
und Stromverbrauch.
Wenn Dir der WDT zuviel Saft zieht, dann könntest Du ggf. eine externe
Reset-Schaltung anschrauben: seeeehr hochohmiges RC-Glied, welches einen
Interrupt auslöst. Hat aber die o.g. genannten Nachteile, daher ggf. was
zum ausprobieren. Evtl, hilft ein Einzelgatter-Schmitt-Trigger.
Der ADC kann, wie bereits erwähnt wurde, als Wake-Up-Quelle dienen. Das
würde den WDT sparen. Allerdings ist das bei Deinem
Schlaf/Aktiv-Verhältnis nicht wirksam.
Die stromsparendsten AVRs heißen übrigens PIC. Da ist nochmal ein Faktor
10 in der Stromaufnahme drin. Witzig ist, dass bei den ganz kleinen MCUs
die Dinger manchmal pinkompatibel sind.
Oder, falls eine bayerische Lösung zulässig ist: MSP430
Cheerio,
marcus
> Ein Tiny kommt bei Zimmertemperatur relativ einfach in den Bereich 200nA
Wie geht das z. B. beim ATiny13a?
> Die stromsparendsten AVRs heißen übrigens PIC. Da ist nochmal ein Faktor> 10 in der Stromaufnahme drin
20 nA? Da ist ja der helle Wahnsinn. Welcher PIC wären das?
PowerReductionRegister (PRR)wirklich ALLES aus machen.
Den ADC nur einmal initialisieren reicht, nach oben vor die While1
legen.
ADC Noise reduction slepp mode wurde schon genannt. Takt deutlich
senken.
float raus, wurde acuh schon gesagt. Hannes Lux fragen, bei ihm
nachsehen und in asm programmieren? könnte ja auch was bringen, obwohl
die C Compiler heuzutage schon echt gut sind. Immer zweierpotenzen zum
rechnen verwenden und beim 8Bit Wertebereich bleiben.
Bitte nicht wieder "Schleichwerbung" schreien, aber auf Deine Fragen
sind zwei Antworten auf meiner Website, eine hatte ich schon genannt:
Kibon schrieb:
MAH>> Ein Tiny kommt bei Zimmertemperatur relativ einfach in den Bereich
200nA
Kibon> Wie geht das z. B. beim ATiny13a?
http://www.harerod.de/applications_ger.html#TQ10_melody
Gemäß der o.g. Checkliste. Man beachte die Einschränkung
"Zimmertemperatur". Die Leckströme gehen üblicherweise exponentiell mit
der Temperatur hoch.
Assembler ist in dem Fall nicht schädlich, aber kein Muss.
Ah, vielleicht war meine Aussage zu salopp formuliert und wir haben
Betrieb und Sleep vermischt.
MAH>> Die stromsparendsten AVRs heißen übrigens PIC. Da ist nochmal ein
Faktor
MAH>> 10 in der Stromaufnahme drin
Kibon> 20 nA? Da ist ja der helle Wahnsinn. Welcher PIC wären das?
Das geht mit so ziemlich jedem alten PIC.
http://www.harerod.de/applications_ger.html#allTimer
Diese Baugruppe braucht üblicherweise keine 20µA im Betrieb (inkl.
LCD-Ansteuerung), die MCU ist im Sleepmode mit 500nA spezifiziert.
Marcus H. schrieb:> Bitte nicht wieder "Schleichwerbung" schreien, aber auf Deine Fragen> sind zwei Antworten auf meiner Website, eine hatte ich schon genannt:>> Kibon schrieb:> MAH>> Ein Tiny kommt bei Zimmertemperatur relativ einfach in den Bereich> 200nA> Kibon> Wie geht das z. B. beim ATiny13a?> http://www.harerod.de/applications_ger.html#TQ10_melody
Wie geht das? Da stehen nur Texte die das Projekt beschreiben.
Hab da noch was gefunden :)
muss ich nur noch bisschen umbauen für mich.
Hier wird der ADC im Sleep modus gemessen.
http://gammon.com.au/forum/?id=12769
Du könntest auch zwei großflächigere Lichtsensoren, also Fotodioden
kaufen. Habe ich z.B aus dem Conrad.
Die könntest du beide gegen 50 MOhm an den INT Pin hängen. Die Spannung
reicht dann, um den PIN "ordentlich" zu setzen. Da der Int-Pin nur mit
Low den uC aus dem Power-Down holen kann, musst du Tags und Nachts den
entsprechend gepolte Fotodiode zuschalten. So bekommst du immer deine
Flanken. Ganz ohne Timer... okay, in der Übergangszeit muss man
irgendwie entprellen...
Hm, mit zwei Fotodioden braucht man auch gar keinen Kontroller mehr, nur
noch einen Schmidt Trigger...
Beide Sensoren schauen leicht versetzt aus dem Gehäuse...
Logik:
Helligkeit annähernd gleich: hell, dämmert oder dunkel. Tu nichts
Helligkeit stark abweichend: Taschenlampe, NE555 Schaltung aktivieren =
LED blinken....
Aber war nicht die Frage.... ich weiß :D
Edi_r schrieb:> Ich kann heute abend mal meinen Sourcecode rauskramen und hier> reinstellenStefan A. schrieb:> Ja kannst du gern machen :)
Gestern hat es nicht mehr geklappt, aber jetzt.
Schaltplan und Sourcecode sind angehängt. Als LDR habe ich einen A
905014 genommen (gibt's unter dieser Bezeichnung z. B. bei Reichelt).
Meine Schaltung hängt im Wald und wird nachts von Geocachern gesucht.
Wenn sie angeleuchtet wird, dann blinkt sie. Es gibt zwei Ausführungen:
eine mit einer roten und eine mit einer grünen LED. Eine weiße Version
war mal geplant, aber nicht umgesetzt. Die verschiedenen Versionen
blinken unterschiedlich oft.
Stefan A. schrieb:> Ich will das mit einer CR2032 betreiben und soll eine Boje / Marker für> Angler sein die nachts kurz mit der Taschenlampe über den See leuchten> und so erkenne könne wo ihre Marker liegen.> Das ganze hat in einem kleine PETling platz.
was spricht dagegen sie einfach alle 5 oder 10 Sekunden einmal blinken
zu lassen ? Du weist doch das wir nachts nicht auf das Wasser leuchten
sollen :-). ICh habe sowas mal mit Ü-Eiern gemacht, die konnte man auch
gleich als Swinger/ Hanger benutzen. Dann natürlich mit Dauerlicht.
Stephan H. schrieb:> Stefan A. schrieb:>> Ich will das mit einer CR2032 betreiben und soll eine Boje / Marker für>> Angler sein die nachts kurz mit der Taschenlampe über den See leuchten>> und so erkenne könne wo ihre Marker liegen.>> Das ganze hat in einem kleine PETling platz.>> was spricht dagegen sie einfach alle 5 oder 10 Sekunden einmal blinken> zu lassen ? Du weist doch das wir nachts nicht auf das Wasser leuchten> sollen :-). ICh habe sowas mal mit Ü-Eiern gemacht, die konnte man auch> gleich als Swinger/ Hanger benutzen. Dann natürlich mit Dauerlicht.
Weil ich gern so lange Laufzeit wie möglich haben will :).
Die Batterien sind zwar billig aber trotzdem nicht gut für die Umwelt.
Ich würde fast erwarten, dass mit einer Taschenlampe ableuchten eine
ganze Menge Strom verbraucht. Die haben ja einige Watt. Das musst du für
eine Umweltbilanz eigentlich gegenrechnen.
Soll wirklich kein Genöle sein, aber manchmal verrennt man sich ja auch.
Stefan A. schrieb:> Weil ich gern so lange Laufzeit wie möglich haben will :).> Die Batterien sind zwar billig aber trotzdem nicht gut für die Umwelt.
Es gibt auch ziemlich winzige Lithiumakkus, die könntest du auch nehmen
an sich?
Edi R. schrieb:> Meine Schaltung hängt im Wald und wird nachts von Geocachern gesucht.grins
Meine hier
Beitrag "Re: Tiny85 Low Power Code Optimieren"
beschriebene Schaltung liegt u.a. auch im Wald und nuckelt seid über
einem Jahr an einer CR2032.
Wenn Licht drauffällt wird eine kleine Melodie gespielt.
Da der WDT für den Knopfzellenbetrieb zuviel Strom braucht, erzeugt der
LDR einen asynchronen Pin-Change-Interrupt. So werden bei
Baumstumpf-im-Wald-Temperatur aus 5µA nur 0,2µA.
Ein dauerhaft beleuchteter LDR-Spannungsteiler ist wieder ein
1µA-Stromfresser { <- ;) }, deswegen kann man in dem Fall ein paar
Photodioden verwenden- falls es das Budget erlaubt.
Marcus H. schrieb:> Meine hier> Beitrag "Re: Tiny85 Low Power Code Optimieren"> beschriebene Schaltung liegt u.a. auch im Wald
:-)
Marcus H. schrieb:> Ein dauerhaft beleuchteter LDR-Spannungsteiler ist wieder ein> 1µA-Stromfresser { <- ;) }
Nicht wenn man es so macht wie ich und den LDR über einen Portpin nur
dann versorgt, wenn man messen will. Aber abgesehen davon hätte ich mit
meinen 2xAA genügend Kapazität übrig.
Edi R. schrieb:> Marcus H. schrieb:>> Ein dauerhaft beleuchteter LDR-Spannungsteiler ist wieder ein>> 1µA-Stromfresser { <- ;) }> Nicht wenn man es so macht wie ich und den LDR über einen Portpin nur> dann versorgt, wenn man messen will. Aber abgesehen davon hätte ich mit> meinen 2xAA genügend Kapazität übrig.
Das mit dem geschalteten Pin hast Du auch fein gemacht. ;)
Jedoch ist in Deiner Anwendung der WDT mit 5µA der größte Stromfresser.
Mir ging es darum einen Vorschlag zu machen, falls man den
Pin-Change-Interrupt verwenden möchte. Um eben mit einem AVR unter die
1µA zu kommen.
Dein Doppel-AA ist zehnmal größer als meine CR2032 (2000mAh zu 210mAh) -
Dir rosten im Wald eher die Zellen weg, als dass die entladen werden. ;)