Wie viel Strom verbraucht ein digitaler Eingang an einem Arduino Nano?

2 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Der Eingangswiderstand eines typischen Atmel Microcontrollers beträgt etwa 100MOhm.

Das Problem ist, dass man eine definierte HIGH- und LOW Spannung erzeugen muss. Meistens nimmt man einen Widerstand nach Plus und benutzt dann einen Taster oder Schalter der nach minus schaltet. Dann hat man während der Schalter/Taster an ist auch einen entsprechenden Strom durch diesen Pullup widerstand.

Und das ist hier das Problem. Das ist das, was dann "Massig Strom" verbraucht.

Man kann die internen "Weak Pullups" verwenden. Dann legt der Eingang selber einen Widerstand zwischen Plus und sich selber und man kann dann nach Masse schalten um den Eingang von 1 auf 0 zu legen.

Dazu schreibt man (hier für Pin 2)

 pinMode(2, INPUT_PULLUP);

Nach der Abfrage kann man dann

 pinMode(2, INPUT);

sagen um den Pullup wieder ab zu schalten. Dann wird so gut wie kein Strom mehr verbraucht. So schaltet man den Stromverbrauch für die Abfrage des Pins nur während der Abfrage ein. Fragt man dann nur 1× pro Sekunde oder seltener ab, spart man dann Strom.

Nächstes Problem ist, dass der "Weak Pullup" eben "weak" also schwach ist. Lange Leitungen fangen Störungen auf und lösen dann auch eine "0" aus wenn der Schalter/Taster offen ist. Und 2m sind bei einem Mikrocontroller schon eine gewaltige Länge.

Um das zu verhindern muss man dann eigene, starke Pullups verwenden und die brauchen dann natürlich auch entsprechend viel Strom.

Aber auch die kann man schalten. Einfach diese Widerstände nicht mit "Dauerplus" verbinden sondern mit einem Portpin. Und den schaltet man dann auf HIGH wenn man die Schalter/Taster abfragt und danach sofort auf INPUT (hohe Impedanz) ohne Weak Pullup um wieder Strom zu sparen.

Denk dran, die "Brown out detection" zu benutzen. Denn wenn die Spannung zu klein wird, dann macht der µC Fehlfunktionen. Das ist dann besonders ärgerlich wenn der dann irgendwelche Variablen im EEPROM oder in der RTC mit "Unsinn" überschreibt. Mit der BOD (Brown Out Detection) wird der µC dann im Reset gehalten und kann keinen Unsinn mehr machen wenn zu wenig Spannung da ist.

Woher ich das weiß:Berufserfahrung

stealthuser 
Fragesteller
 15.05.2024, 11:16

Vielen Dank

0
stealthuser 
Fragesteller
 15.05.2024, 12:19

OK lange Leitungen habe ich in dem Bereich wo ich die Zeit einstellen möchte nicht (maximal 8 cm) das Gehäuse für die Steuerung ist relativ kompakt und IP65 - ich nehme einfach eine einzeilige Unterverteilung für Feuchtraum (5 Module breit) mit tranzparentem und spritzwassergeschützem Deckel zum Hochklappen.

Ein einzuclipsendes Panel bingt alle Bedienelemente auf eine Fläche von 92x67mm. Mit einem Abstand von ca. 4 cm dahinter sitzt dann die Platine mit den Steckern für den Poti, den Drehschalter die Taster usw.

Ich dachte zuerst, das ich einen DIP-Schalter nehme um den Programmwahlschalter für die Zeiteinstellung verwenden zu können aber das wäre dann nach deiner Beschreibung blöd.

Dann muss ich die Zeiteinstellung wohl in einer der Funktionen einbauen wo ich dann auf einen Taster warten kann und im Regelbetrieb den Eingang mit pinMode(2, INPUT); wieder abschalte.

Eine Frage noch: Gibt es solche Stromsparmethoden auch für die analogen Eingänge?

Aktuell verwende ich einen Stufendrehschalter wo die 5 Ausgänge mit 330 Ohm verbunden sind und die Anfangs- und Endposition des Stufendrehschalters habe ich über 330 Ohm an VCD und GND angeschlossen.

Dann habe ich die gemessenen Spannung auf der 7-Segmentanzeige ausgeben lassen und verwende die Spannungsbereiche jetzt in einer Reihe If/Else abfragen (wusste gerade nicht die Syntax für Case).

Jetzt ist meine Schaltung für die Programmwahl natürlich nichts anderes als ein Spannungsteiler und dort fließt natürlich auch permanent Strom...

Kann man das auch noch stromsparender hinbekommen?

0
Commodore64  15.05.2024, 13:49
@stealthuser

Natürlich, einfach den Strom an den Messtellen abschalten wenn nicht gemessen wird.

Dazu die Stromversorgung durch einen Portpin ausgeben oder wenn das nicht reicht einen Transistor zur Hilfe nehmen.

1
Commodore64  15.05.2024, 13:57
@Commodore64

Steuerst Du die 7-Segmentanzeige selber? Also eigene Matrix?

Dann kannst Du die Messtellen an den gemeinsammen + der Ziffern anschließen. Ziffer 1 schaltet dann Messtelle 1 frei, Ziffer 2 die Messtelle2 und so weiter.

Du musst ja die Segmente dabei nicht einschalten wenn Du nicht willst.

Du kannst auch wenn Du 4 oder 5 Ziffern hast auch eine Tastatur anschließen die dann Widerstände auf einen ADC schaltet so dass man über die aktive Ziffer die Spalte und über den ADC Wert die Zeile der gedrückten Taste kennt.

0
stealthuser 
Fragesteller
 15.05.2024, 14:19
@Commodore64

Für die 7-Segmentanzeige nehme ich ein fertiges Modul mit 8 Ziffern und einem Max7219 es gibt wohl einen Befehl "lcd.shutdown" mit dem man die Anzeige abschalten kann ohne die Register zu löschen und man kann die Anzeige dimmen das macht er dann intern über PWM an die LEDs wobei ich davon ausgehe das mir diese beiden Möglichkeiten reichen.

Wenn ich einen Counter verwende der bei jeder Tasteneingabe zurück gesetzt wird und der runterzählt bis 0 und dann einen lcd.shutdown macht dann habe ich schon Strom gespart.

Für das Strom abschalten der Sensoren mache ich eine neue Platine - jetzt weiß ich wieder warum ich die Kabel für Poti und Stufenschalter und Sensoren mit Steckern versehen habe und nicht fest aufgelötet ;-)

0
Commodore64  16.05.2024, 12:17
@stealthuser

Hast Du genug Pins für eine Tastatur übrig?

Die kann man auch Stromsparend ansteuern - und ohne EMV Störungen!

Einfach alle Spalten (Ausgang) auf LOW legen und dann nur prüfen ob eine der Zeilen (Eingang) LOW wurde. Kein hin und her geschalte.

Erst wenn da was LOW wurde, dann weiß man ja, dass was gedrückt wurde. Dann genau diese Zeile auf LOW schalten und die Spalten auf Eingang. Dann kann man "rückwärts" abgefragt sehen woher das LOW kam. Und dann kennt man Zeile und Spalte.

Der einzige Spannungssprung der dabei entsteht kommt vom Tasten drücken selber. Absolut EMV gerecht da kein dauerherumgeschalte und das spart dann natürlich auch Strom. Hier kann man sogar wenn die Eingänge der Zeilen einen Interupt_on_low können in den Deep Sleep, das Ding macht also gar nicht bis man eine Taste drückt!

0
stealthuser 
Fragesteller
 16.05.2024, 13:37
@Commodore64

Ich glaube das was Du mit dem Raster beschreibst kenne ich von einem Touchscreen. Von den 13 Digitalpins sind schon 5 belegt - bleiben noch 8.

Ich habe eine Funktion wo die Feuchtigkeitsmessung eingestellt wird und im Regelbetrieb nicht verwendet wird. Dort könnte ich doch die Überwachung zweier Taster für + und - Minuten aktivieren - Sekunden kann ich ignorieren und Datum ist auch egal.

Einen zuvor defininierten pin

#define Minuten_plus 3

pinMode(Minuten_plus, INPUT_PULLDOWN)

Mit über einen Taster mit GND verbinden

Dann fließt im Normalfall kein Strom und wenn er gedrückt wird passiert nix weil er ständig auf low steht

Um die Überwachung des Tasters zu starten könnte ich in der Setup-Funktion mit

pinMode(Minuten_plus, INPUT_PULLUP)

Den Pin zunächst auf High ziehen, und erst dann in der in einer IF-Abfrage den Zustand abfragen.

Dann nehme ich noch einen Counter der die Lowzustände zählt, bis wieder ein High kommt. Den Counter nehme ich um festzustellen, ob der Taster länger gedrückt wurde um dann die Zeiteinstellung schneller laufen lassen zu können.

0

Ich würde die Einstellung über 2-3 Taster machen und dann die internen Pullup-Widerstände nutzen. Dann fließt wirklich nur in dem Moment Strom, wenn der Taster gedrückt wird.

Die Eingänge selbst sind sehr hochohmig, über 10 Megaohm (Der Makey-Makey nutzt z.B. 20 Mega-Ohm Pullup Widerstände). Die internen Pullups müsstest du nachschauen, ich würde um ~50KOhm vermuten.

Beim Arduino Nano verbraucht der USB-Seriell Wandler unter Umständen ziemlich viel Strom (mein China-Clone 5-10mA), auch der Arduino selbst mit seinen 16 MHz noch mal 10mA.

Ich habe mit dem Atmega-Mikrocontroller vom Arduino mal einen Luftfeuchte-Sensor gebaut mit 2-5uA Stromverbrauch während der Pausenzeiten. Machen kann man da schon einiges.


stealthuser 
Fragesteller
 15.05.2024, 08:16

Vielen Dank

0