Forum: Mikrocontroller und Digitale Elektronik DIP Schalter stromsparend beschalten


von Chris S. (chris606)


Lesenswert?

Guten Morgen,

ich habe mal ein dumme Frage.
Ich möchte einen DIP Schalter an einen PIC anschließen und die 
Schaltzustände in der Firmware auslesen.
Nun bin ich am überlegen wie ich den DIP Schalter am besten beschalte um 
bei allen möglichen Schaltzuständen möglichst wenig Strom zu verbraten.
Hat da jemand einen Rat für mich?

Gruß
Christian

von Falk B. (falk)


Lesenswert?

Zum Auslesen die internen Pull-Up Widerstände der IOs einschalten, 
danach die IOs auf Ausgang umschalten und LOW ausgeben. So brauchen sie 
0mA. Die DIP-Schalter müssen hierbei nach GND schalten.

von Georg (Gast)


Lesenswert?

Chris S. schrieb:
> um
> bei allen möglichen Schaltzuständen möglichst wenig Strom zu verbraten

Ohne Zusatzaufwand geht das nicht, aber man kann ja die "Versorgung" der 
Schalter, also die der Pullup-Widerstände, abschalten. Entweder ist das 
bei den I/Os vorgesehen, oder man hängt die Pullups an einen extra 
Ausgang.

Oder man schaltet das ganze gleich als Matrix, dann ergibt sich die 
mögliche Abschaltung von selbst.

(Die vorige Version ist praktisch eine 1 x n Matrix).

Georg

von Winfried M. (win)


Lesenswert?

@Georg: Wieso soll das nicht gehen? Falk schrieb doch bereits, wie es 
geht.

von Manfred (Gast)


Lesenswert?

Georg schrieb:
> Ohne Zusatzaufwand geht das nicht,
Häh?

An meinen AT328 ist ein Schalter gegen GND, der im Normalbetrieb 
geschlossen ist.

Ich initialisiere meinen Pin als Output mit low. Schalter nach GND zu 
gibt keinen Strom, Schalter offen sowieso nicht.

Alle paar Minuten schalte ich meinen Pin auf Input mit internem Pullup 
um, frage den Schalter ab und stelle dann wieder auf Output - low um. Wo 
ist nun das Problem?

von Jakob (Gast)


Lesenswert?

Manfred (Gast) schrieb:
>> Ohne Zusatzaufwand geht das nicht,
>  Häh?

Ist das Umschalten von Ausgang/Low auf Input/PullUp kein
Mehraufwand? - Wenn auch nur im Programm-Code...

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

... naja ... eine Batterie muß man auch noch anschließen ... vor lauter 
Schufterei kommt man hier gar nicht mehr zum Bier trinken ...

Wer den Aufwand scheut, einen I/O nominal als LOW,Output zu betreiben 
und zum Einlesen auf Input,PullUP umzustellen, sollte mit der 
eigentlichen Routiene, ob der Pin nun high oder low ist, gar nicht erst 
weiter machen ... DAS nimmt Einem aber noch nicht Mal ein Arduino ab -> 
falsches Hobby

MfG

von Manfred (Gast)


Lesenswert?

Patrick J. schrieb:
> ... vor lauter Schufterei
> kommt man hier gar nicht mehr zum Bier trinken ...
Anstatt Bier zu trinken am PC zu sitzen spart Geld und ist gesünder - 
damit wird das ganz klar wirtschaftlich sinnvoll.

> Wer den Aufwand scheut, einen I/O nominal als LOW,Output zu betreiben
> und zum Einlesen auf Input,PullUP umzustellen, sollte mit der
> eigentlichen Routiene, ob der Pin nun high oder low ist, gar nicht erst
> weiter machen ...
"Routiene" - ???

> DAS nimmt Einem aber noch nicht Mal ein Arduino ab ->
> falsches Hobby
Aber Arduino kann das, in genau dieser Umgebung habe ich das gemacht. 
Ich habe das sogar gemacht, ohne hier um Rat zu fragen - wo ist mein 
Fehler?

von Georg (Gast)


Lesenswert?

Chris S. schrieb:
> Nun bin ich am überlegen wie ich den DIP Schalter am besten beschalte um
> bei allen möglichen Schaltzuständen möglichst wenig Strom zu verbraten.

Ohne was zu tun geht das eben nicht, das haben weder Falk noch ich 
behauptet - man muss was umschalten, und es funktioniert auch nicht in 
"allen möglichen Schaltzuständen" ohne Strom. Wäre auch gegen 
Naturgesetze. Die vom TO gewünschte Beschaltung gibt es also nicht.

Winfried M. schrieb:
> @Georg: Wieso soll das nicht gehen? Falk schrieb doch bereits, wie es
> geht.

Auch nach dem Evangelium Falk geht es nicht einfach von selbst wie der 
TO das meint, und ausserdem hat nicht jeder Prozessor-I/O schaltbare 
Pullups, deswegen habe ich es ergänzt um die Möglichkeit, die Pullups 
mit einem Zusatzpin zu schalten. Scheint manche hier geistig zu 
überfordern.

Rein sachlich ist alles klar und von Falk und mir umfassend beschrieben. 
Wahrscheinlich kommen trotzdem noch einige zig sinnlose Posts wie "Hä". 
Sowas muss man ja einfach mal loswerden.

Georg

von Patrick J. (ho-bit-hun-ter)


Lesenswert?

Hi

Manfred schrieb:
> ohne hier um Rat zu fragen

^^ Da

Er gibt Es auch noch zu ;)

Auch beim Arduino musst Du etwas Programm - zumindest per C&P ins 
Steinchen transferieren.
Die Pin-Abfrage, ob High oder Low wird ebenfalls wohl gleich bleiben.
Einzig das Umschalten auf LOW(PullUp aus) und dann auf OUT lässt den 
sonst durch den PullUp weiter fließenden Strom auf Null zusammen 
schrumpfen.

Wo das Problem ist, Das So zu machen, erschließt sich mir auch nicht.
Die Idee ist simpel und toll gleichermaßen.
Kaum Mehraufwand (je zwei Befehle für vor und nach der Abfrage) und 
keinen 'Standby-Strom' für den Eingang.

MfG

von Winfried M. (win)


Lesenswert?

@Georg: Wer komplizierte Lösungen präsentiert, sollte das auch schon 
begründen. Anderen "geistige Überforderung" zu unterstellen, ist völlig 
überflüssig. ;)

von Mani W. (e-doc)


Lesenswert?

Chris S. schrieb:
> Ich möchte einen DIP Schalter an einen PIC anschließen und die
> Schaltzustände in der Firmware auslesen.

Früher (TM) hat man das mit 10 K bis 100 K Widerständen als
Pull up oder Pull down gelöst...

von eProfi (Gast)


Lesenswert?

Dipschalter kommen bekanntlich öfter im Rudel vor, das kann bei 
batteriebetriebenen Geräten schon mal "ins Geld" (an die Knopfzelle) 
gehen.
Zur Sicherheit kann man über einen Angstwiderstand in Reihe zum Schalter 
nachdenken.
Zu beachten ist, dass beim Umschalten auf die Reihenfolge geachtet 
werden muss, also zuerst auf Low schalten, dann auf Ausgang, bzw. zuerst 
auf Eingang, dann auf Pullup.

von Peter D. (peda)


Lesenswert?

Zwischen Einschalten des Pullup und Abfragen muß noch mindestens 1 NOP 
sein, da die Eingänge einen Zyklus vorher gelatcht werden.

von Wolfgang (Gast)


Lesenswert?

Mani W. schrieb:
> Früher (TM) hat man das mit 10 K bis 100 K Widerständen als
> Pull up oder Pull down gelöst...

Heutzutage (TM) ist soetwas in vielen Mikrokontrollern fest eingebaut 
und auch noch steuerbar. Wenn man nicht zu eigenwillige Vorstellungen 
hat oder die letzt 1/10 µs im Programm ausreizen will/muss, kann man die 
durchaus für solche Aufgaben benutzen.

Manfred schrieb:
> "Routiene" - ???

Oh, oh - etwas übermüdet?

von Manfred (Gast)


Lesenswert?

Patrick J. schrieb:
>> ohne hier um Rat zu fragen
> ^^ Da
> Er gibt Es auch noch zu ;)
> Auch beim Arduino musst Du etwas Programm -
> zumindest per C&P ins Steinchen transferieren.
Programm muß ich in jedem Fall ins Steinchen laden, und das ist beim 
Arduino ja nun ziemlich einfach.

C&P macht wenig Sinn, ich schreibe meinen Kram selbst. Natürlich werde 
ich die Bedienung eines LCD oder Abfrage eines A/D-Wandlers nicht neu 
erfinden, da gebe ich schon zu, auf vorhandene Libraries zuzugreifen.

> Die Pin-Abfrage, ob High oder Low wird ebenfalls wohl gleich bleiben.
> Einzig das Umschalten auf LOW(PullUp aus) und dann auf OUT lässt den
> sonst durch den PullUp weiter fließenden Strom auf Null zusammen
> schrumpfen.
Was eigentlich schon in der ersten Antwort von Falk hinreichend 
erklärt wurde.

> Wo das Problem ist, Das So zu machen, erschließt sich mir auch nicht.
> Die Idee ist simpel und toll gleichermaßen.
Wenn wir ehrlich sind, wissen wir, auch aus eigener Erfahrung, dass man 
simple Lösungen mitunter einfach nicht sieht. Nach einem externen 
Denkanstoß kommt dann "Aha, das hätte ich selbst ..."

Mani W. schrieb:
> Früher (TM) hat man das mit 10 K bis 100 K Widerständen
> als Pull up oder Pull down gelöst...
Du hast die Ursprungsfrage nicht gelesen! Ich selbst hatte die 
Zielsetzung, das Gesamtsystem im sleep auf einstellige µA zu bringen.

100 kOhm an 5 Volt gibt ?? Mikroampere (rechne selbst!), das bringt 
jegliche Sparerei um.

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.