Forum: Mikrocontroller und Digitale Elektronik Stromsparen und Pull-up Widerstände?


von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo,
ich möchte eine batteriebetriebene Fernsteuerung bauen, deren Kernstück
ein ATtiny45V sein wird. Um Strom zu sparen verwende ich eine niedrige
Taktfrequenz und versetze den Controller so oft wie möglich in den
Sleep Mode, außerdem gibt’s noch die Möglichkeit nicht benötigte
Oszillatoren abzuschalten, das muss ich mir aber noch anschauen.

Ich möchte den Controller über eine steigende Flanke an INT0 aufwecken,
die Flanke soll durch einen Schalter erzeugt werden. Also dachte ich
mir, ich aktiviere den internen Pull-up Widerstand ziehe den Eingang
mit dem Schalter auf GND. Dummerweise kann es aber sein, dass der
Schalter dauernd gedrückt ist, der Eingang also auf GND liegt. Dann
fließt ständig ein Strom über den Pull-up Widerstand. Laut Datenblatt
hat der Pull-up zwischen 30 und 60k Ohm, das macht bei 3V immerhin 0,05
bis 0.1mA, die Unterumständen ständig aus meiner armen Batterie gesaugt
werden. Die Standbystromaufnahme des „nackten“ Controllers liegt im
Vergleich dazu um den Faktor 1000 niedriger bei ca. 0.1µA.

Was kann ich da machen? Ich könnte den int. Pull-up Abschalten und
einen größeren externen verwenden. Wie groß darf der max. sein? Ich hab
nix zu den Eingangswiderständen im Datenblatt gefunden. Gibt’s
vielleicht einen grundsätzlich anderen Ansatz?

Grüße
Flo

von Läubi (Gast)


Lesenswert?

Dukönntest (da der Mensch ja ein langsames Eingabegerät ist) den Pullup
nur einschalten wenn du auch tatsächlich den Schalter Abfragst.

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo Läubi

> Du könntest (da der Mensch ja ein langsames Eingabegerät ist) den
> Pullup nur einschalten wenn du auch tatsächlich den Schalter
Abfragst.

Das geht nicht, der Schalter soll ja den Controler aus dem Sleep Mode
wecken.

Grüße
Flo

von Läubi (Gast)


Lesenswert?

Ja aber wenn der Controller "Wachh" sit kanst du doch dne Pullup
sofort abschalten, und erst wieder in den Sleepmodus schicken wenn nach
sagen wir 500ms oder 1s die Taste lsogelassen wurde, weil was bringts
dir den sofort wieder shcalfen zu legen wenn die Taste eh die ganze
zeit gedrückt ist.

von ---- (Gast)


Lesenswert?

@Läubi: Die Taste ist eigentlich ein Schalter, der dauerhaft Strom durch
den Pullup ziehen kann...

Kann man da nicht ne trickreiche Schaltung nehmen, die aus den
statischen Pegeln (Dauerein oder Daueraus), dynamische Pegel macht? So
mit Kondensator im Signalweg... nur wie könnte sowas konkret aussehen?

Andere Idee: Wenn du den Schalter gegen einen UM-Schalter austauschen
könntest, der 0V oder 5V auf die Eingänge schaltet, dann brauchste auch
keine Pullups.

----, (QuadDash).

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo QuadDash

> @Läubi: Die Taste ist eigentlich ein Schalter, der dauerhaft Strom
> durch den Pullup ziehen kann...

Genau.

> Kann man da nicht ne trickreiche Schaltung nehmen, die aus den
> statischen Pegeln (Dauerein oder Daueraus), dynamische Pegel macht?
> So mit Kondensator im Signalweg... nur wie könnte sowas konkret
> aussehen?

Ja, so was wär’ gut. Leider kenn ich mich da auch nicht aus, das ist
irgendwie "echte" Elektronik. Ein bisschen C programmieren ist ja
nicht so schwierig, aber für solche trickreichen Sachen fehlt’s...

> Andere Idee: Wenn du den Schalter gegen einen UM-Schalter
> austauschen könntest, der 0V oder 5V auf die Eingänge schaltet,
> dann brauchste auch keine Pullups.

Hab ich auch schon überlegt, geht aber nicht. Der Schalter ist kein
echter Schalter sondern ein "Schalter" in einem Drehimpulsgeber.
Wenn’s gut geht bleibt der so stehen, dass der Ausgang auf Vcc liegt,
in 50% der Fälle wird er aber auf GND liegen und wenn man dann die
Fernsteuerung weglegt fließt dauernd der Strom über den Pull-up. Dumme
Sache.

Grüße
Flo

von sebastian arnd (Gast)


Lesenswert?

hallo,
kannst du nicht einfach den pull-up abschalten wenn die letzte stellung
des Drehimpulsgebers (vor dem schlafen) GND ist?

Gruss sebastian

von Läubi (Gast)


Lesenswert?

Also wenn der Ausgang eh VDD oder GND ist... wozu brauchst du dann einen
Pullup?

von David W. (Gast)


Lesenswert?

Wenn Läubis Aussage nicht zutrifft, dann kannste ja auch einfach mal nen
Megaohm ausprobieren, vielleicht reicht das noch ;)

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo

@Läubi
> Also wenn der Ausgang eh VDD oder GND ist... wozu brauchst
> du dann einen Pullup?

Sorry, da hab ich Quatsch geschrieben, wollte sagen, er ist entweder
offen oder auf GND.

@Sebastian
> kannst du nicht einfach den pull-up abschalten wenn die letzte
> stellung des Drehimpulsgebers (vor dem schlafen) GND ist?

Geht auch nicht. Wird dann ein Stück gedreht ist der "Schalter"
offen, sprich der Eingang hängt in der Luft, da wird der Controller
nicht aufwachen, jedenfalls nicht definiert.

Ist irgendwie vertrackt...

Grüße
Flo

von sebastian arnd (Gast)


Lesenswert?

Hallo,
kannst du den pull-up nicht zum pull-down machen ? (ich meine je nach
der stellung vorm schlafen ).
sebastian

von Andi K. (Gast)


Lesenswert?

@Florian: Wieviel Amper Deine Batterien und welche Spannung?

MfG
Andi

von Andi K. (Gast)


Lesenswert?

...meinte "...haben Deine...".

von Läubi (Gast)


Angehängte Dateien:

Lesenswert?

Also open Collector, hm... also da kannst du nicht viel machen fürchte
ich.
du keonntest folgendes Versuchen (ohne gewähr):

ein NPN und ein PNP Mosfet als Inverter mit forgeschaltetem NPN gegen
(ok sollte man vermeiden) VDD, siehe Anhang kann aber auch sein das es
absoluter Humbug ist, ist jezt das einzige was mir so einfällt.

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo

@Sebastian
> kannst du den pull-up nicht zum pull-down machen ?
>(ich meine je nach der stellung vorm schlafen ).

Das geht auch nicht. Wenn ich's so mache, dass kein Strom fließt hängt
der Eingang am Controller bei der nächsten Stellung der Encoders in der
Luft.

@Andi
> Wieviel Amper Deine Batterien und welche Spannung?

3V Lithium Zelle mit 500mAh. Und die soll eben möglichst lang halten.

@Läubi
> Also open Collector, hm... also da kannst du nicht viel machen
> fürchte ich.

Scheint so. Mir schient das Problem aber nicht so ungewöhnlich. Kommt
doch sicher öfter vor, oder?

> du keonntest folgendes Versuchen (ohne gewähr):
> ein NPN und ein PNP Mosfet als Inverter mit forgeschaltetem NPN
> gegen (ok sollte man vermeiden) VDD, siehe Anhang kann aber auch
> sein das es absoluter Humbug ist, ist jezt das einzige was mir so
> einfällt.

Ah, danke für die Skizze. Ich versuch das mal zu simulieren, vielleicht
versteh ich's ja. Leider kann ich's hier grad nicht einfach probieren.


Ansonsten versuch ich einfach mal einen externen Pull-up mit 3M Ohm.
Inzwischen hab ich nämlich doch noch was zur Eingangsimpedanz gefunden,
angeblich ist sie 100M. Mit 3M Pull-up geht gibt das zwar vielleicht
keine steilen flanken mehr, aber die Schaltschwelle sollte schon noch
erreicht werden.

Grüße
Flo

von Andi K. (Gast)


Lesenswert?

Mal angenommen, der Mindeststromverbrauch ist im Standby 150µA dann wäre
das eine max. Laufzeit von 500mA / 0,150mA = 3333 Stunden bzw. 138
Tage.
Rechnet man in diesem Zeitraum noch eine Bedienungszeit von 10 Stunden
mit 5mA mit ein, sind es dann bei 50mA weniger nur noch 3000 Stunden
bzw. 125 Tage.
Ich würde den Drehgeber erst mal mit externen Pullupps um die 100KOhm
versuchen, die internen haben ja auch 30 bis 40KOhm, wenn es mit
100KOhm geht, dann solange erhöhen, bis die Decodierung nicht mehr geht
und wieder einen Schritt zurück gehen.

MfG
Andi

von Andi K. (Gast)


Lesenswert?

Wie machst Du die Entprellung des Drehgebers?
Mit Kondensatoren oder per Software?

MfG
Andi

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo Andi

> Wie machst Du die Entprellung des Drehgebers?
> Mit Kondensatoren oder per Software?

Ich dachte an Software. Muss aber erstmal sehen, wie Schlimm der Geber
prellt. Der Drehgeber ist selbst gebastelt, zwei Schleifkontakte auf
einem Stück Platine.

Wenn’s wirklich ein RC Glied tut wäre das allerdings auch sehr
praktisch. Hast Du Erfahrungen mit der Wahl von R und C?

> [Laufzeitberechnungen]

Ich hab ähnliche Überschlagsrechnungen gemacht und die 125 Tage sind
zuwenig, drum macht mir der Pull-up ja so Sorgen.

> Ich würde den Drehgeber erst mal mit externen Pullupps um die
> 100KOhm versuchen, die internen haben ja auch 30 bis 40KOhm,
> wenn es mit 100KOhm geht, dann solange erhöhen, bis die
> Decodierung nicht mehr geht und wieder einen Schritt zurück gehen.

Ja, mach ich, wenn man so eine ernsthafte Verringerung des
Stromverbrauchs hinbekommt wär’ das am bequemsten.

Grüße
Flo

von Andi K. (Gast)


Lesenswert?

Wie lange soll es denn laufen?
Sind 4 Monate (wenn auch in der Praxis) mit einer Knopfzelle nicht lang
genug?

>Der Drehgeber ist selbst gebastelt, zwei Schleifkontakte auf einem
>Stück Platine.
WOW! Respeckt!
Also kann es auch vorkommen, das beide Schleifer beim Loslassen des
Gebers durchkontaktieren was dann aus 100µA 200µA macht oder ist der
Geber mit Raster alle 2 Bitmuster, also bei 01 und 10 so das in
Ruhestellung nur einer durchkontaktiert?

Die Entprellung würde ich ohne Kondensatoren in Software machen da die
Kondensatoren auch noch etwas Strom zu GND führen.
In der Codesammlung ist ein gutes Drehencoder-Programm mit Entprellung
von Peter Dannegger.

MfG
Andi

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo Andi

> Wie lange soll es denn laufen?
> Sind 4 Monate (wenn auch in der Praxis) mit einer Knopfzelle nicht
> lang genug?

Ich find nicht. Sollte so unkompliziert wie eine (gute) TV Fernedienung
seien, und die läuft jahrelang mit einer Batterie (meist hat die
allerdings auch mehr mAh.

>>Der Drehgeber ist selbst gebastelt, zwei Schleifkontakte auf einem
>>Stück Platine.
>
> WOW! Respeckt!

Keine Vorschusslorberen, noch ist er nicht fertig.

> Also kann es auch vorkommen, das beide Schleifer beim Loslassen
> des Gebers durchkontaktieren

Nach momentaner Planung ja.

> was dann aus 100µA 200µA macht

Ich wollte nur einen der Kontakte zum Aufwecken benutzen, dann ist der
zweite stromlos und es bleibt bei 100µA.

> oder ist der Geber mit Raster alle 2 Bitmuster, also bei 01
> und 10 so das in Ruhestellung nur einer durchkontaktiert?

Nein, kein Raster.

> Die Entprellung würde ich ohne Kondensatoren in Software machen
> da die Kondensatoren auch noch etwas Strom zu GND führen.

Hatte ich auch geplant, jedenfalls hab ich mal vorsichtshalber einen
ATtiny mit 4K Flash besorge, damit da auch sicher alles problemlos
Platz hat.

> In der Codesammlung ist ein gutes Drehencoder-Programm mit
> Entprellung von Peter Dannegger.

Oh, danke, werd ich mir raussuchen, hoffentlich in C.

Grüße
Flo

von Läubi (Gast)


Lesenswert?

hm.. wenn der selbstgebaut ist, warum nderst du dan nicht die Open
Collector Schaltung?

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo Läubi

> hm.. wenn der selbstgebaut ist, warum nderst du dan nicht die
> Open Collector Schaltung?

Und was schlägst Du vor? Umschalter? Das scheint mir nicht mit
vertretbarem Aufwand realisierbar sein.

Grüße
Flo

von Läubi (Gast)


Lesenswert?

naja du zieshst doch mit nem Transi auf GND.. ich würde mal schätzen mit
einem NPN.

Nun machst du einfach eine Stufe die einen NPN und einen PNP enthält
(in meiner skitze die beiden reichten Mosfets einfach durch PNP/NPN
transen ersetzen) welche du mit dem gleichen Signal anstuerst, die
Ausgänge zusammenlegen, einer der Transen sperrt dann immer und der
ander leitet, also hast du dan abwechselnd GND bzw. VDD anliegen.
Aber ich wieß natürlich nicht den genauen Aufbau deines
Selbstbauencoders.

von Andi K. (Gast)


Lesenswert?

@Läubi: Ein normaler, einfacher Drehimplusgeber hat 2 Kanäle. Kanal A
und B.
Entweder leitet (zieht) Kanal A (01) über einen Schleifer die +3V auf
GND oder Kanal B (10) oder beide (00) oder keiner (11).
Da noch eine komplexe Elektronik einzubauen wäre Unsinn ausgenommen bei
optischen Drehimpulsgebern.

MfG
Andi

von Läubi (Gast)


Lesenswert?

naja 2 Transen pro kanal finde ich keine Komplexe Elektronik, und er
will ja unbedingt keine Pullups benutzen....

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo

Die zwei Transistoren wären wirklich kein großer Aufwand, aber ich kann
doch den Eingang der Transistorschaltung auch nicht einfach offen
lassen, oder?

Grüße
Flo

von Netbandit (Gast)


Lesenswert?

und wenn du im sleep Modus einfach einen sehr großen PullUp verwendest?
(größer 100k)
Und sobald er aus dem Sleep gerufen wird schaltet er auf den internen
PullUp.

von Läubi (Gast)


Lesenswert?

Kannst du sonst mal eine Bild / Zeichnung machen wie dein Drehgeber den
nun genau aufgebaut ist?

von Winfried (Gast)


Lesenswert?

Dran denken: Wenn du mit großen Pullup-Widerständen arbeitest, sind die
Eingänge sehr störempfindlich. Ein wenig statische Aufladung, ein Trafo
in der Nähe usw. bewirken einen Pegelwechsel. Also drauf achten, kurze
Leitungen zu verwenden und ggf. abzuschirmen. 100K sind noch gut in den
Griff zu bekommen, bei 1M-10M muss man schon genauer hinschauen.

von Florian R. (Firma: TU Wien) (frist)


Lesenswert?

Hallo

@Läubi
> Kannst du sonst mal eine Bild / Zeichnung machen wie dein Drehgeber
> den nun genau aufgebaut ist?

Klar, noch ist er nicht fertig, aber ich schick Dir was, wenn er
funktioniert.

@Winfried
> Dran denken: Wenn du mit großen Pullup-Widerständen arbeitest,
> sind die Eingänge sehr störempfindlich.

Ja und langsam. Aber da kommt ja Netbandit's idee wie gerufen:

> Und sobald er aus dem Sleep gerufen wird schaltet er auf den
> internen PullUp.

Gute Idee, das mach ich.

Grüße
Flo

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.