PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Atmega8 Codierport auf Masse schalten



demmy
18.03.2013, 06:06
Hallo zusammen,

ich habe folgendes Problem. Ich nutze bei einem Atmega8 einen ganzen Port zur Codiereung bestimmter Funktionen. Das Port ist über Schalter auf Masse gelegt. Die internen Pullups des Atmega sind dazu eingeschaltet.
Die Stellung der einzelnen Pins werden nur einmal nach dem einschalten des µC abgefragt und dann gespeichert.
Jetzt hatte ich mir überlegt, um etwas Strom zu sparen, schalte ich die Pullupwiderstände, der geschalteten Eingänge ab, da diese ja eh auf Masse liegen und nicht mehr benötigt werden. Somit fließt dort kein unnötiger Strom und sie haben einen definierten Pegel. Bei den nicht geschalteten Pins lasse ich die Pullups einfach an um einen definierten Pegel zu erhalten.

Würdet ihr nun sagen dass macht sinn? Oder soll man lieber die Finger davon lassen, da man so den µC beschädigen kann?

Viele Grüße

Kampi
18.03.2013, 06:44
Hey,

ich wüsste jetzt nicht was da kaputt gehen soll wenn du deine Pins auf Masse legst ;)
Wenn du aber was anschließt hast du einen satten Kurzschluss, da du zwischen Masse und Pin keinen Widerstand hast (schau dir mal einen Pull-down Widerstand an).
Der µC erkennt dann auch keinen Pegel, weil kein paralleler Widerstand am Pin liegt wo eine Spannung abfallen kann.
Wenn du nur unbenutzte Pins auf Masse legst, passiert nichts. Aber sobald du was anschließt gibt es Probleme.

Klebwax
18.03.2013, 06:58
Jetzt hatte ich mir überlegt, um etwas Strom zu sparen, schalte ich die Pullupwiderstände, der geschalteten Eingänge ab, da diese ja eh auf Masse liegen und nicht mehr benötigt werden

Um wieviel Strom gehts denn da? Und wie sortiert sich dieser Strom in den Gesamtverbrauch deines Systems ein?

MfG Klebwax

oberallgeier
18.03.2013, 07:41
... zu sparen, schalte ich die Pullupwiderstände ... ab ... sinn ...Laut Datenblatt haben diese internen PullUps 20 kΩ bis 50 kΩ. Wenn Dir der Strom weh tut der dabei gezogen wird - na ja . . . Ansonsten meine ich, dass das Unsinn ist. Lies stattdessen lieber ein paar Abschnitte im Datenblatt zum Stromsparen - durch Abschalten verschiedener (anderer) Funktionen die Du evtl. nicht benötigst oder fahre einfach mit weniger Spannung (wenn Deine Energiestation dann nicht den Überschuss wegfrisst).

demmy
18.03.2013, 08:22
hi,

als Spannungsversorgung verwende ich einen Schaltregler, welcher schon sehr effizient ist. Den µC selber kann ich nicht in den Sleepmodus versetzen, da er an einem Bus hängt und dauernd Daten liefern muss.

Gehe ich vom ungünstigsten Fall aus und der Innenwiderstand hat 20kΩ dann sind das bei 5V immerhin 0,25mA. Nehme ich das ganze dann mal 8 sind wir schon bei 2mA. Und auf alle Teilnehmer am Bus und das ganze Jahr gerechnet, kommt da schon einiges an Verlustleistung zusammen, die eigentlich völlig unnötig ist. Es wäre lediglich eine Programmzeile für mich zu Programmieren.

Kann mir denn jemand sagen, wie sich ein Eingang verhällt, wenn ich ihn direkt auf Masse lege?

Gruß

oberallgeier
18.03.2013, 08:49
... Gehe ich vom ungünstigsten Fall aus und der Innenwiderstand hat 20kΩ ...Ich gehe mal vom ungünstigsten Fall aus, nämlich dem, dass Du diesen Wert nie im Datenblatt nachgeschlagen hast, garnicht weißt wo der steht und auch nie selbst gemessen hast. Selbst gemessen? Klar - wenn mir eine Frage so viel bedeutet, dann ist für mich ein bisschen mehr Aufwand immer gerechtfertigt. Ich habe diesen Wert bereits mehrfach an dem einen oder anderen Controller gemessen - und kenne "meine" Werte.


... µC ... an einem Bus hängt und dauernd Daten liefern muss ...Wär mal interessant was das für ein Bus ist. Klingt für mich nach der Möglichkeit, dass über den Bus schon mal Störungen eingestreut werden können, die sich in frei schwimmenden Eingängen verfangen.


... Kann mir denn jemand sagen, wie sich ein Eingang verhällt, wenn ich ihn direkt auf Masse lege ...http://www.mikrocontroller.net/articles/AVR-Tutorial:_IO-Grundlagen

Klebwax
18.03.2013, 08:50
Es wäre lediglich eine Programmzeile für mich zu Programmieren.

Ich würde dann aber zyklisch den Port abfragen, nicht daß jemand einen Schalter umschaltet und der Pin dann offen ist und schwingt.

Vielleicht solltest du auch mal einen Blick ins Datenblatt werfen. Da gibt es Figure 143, die dir den Strom durch den Pullup zeigt. Da finde ich 140µA als max, und wenn statistisch die Hälfte der Schalter geschlossen ist, gehts es rund um 0,5 mA.


Kann mir denn jemand sagen, wie sich ein Eingang verhällt, wenn ich ihn direkt auf Masse lege?

Die Frage verstehe ich nicht.

MfG Klebwax

Hubert.G
18.03.2013, 09:53
Kann mir denn jemand sagen, wie sich ein Eingang verhällt, wenn ich ihn direkt auf Masse lege?

Gruß
Wichtig ist das der Eingang an einem fixen Pegel liegt. Ob Masse oder über PullUp ist egal.
Das während des Betriebs niemand die Schalter umstellen soll, ist klar, ebenso sollte man nicht auf Ausgang und high stellen, wenn ein Schalter auf Masse liegt.

Edit
Die PullUp kannst du natürlich nach der Abfrage wegschalten wenn der Schalter auf Masse liegt und nicht verändert wird.

Kampi
18.03.2013, 10:10
Eine andere Möglichkeit zum Strom sparen wäre es (wie oben schon gesagt) nicht benötigte Teile abzuschalten, sprich wenn du z.B. den A/D Wandler nutzt das du ihn nach der Wandlung deaktivierst.
Eine niedrigere Taktfrequenz spart auch Strom. Desweiteren vielleicht eine Stromsparende Variante des Controllers nehmen? Versorgungsspannung runter setzen usw.
Welchen Pegel ein Eingang eines Controllers hat ist egal. Solange der Pin nicht benutzt wird kann er High sein oder Low oder kann floaten. Das ist der Controllerlogik egal (da diese den Pin ja nicht abfragt).
Wenn du einen Eingang direkt mit GND verbindest, liegt er logisch auf Low und verhält sich auch so.
Normalerweise macht man dies mit einem Pull-Down Widerstand. Wenn du den Eingang ohne direkt mit GND verbindest kannst du im nachhinein nichts mehr anschließen. Mittels Pull-Down schon.

oberallgeier
18.03.2013, 11:07
... nicht benötigte Teile abzuschalten ...niedrigere Taktfrequenz spart ... Stromsparende Variante ... Versorgungsspannung runter setzen ...Ich werde ja nicht müde darauf hinzuweisen, dass die >>aktuellen<< Dokumentationen zu den Controllern so wichtig sind, dass ein Nicht-Lesen in die elektronische Orientierungslosigkeit führt. Weswegen ich Dokumentationen meist (in ihren wichtigen Passagen) lese, bevor ich einen (neuen Typ) Controller kaufe oder benutze.

WENN Du den Codier"port" nach dem Controllerstart abschaltest, könntest Du vielleicht nen 2313 nehmen, den Codierer nach dem Start auslesen - und danach die Ports z.B. als Ausgänge nutzen.

Eine sorgfältige Analyse der verfügbaren (28- oder weniger -Pinner) Controller bringt aber natürlich DAS Energiesparpotenzial zum Vorschein:

mega8A
2.7 - 5.5V – 0 - 16MHz
Power Consumption at 4MHz, 3V, 25°C
– Active: 3.6mA

ATmega88P/V
0 - 4MHz @ 1.8 - 5.5V
Low Power Consumption at 1MHz, 1.8V, 25°C:
– Active Mode: 0.3mA

ATtiny2313A
– 0 – 4 MHz @ 1.8 – 5.5V
Low Power Consumption
– Active Mode 190 μA at 1.8V and 1MHz

Kampi
18.03.2013, 11:19
Stimmt. Meistens steht das ja schon direkt auf der ersten Seite.
Jetzt wo du mal einen Vergleich gepostet hast, wird mir das erstmal wirklich bewusst das es da Unterschiede gibt (habe da bisher kaum drauf geachtet).
Und die Unterschiede sind ja wirklich bemerkbar...

demmy
18.03.2013, 11:27
Also beim Atmega8 auf der Seite 243 im Datenblatt steht eindeutig 20K bis 50K Pullupwiderstand.
Wie man den Analog Comparator abschaltet, weiss ich inzwischen auch.
Ich habe mir auch die Figure 143 angeschaut. Nur wie darf ich das genau vestehen? Ich habe 5V Vcc, was sind die 5V Vop?

oberallgeier
18.03.2013, 12:23
... im Datenblatt steht eindeutig 20K bis 50K Pullupwiderstand ...Bitte sei jetzt nicht sauer wenn ich total pingelig werde. In meinem Datenblatt (8159D–AVR–02/11) zum m8 steht unter 25. Electrical Characteristics in einer Tabelle etwas von Min/20 und Max/50. Das ist eindeutig nicht "von ... bis" sondern "irgendwo dazwischen". Eine ganz konkrete Messung von mir an einem mega1284 (Versorgung 5,03V, Pullup, PORTD, Pin4) ergab 131 µA Kurzschlussstrom, und das sind dann ganz konkret 38,2 kΩ.

Klebwax
18.03.2013, 12:54
Eine ganz konkrete Messung von mir an einem mega1284 (Versorgung 5,03V, Pullup, PORTD, Pin4) ergab 131 µA Kurzschlussstrom, und das sind dann ganz konkret 38,2 kΩ.

Das passt doch hervoragend zur Figure 143 aus dem Datenblatt. Je nach Temperatur so 130 bis 140µA bei 0V am Port.

MfG Klebwax

demmy
18.03.2013, 13:06
Aber jetzt nur nochmal zum Verständnis, wenn ich einen Eingang ohne Pullup direkt auf Masse lege, fließt kein Strom Rückwärts richtung Masse?

oberallgeier
18.03.2013, 13:27
... zum Verständnis, wenn ich einen Eingang ohne Pullup direkt auf Masse lege ...Mannnohhmannn. Wie kann man nur so viel Zeit mit Schreiben verbringen, wo man in Bruchteilen der Zeit doch selber nachsehen könnte. Einfach nen Controllerport initialisieren, Multimeter dranhängen, Stoff an Controller - dann SIEHT man das.

Anwort: nein. Zumindest konnte ich mit meinen DMMs (zwischen 40 und 200 Flocken) nie etwas messen. Feinere Messgeräte habe ich nicht.


... Eingang ... direkt auf Masse lege, fließt kein Strom Rückwärts richtung Masse ...Wie könnte denn ein Strom von Massenpotential nach Massenpotential fliessen? Da stellst Du Dir doch schon in der Frage selber ein Bein - oder die Antwort ;-) WENN es !!dieselbe!! Masse ist!!

Nachtrag: theoretisch könnten schon ein paar Nanoampere fließen, vermutlich nur ein paar Elektronen - Drainstrom, den die Endstufe des Controllers durchlässt oder braucht. Aber da bin ich mir wegen Unkenntnis der physikalischen Eigenschaften der Endstufe nicht ganz im Klaren.