Forum: Mikrocontroller und Digitale Elektronik Stromsparende Pegelmessung


von Guenter B. (gbl)


Lesenswert?

Hallo,

ich möchte eine Füllstandsüberwachung realisieren.
Als Fühler würde ich zwei Drähte nehmen.
Die Schaltung soll ca einmal pro Stunde messen, ob die Flüssigkeit einen 
zu hohen Stand erreicht hat und dann Alarm geben. So oder so soll nach 
dieser Messphase ein Funkmodul eingeschaltet werden und der Wert 
Überlauf oder kein Überlauf übermittelt werden, damit man weiß, daß die 
Schaltung "noch lebt".
Das ganze soll Batteriebetrieben funktionieren.
Ich dachte an einen AVR uC, welcher ca alle 60 Minuten aufwacht, misst, 
das Funkmodul mit Strom versorgt, die Meldung absetzt und wieder 
einschläft.
Allerdings gabe ich gesehen, daß der Tiny13 bei 100khz nur 0,2 mA 
braucht.
Lohnt sich der Einsatz des Sleep-Modus beim Tiny13 und wie wecke ihn 
ohne externes Signal regelmäßig auf? Empfiehlt sich eventuell der 
Einsatz eines anderen AVR ? Muss ich beim Beschalten der AVR-Ausgänge 
etwas beachten um mir die "Strombilanz" nicht zu versauen ?

Gruß

Günter

von Markus H. (cairol)


Lesenswert?

Zum aufwachen lassen kann man den Watchdog-Timer verwenden.
Also den WD konfigurieren (WDTCR-Register), den WD-Timer zurücksetzen 
und starten und dann in den Sleep- oder -Powerdown-Modus wechseln.
Wenn der WD abgelaufen ist (kann man auf bis zu ca. 8 Sekunden stellen 
beim Tiny13) muss man mit ner Variable hochzählen und ihn wieder 
schlafen lassen.
Nach 8 Sekunden * X = 60 Minuten führt man dann die Messung durch.

Achtung: Es gab oder gibt noch einen Bug in BASCOM, durch den das 
wdtcr.6-Bit nicht wieder gesetzt wird nach der Abarbeitung der ISR vom 
Watchdog.
Das muss man also in dem Fall immer manuell setzen nach dem Aufwachen.
Ist aber glaub ich in der neuesten Version behoben.

Zum Status der Ports und evt. erhöhtem Stromverbrauch steht einiges im 
Datenblatt unter den verschiedenen Stromspar-Modi.

Ob man den Tiny für längere Zeit schlafen schicken kann - ohne ihn wie 
bei der Watchdog-Methode alle 8 sekunden kurz zu wecken - weiß ich 
nicht.
Glaube aber nicht, wenn man keinen externen Interrupt zum Aufwecken 
nutzen kann. Die paar Microsekunden die er nach jeweils 8 Sekunden wach 
ist, fallen aber sicher nicht ins Gewicht...
Im "Idle"-Mode spart der Tiny auch Strom und der ADC für die Messung 
läuft dabei weiter. Ist vielleicht noch ne Alternative.

von Ulrich (Gast)


Lesenswert?

Der Tiny13 sollte sogar noch etwas Sparsamer sein, vor allem wenn man 
nur 3 V nutz: ca. 0,1 mA bei 5 V 128 kHz, 50 µA bei 3 V. Trotzden lohnt 
sich ein Stromsparmode. Beim Tiny13 wohl am ehesten der Powerdown Mode. 
Man kann dann immer noch den Watchdog timer zum aufwecken nutzen (ca. 5 
µA bei 3 V). Der wesentliche Nachteil ist, dass man keine wirklich 
genaue Zeitmessung hat, sonder nur den relativ ungenauen 128 kHz Takt 
des Watchdog timers.

Für einen kleinen Stromverbrauch sollten die Eingänge einen definierten 
Logic Pegel haben, also nichts irgendwie in der Mitte.

von H.j.Seifert (Gast)


Lesenswert?

Für solche Sachen nehme ich gerne den M41T81, I2C-RTC.
Braucht nur 0,6µA und kann u.a. stündlich einen Interrupt auslösen.

von Guenter B. (gbl)


Lesenswert?

Vielen Dank für die Antworten.

@Markus:
Ich würde als Porgrammiersprache C nehmen. Gibt es dort auch Probleme 
mit dem Watchdog ?
Als Eingang wollte ich einen normalen digitalen Eingang statt des ADC 
benutzen. Ich benötige nur die Info, ob ein bestimmter Pegel 
überschritten ist.

@Ulrich:
Das mit der ungenauen Taktung wäre für mich kein Problem. Ob er nun nach 
45 oder 90 Minuten sein Signal aufwacht und sein Signal sendet ist nicht 
entscheident.
Er soll sich halt nur regelmäßig melden, damit ich bzw die 
Empfängerschaltung mitbekommt, wenn die Batterie leer ist.

@Seiffert
Hört sich interessant an.
Wie programmiere ich den M41T81 ?
Über eine Initialisierungroutine durch den AVR ?

von Michael U. (amiga)


Lesenswert?

Hallo,

Guenter B. schrieb:
> Ich dachte an einen AVR uC, welcher ca alle 60 Minuten aufwacht, misst,
> das Funkmodul mit Strom versorgt, die Meldung absetzt und wieder
> einschläft.

Fallso Du als Funksender z.B. RFM02 oder RFM12 benutzen willst, schau 
mal bei mir rein:
http://www.avr.roehres-home.de/sensoren/index.html

> Allerdings gabe ich gesehen, daß der Tiny13 bei 100khz nur 0,2 mA
> braucht.
> Lohnt sich der Einsatz des Sleep-Modus beim Tiny13 und wie wecke ihn
> ohne externes Signal regelmäßig auf? Empfiehlt sich eventuell der
> Einsatz eines anderen AVR ? Muss ich beim Beschalten der AVR-Ausgänge
> etwas beachten um mir die "Strombilanz" nicht zu versauen ?

Bei mir läuft es so: Tiny läauft mit internen 8MHz und wird in PowerDown 
geschickt.
Im RFM-Modul läuft der WakeUp-Timer und weckt per externem Interrupt den 
Tiny. Der mißt dann, sendet den Kram und schickt RFM-Modul und Sensoren 
wieder schlafen.

Im Sleep ca. 2-3µA mit RFM02 und Tiny45.
Alle 30-40s ein Datenpaket, etliche ms mit ca. 12mA.

Ein Testmodul, daß nur den internen Temperatursensor des Tiny45 nutzt, 
liegt jetzt seit Anfang April mit einer CR2025 versorgt im Gefrierfach 
meines Kühlschranks...

Gruß aus Berlin
Michael

von H.j.Seifert (Gast)


Lesenswert?

ja, musst ein paar Byte via I2C in die RTC schieben.
Ob es sich lohnt, hängt einfach davon ab, wie lange das ganze mit deiner 
Batterie laufen soll. Kommst du gut ran, dann einfach öfter wechseln. 
Manchmal lohnt es sich aber, mit jedem µA zu geizen.

von Markus H. (cairol)


Lesenswert?

@Guenter: Nein, soweit ich weiß gab es den Fehler mit dem WD nur in 
BASCOM.

Ist das denn ne leitende Flüssigkeit? Weil du sagst, dass du keinen ADC 
sondern einen Digitalen I/O nehmen willst zur Erkennung.
Wenn es Wasser ist, brauchst du sonst noch ne externe Beschaltung die 
dir - je nach dem ob die Drähte im Wasser stecken oder nicht - 
zuverlässige Lo- und High-Pegel erzeugt. Man muss ja den verbotenen 
Bereich der TTL-Pegel jeweils überbrücken können.
Da wäre dann die Nutzung des ADC mit weniger Aufwand verbunden.

von Guenter B. (gbl)


Lesenswert?

Es handelt sich um Wasser. Genau genommen um die geklärten Abwässer aus 
meiner neuen Kleinkläranlage. Ich möchte alamiert werden, sobald der 
Wasserstand im letzten Becken alarmierend hoch ansteigt, falls eventuell 
die Drainage versagt.

Ich dachte daran einfach die beiden Fühlerdrähte mit einem hochohmigen 
Widerstand in Reihe zu schalten und den Mittelabgriff durch einen 
Eingang (digital oder falls das nicht funktioniert durch den ADC) 
auswerten zu lassen.

von Gast (Gast)


Lesenswert?

Nix gegen Drähte, aber ich würde mir trotzdem überlegen, ob ein simpler 
fertiger Schwimmerschalter nicht vielleicht die Investition wert ist. 
Zumindest wenn das Ding über lange Zeit zuverlässig funktionieren soll. 
c*nr*d hat etliche im Angebot, in unterschiedlichen Ausführungen. Kostet 
auch nicht die Welt (ca. 10...20 Euro).

von gbl (Gast)


Lesenswert?

Einen Schwimmerschalter habe ich schon bestellt.
Die Schaltung wollte ich als zusätzliche Sicherheit.
Ausserdem kann ich aus diese Weise mal wieder einen AVR sinnvoll
verbasteln.

von Ulrich (Gast)


Lesenswert?

Zu hochohmig sollte man auch nicht werden, sonst fängt man sich alle 
mögliche Störungen ein. Den Sannungsteiler mit dem Sensor sollte man 
auch nicht immer unter spannung lassen, sondern nur kurz zum Messen 
einschalten. So vermeidet man die Pegel im undefinierten Bereich der 
Digitalen Eigänge.

Wenn das Funkmodul fürs aufwecken sorgen kann wäre das vermutlich eine 
gute Alternative zum Watchdog.

von Gast (Gast)


Lesenswert?

>Die Schaltung wollte ich als zusätzliche Sicherheit.

Was soll "zusätzliche Sicherheit" sein? Der Schwimmerschalter tut seinen 
Dienst und damit ist es gut - Punkt.

Wenn Du meinst, dass zwei Füllstandssensoren besser sind, viel Spaß. 
Sobald sich der Wasserpegel langsam der kritischen Marke nähert, wird 
immer einer eher umschalten als der andere, aber Du kannst nicht wissen, 
ob einer der Sensoren defekt ist, oder ob nur der Pegel gerade 
grenzwertig ist. Das macht wenig Sinn.

>Ausserdem kann ich aus diese Weise mal wieder einen AVR sinnvoll
>verbasteln.

"Schwimmerschalter" und "AVR verbasteln" schließt sich doch nicht aus. 
Die Aufgabe des Controllers besteht darin, den Zustand des Schalters 
abzufragen, den Wert jede Stunde per Funk zu übermitteln (vielleicht 
sogar zusätzlich noch die per ADC gemessene Batteriespannung) und 
ansonsten Strom zu sparen. Alles davon kann der AVR sehr gut.

von Guenter B. (gbl)


Lesenswert?

Zum Schwimmerschalter habe ich ein Kabel liegen. Da kommt eine Lampe 
dran, welche leuchtet, wenn der Schalter schließt.
Programmierfehler garantiert ausgeschlossen ;-)

Das mit dem AVR ist mehr ein zusätzliches Hobbyprojekt.
Und zusätzliche Sicherheit gibt er schon. Wenn einer von beiden Alarm 
gibt, ist es für mich Zeit nachzusehen und zu handeln.

Viel schlimmer und damit ein Beweis, daß es mal wieder Zeit für ein 
AVR-Projekt ist:
Ich habe einen meiner Tiny 13 verfused. Ich wollte 128khz einstellen und 
habe wie im Datenblatt angegeben, die Fusebits Clk0 und Clk1 auf 1 
gesetzt. Also dem entsprechend bei Ponyprog beide CLK-Haken weg. Der AVR 
läßt sich nicht mehr ansprechen. Auch mit externem Takt auf Pin 2 nicht.

von Gast (Gast)


Lesenswert?

>Ich habe einen meiner Tiny 13 verfused. Ich wollte 128khz einstellen und
>habe wie im Datenblatt angegeben, die Fusebits Clk0 und Clk1 auf 1
>gesetzt. Also dem entsprechend bei Ponyprog beide CLK-Haken weg. Der AVR
>läßt sich nicht mehr ansprechen. Auch mit externem Takt auf Pin 2 nicht.

Hast Du die Frequenz des ISP-Programmiertakts angepasst? Sie muss 
kleiner sein als 1/4 FOSC des zu programmierenden Controllers, bei FOSC 
= 128 kHz also kleiner als ca. 32 kHz.

Geh mal mit der ISP-Frequenz schrittweise runter (ich kenne Ponyprog 
nicht, nehme aber an, dass es diese Option bietet). Vielleicht kriegst 
Du Deinen Controller so wieder flott. Wenn nicht, hilft nur noch 
HV-Parallel-Programmierung (hilft immer).

von Guenter B. (gbl)


Lesenswert?

Ich habe ihn mit der Atmelsoftware und einem anderen Programmieradapter 
wieder hinbekommen. Wie du schon sagtest, mußte ich den Programmiertakt 
runtersetzen. Dieses war mir bei PonyProg nicht möglich.
Bei 128khz/3V braucht er nun nur knapp 100uA  :-)))

von günti (Gast)


Lesenswert?

in allen neueren abwasseranlagen, die ich kenne, wird der wasserstand 
über einen luftdrucksensor im schaltschrank gemessen.

wo dann, über ein ca. 5x3mm schlauch, ein kleiner trichter im abwasser 
hängt.

von Gast (Gast)


Lesenswert?

>Bei 128khz/3V braucht er nun nur knapp 100uA

Wenn er "active" ist. Im Sleep Mode "idle" begnügt er sich sogar mit nur 
ca. 20 µA. Bei Deiner Anwendung wird der Controller so wenig zu rechnen 
haben, dass er die meiste Zeit schlafen können wird.

Wie Du leicht nachrechnen kannst, liegt 20 µA übrigens bereits im 
Bereich des Stroms, der der Selbstentladung von Alkalizellen im Laufe 
mehrerer Jahre entspricht (Kapazität AA-Zellen ca. 3000 mAh, Haltbarkeit 
ca. 10 Jahre ==> I = ?). Etwaige Wünsche nach noch weniger Strombedarf 
machen deshalb keinen Sinn. 100 µA kann eine Alkalizelle rechnerisch 
30000 Stunden lang fließen lassen, d. h. knapp dreieinhalb Jahre 
(ununterbrochen!).

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
Noch kein Account? Hier anmelden.