PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : pin abschalten



demmy
29.08.2011, 12:34
Hallo zusammen,

ich habe eine Frage, und zwar habe ich einen Eingang den ich mittels pullup (wenn nötig) immer auf Masse gezogen habe. Dieser wird nur beim Anlaufen des µC einmal benötigt und abgefragt. Also noch vor der Schleife. Danach wird er nicht mehr benötigt.
Kann ich den Pin dann irgendwie abschalten um Strom zu sparen? Weil er liegt ja dann permanent auf Masse, wodurch dauernd ein strom fließt und wird eigentlich nur zu beginn zum codieren verwendet. Kann ich den Eingang dann einfach auf 0 schalten ohne das was passiert?

Gruß

Ceos
29.08.2011, 12:36
du meinst sicherlich, du hast einen Pin, er intern auf Pullup steht und außen ziehst du ihn über einen Pulldown nach Masse!? In dem Falle schaltest du den Pullup des Pin einfach über das PORT Register ab. Ansonsten beschreib das Problem/den Aufbau genauer

demmy
29.08.2011, 13:27
Ja genauso mache ich das, also der Pin liegt direkt auf masse, da ich den internen Pullupwiderstand eingeschaltet habe. Und nachdem er abgefragt wurde, würde ich gerne den Pullup abschalten! Ist das ein Problem wenn der Pin direkt auf Masse liegt?

Gruß

Ceos
29.08.2011, 14:16
nicht unbedingt, nur wenn du ihn "ausversehen" auf output stellst gibt das n "kurzen" ^^ vll. mit 1k nach Masse (pulldown) ziehen

wie gesagt du schaltest den internen pullup nachdem du den pin abgefragt hast einfach aus (in bascom weis ich nicht wie sry) dann verschwendest auch keinen strom

demmy
29.08.2011, 14:32
mhh also das versehentliche umstellen als output in bascom kann eigentlich eher weniger passieren lol

aber noch eine frage! wie groß ist denn der strom der fließt, wenn ich einen eingang mittels internem pullup auf masse ziehe?
kann ich das irgendwo nachlesen?

radbruch
29.08.2011, 14:52
...wenn ich einen eingang mittels internem pullup auf masse ziehe?Um es mal klarzustellen: Der PullUp verbindet den Pin mit VCC. "Pull" bedeutet "ziehen" und "up" bedeutet "hoch". Um einen Pin zwangsweise mit Low zu belegen verwendet man einen PullDown-Widerstand:

http://www.rn-wissen.de/index.php/Pullup_Pulldown_Widerstand

Der interne PullUp der AVRs hat irgendwas zwischen 10K und 50K (wenn ich mich recht erinnere)
http://www.google.de/search?q=pullup+avr+widerstand

Gruß

mic

Kampi
29.08.2011, 14:56
Erst einmal vorweg. Wenn du einen Pin mit einem Pull down beschaltest ziehst du den Pin über nen Widerstand nach Masse. Wenn du den Pin mit einem Pull up beschaltest ziehst du den Pin mittels einen Widerstand nach Vcc. Du kannst keinen Pin mit einem Pull up nach Masse ziehen. Wenn du den Pin nicht von außen beschaltest fließt da so gut wie kein Strom außer du hast nen Pull up Widerstand dran. Wie groß die internen Widerstände sind steht im Datenblatt aber ich meine das wären 100k. Also wenn du ins DDR Register des Portes eine 0 reinschreibst ist der Pin als Eingang geschaltet und wenn du dann noch ins Port Register ne 0 reinschreibst stellst du den Pin auf High Z und damit fließt kein Strom in den unbeschalteten Pin rein.

radbruch
29.08.2011, 15:31
Unter "DC Characteristics" steht beim Mega16: PullUp min=20k, max=50k

(ganz gut für mein Alter, oder?)

PullUp in Bascom:
http://www.mitchsoft.de/Elektronik/Projects/AVR/Tips/tip001.html

P.S.:
Man könnte den internen PullUp aktivieren und extern ca. 10K-47k als PullDown anschliesen und dann die Spannung am Pin messen...

Kampi
29.08.2011, 15:44
Gut die 100k waren jetzt sehr großzügig geschätzt :D
Und bei deiner Messmethode.....wo willst du den messen ;) zwischen Vcc und Pin oder zwischen Pin und GND :D

oberallgeier
29.08.2011, 17:19
... Man könnte den internen PullUp aktivieren ... extern ca. 10K-47k ... Spannung ... messen...10k nehme ich (immer, die liegen halt rum) als Messwiderstand, das reicht (mir) für gute Genauigkeit. UND - ich messe natürlich Spannung und Strom . . . nicht unbedingt gleichzeitig . . . Die werden dann miteinander verglichen . . .

demmy
30.08.2011, 10:33
Jungs ihr macht das grad viel zu kompliziert! ;)
Im Grunde habe ich das so Verschaltet wie auf dem Bild. Im µC habe ich den internen Pullup eingeschaltet und je nachdem ob eine Brücke (die ich nicht gezeichnet habe) gesteckt ist oder nicht, ziehe ich den Eingang auf Masse. Nur wenn der Pullup eingeschaltet ist, verbraucht der Eingang ja immer Strom. Meine Frage war einfach ob ich während des laufenden Programmes im zusammenhag mit dieser Schaltung den Pullup einfach abschalten kann? Weil der Port dann direkt auf Masse hängt. Ich habe diese Schaltungsvariante so gewählt, da ich sehr wenig Platz auf der Platine habe und somit Widerstände usw. einsparen konnte.

19829

Kampi
30.08.2011, 10:43
Ja kannst du. Du löscht einfach die 1 aus dem Port Register. Du hast z.B. PinD.0 mit einem Pull up versehen. Das löscht du indem du im Programm schreibst:

PortD = &b0000 0000

Damit schreibst du ins PortD Register 0x00 und deaktivierst die Pull up Widerstände.
Ob der Befehl so richtig geschrieben ist weiß ich nicht 100%ig. Das müsstest du notfalls in der Hilfe nachschauen.

Sauerbruch
30.08.2011, 18:54
Oder noch besser so:

PORTD.0=0

Das schaltet nur den PullUp von D.0 ab, und lässt alle anderen 7 Bits des PORTD-Registers in Ruhe.

Klebwax
30.08.2011, 19:22
Ich habe diese Schaltungsvariante so gewählt, da ich sehr wenig Platz auf der Platine habe und somit Widerstände usw. einsparen konnte.

Dafür sind die internen Pullups ja da.


Nur wenn der Pullup eingeschaltet ist, verbraucht der Eingang ja immer Strom. Meine Frage war einfach ob ich während des laufenden Programmes im zusammenhag mit dieser Schaltung den Pullup einfach abschalten kann? .

Wenn du Strom sparen willst, darfst du den Pullup aber nur abschalten, wenn die Brücke gesteckt ist. Ansonsten hast du einen offenen Eingang und der schwingt. Das verbraucht dann mehr Strom als der Pullup. Also lass ihn besser immer an. Bei 50k bis 100k fließt kaum Strom.

MfG Klebwax

demmy
01.09.2011, 21:40
mhh ok

Aber jetzt mal ne doofe Frage, kann man den Pin nicht komplett abschalten, denn wenn ich den Pin am Anfang weder als Eingang noch als Ausgang deklariere dann is er ja auch abgeschaltet oder? Bzw. verbraucht kein Strom und schwingt nicht wenn er nicht belegt ist oder?

So ich muss mich nochmal korrigieren. Ich habe gerade gelesen das alle Pins zunächst als Eingang deklariert werden. Also würde es mehr Sinn machen bei allen unbenutzen Pins die Pullups ein zu schalten um Strom zu sparen oder?

Sauerbruch
01.09.2011, 21:54
wenn ich den Pin am Anfang weder als Eingang noch als Ausgang deklariere dann is er ja auch abgeschaltet oder?

Nicht ganz. Ein I/O-Anschluss ist immer entweder als Eingang oder als Ausgang konfiguriert - je nachdem, was im dazugehörigen DDR-Register steht (DDR = Data Direction Register). Nach dem initialen Power-On-Reset steht in allen DDR-Registern eine 0, d.h. alle I/O-Anschlüsse sind ganz von alleine als Eingänge konfiguriert - so lange man nichts an den DDR-Registern ändert (und nichts anderes macht er Bascom-Befehl "Config Port...).

Das ist ja auch ganz gut so, denn ein Eingang kann per se ja schon mal keinen Schaden anrichten - egal mit welchem Potenzial er verbunden wird. Das ist bei einem Ausgang schon anders... Die Eingänge sind extrem hochohmig, selbst wenn sie auf +5V liegen, dürfte weniger als ein Mikroampere fließen. Liegen sie auf Masse, fließt natürlich gar kein Strom (so lange der PullUp-Widerstand nicht aktiviert ist).

Nur wenn sie "frei" in der Luft hängen und sich Potentiale irgendwo zwischen High und Low einfangen, können recht hohe Ströme fließen. So steht´s zumindest geschrieben... deshalb wird auch dringend empfohlen, unbenutzte Pins mit einem definierten Pegel zu verbinden.

Aber nochmal: Als Eingänge konfigurierte Pins sind so hochohmig, dass der darüber abfließende Strom absolut vernachlässigbar ist.

Sauerbruch
01.09.2011, 21:57
So ich muss mich nochmal korrigieren. Ich habe gerade gelesen das alle Pins zunächst als Eingang deklariert werden. Also würde es mehr Sinn machen bei allen unbenutzen Pins die Pullups ein zu schalten um Strom zu sparen oder?

Da war ich wohl zu langsam :-)

Korrekt - wenn Du bei einem unbenutzten Pin den PullUp aktiviertst, liegt er erstens auf einem definierten Pegel, und über die Summe aus PullUp (ca. 50 KOhm) und dem Eingangswiderstand (ca. 100 MOhm) fließt praktisch kein Strom. Du kannst sie natürlich auch auf Masse legen - dann fließt wirklich gar kein Strom. Aber das muss man halt schon wieder in der Hardware realisieren, z.B. beim Platinen-Design.

Klebwax
01.09.2011, 22:03
Aber jetzt mal ne doofe Frage, kann man den Pin nicht komplett abschalten, denn wenn ich den Pin am Anfang weder als Eingang noch als Ausgang deklariere dann is er ja auch abgeschaltet oder? Bzw. verbraucht kein Strom und schwingt nicht wenn er nicht belegt ist oder?

Ein Port ist immer da, auch wenn man sich nicht darum kümmert. Und er ist typisch ein Eingang. Wenn er nach einem Reset ein Ausgang wäre, könnte er eine Hardware zerstören, bevor die Software das retten könnte. Also sollte man die Hardware auch an einem Ausgang so auslegen, daß sie ohne Ansteuerung in einen definierten unschädlichen Zustand kommt.

MfG Klebwax

Man sollte beim Schreiben einer Antwort nicht in den Keller etwas holen gehen.

demmy
01.09.2011, 22:14
Also gut! :)
Vielen Dank!

Ich habe jetzt alle unbenutzen Pins als Eingang mit aktivierten Pull-Ups deklariert.
Und bei den paar Pins mit Brücke nehme ich es eben in kauf, dass mit Pull-Up auch ein geringer Strom fließt wenn die Brücke gesteckt ist, obwohl sie nicht mehr gebraucht werden.
Ich hoffe ihr habt keine weiteren Einwände? ;)

Gruß