Hallo, ich überlege gerade was ich bei AVRs am besten mit nichtbenutzten Pins mache: -nichts -PullUp Widerstand aktivieren -mit anderen Ein/Ausgängen verbinden -auf Masse legen Was ist am unproblematischsten? Gruß Achim
Ich persönlich würde ja zum aktivieren des "Pullup-Widerstandes" tendieren, "nichts" ist komplett verkehrt und bei "miteinander-" bzw. "Masse-Verbindung" kann man leicht mal Kurzschlüsse Produzieren.
Hi
> "nichts" ist komplett verkehrt
Dafür würde ich gern mal eine stichhaltige Begründung hören.
MfG Spess
Also Atmel sagt (bzw.schreibt) dazu :
1 | Unconnected pins |
2 | If some pins are unused, it is recommended to ensure that these pins have a defined level. Even |
3 | though most of the digital inputs are disabled in the deep sleep modes as described above, floating |
4 | inputs should be avoided to reduce current consumption in all other modes where the digital |
5 | inputs are enabled (Reset, Active mode and Idle mode). |
6 | The simplest method to ensure a defined level of an unused pin, is to enable the internal pull-up. |
7 | In this case, the pull-up will be disabled during reset. If low power consumption during reset is |
8 | important, it is recommended to use an external pull-up or pull-down. Connecting unused pins |
9 | directly to VCC or GND is not recommended, since this may cause excessive currents if the pin is |
10 | accidentally configured as an output. |
Hier vom Mega8 unter I/O-Ports. Im "Normalfall" ist PullUp intern wohl das beste. avr
Hi Also für stinknormalen Betrieb nicht zwingend notwendig. Oder lese ich das falsch? MfG Spess
@Spess Sagen wir so: Es ist nicht nötig, aber besser. Die "leeren" Pins die nach Reset bereits Eingänge sind mit PullUp zu versehen ist wohl meistens das Einfügen von ein paar "1" in der Configuration. Kein zusätzlicher Speicher- und Zeitbedarf ;) avr
Hi >@Spess >Sagen wir so: Es ist nicht nötig, aber besser. Gut. Sind wir uns erstmal darüber einig, das nicht konfigurierte offene Pins nicht zur Zerstörung oder ,mit Ausnahme der o.g. Stromsparmodi, zu Fehlfunktionen führen. Das wurde hier auch schon behauptet. >Kein zusätzlicher Speicher- und Zeitbedarf ;) Als notorischer Assemblerprogrammierer: Stimmt nicht. Aber ich würde es als irrelavant betrachten. Es gibt hier einige Standardtmeinungen, oder schon fast Dogmen, die meiner fast 12-jährigen Erfahrung mit AVRs widersprechen. Und da ich etwas nonkonformistisch veranlagt bin, muss ich halt meinen Senf dazugeben. MfG Spess
@Spess Da kann ich die Resetbeschaltung (mit R und C) nennen. Ist nur in Sonderfällen nötig, aber (fast) jeder schreit danach;) avr
Hi >@Spess >Da kann ich die Resetbeschaltung (mit R und C) nennen. >Ist nur in Sonderfällen nötig, aber (fast) jeder schreit danach;) Zum Bleistift. Ich bekomme auch eine sichere Tastenabfrage ohne Timer hin. MfG Spess
> Standardtmeinungen
Wow, die Version von Standard ist mir neu. ;-)
Im übrigen ist das Thema durch, da die Antwort ja im Datenblatt steht.
Hi, hab ich doch noch eine Debatte ausgelöst... Bei meine Versionen 3 und 4 besteht wohl bei einem Irrtum Kurzscghlussgefahr, also werde ich meistens mit PullUp arbeiten und wenn es zu viele Pins sind, bei denen ich den Registernamen suchen muss lass ich vllt. offen. Danke...
ich definiere unbelegte pins immer als digitalen ausgang und lass sie auf der platine offen. sorgt auch für einen stabilen pegel da dran.
> Gut. Sind wir uns erstmal darüber einig, das nicht konfigurierte offene
Pins nicht zur Zerstörung oder ,mit Ausnahme der o.g. Stromsparmodi, zu
Fehlfunktionen führen.
Nein, da sind wir uns NICHT einig. Offene Eingänge können sich alles
mögliche einfangen. Also, als Eingang mit PullUp oder Ausgang
definieren- alles andere ist Pfusch und Bastelei.
Hi >Nein, da sind wir uns NICHT einig. Offene Eingänge können sich alles >mögliche einfangen. Also, als Eingang mit PullUp oder Ausgang >definieren- alles andere ist Pfusch und Bastelei. Das solltest erstmal ATMEL erklären. In den AppNotes-Programmen habe ich das bisher jedenfalls noch nicht gefunden. MfG Spess
Ich empfehle, die PullUps an nicht benötigten Pins zu aktivieren. Ich hatte z.B. mal das Problem, dass ein ATTiny25 mit einem 32,768kHz Uhrenquarz ca. 500µA gebraucht hat. Für Dauerbetrieb mit Batterien ist das zu viel. Dann habe ich mal an allen Pins die PullUps aktiviert. Na bitte, der Stromverbrauch ist auf ca. 60µA gesunken. Die Pins einfach offen zu lassen scheint also nicht die beste Lösung zu sein.
Offene Eingänge können bei C-MOS-Technik folgendes Problem haben: Durch kleinste Kriechströme können sich die Inverter auf "Mittelstellung" einstellen, wie z.B. bei einem mit 1 MOhm von Ausgang auf Eingang rückgekoppelter Inverter. In diesem Arbeitspunkt arbeiten aber die beiden Fet's mit maximalem Ruhestrom. Will man geringen Ruhestrom haben, empfiehlt sich also pullup, oder, wahrscheinlich noch besser, ein Als-Ausgang-einstellen und auf lo oder hi bringen.
> Das solltest erstmal ATMEL erklären. In den AppNotes-Programmen habe ich
das bisher jedenfalls noch nicht gefunden.
Das wissen die ganz sicher, halten es aber wohl nicht für nötig, extra
auf Selbstverständlichkeiten hinzuweisen.
Ich meine, es aber irgendwo in einem Atmel-Datenblatt auch gelesen zu
haben.
Da muss man doch nun wirklich nicht lange nachdenken um festzustellen, dass undefiniert eingestellte Potentiale in einer Schaltung an keiner Stelle etwas verloren haben. Irgendwelche App-Notes Programme sind nicht das Maß der Dinge; Manchmal hilft es seinen eigenen Kopf zu benutzen.
Hallo Spess, die Frage war eindeutig: >Was ist am unproblematischsten? Deine Antort darauf: >-nichts Das ist ja wohl Unsinn. Es ist wie es das Datenblat beschreibt eindeutig am unproblematischsten wenn man die internen Pullups aktiviert. Ansonsten gibt es diverse schon beschriebene Situationen (wenig Strom, etc) wo es problematisch werden kann. Damit ist nicht gemeint, daß es zwingend Probleme geben muss. Heisst für Dich nonkonformistisch daß Du immer alles anders machen musst wie die Mehrheit, dann weiterhin viel Spass, dann fährst Du Ski, Fahrrad oder Moped ohne Helm, Auto ohne Sicherheitsgurt, löschst brennendes Fett mit Wasser und so weiter. Ich wünsche Dir dann ein interessantes Leben :-)) Manchmal hat die Mehrheit sogar recht. Gruß, Udo
Wieso? Für mich als Programmierer ist es doch am unproblematischsten, wenn ich gar nichts mache. Stimmt doch! ;)
Hi >Deine Antort darauf: >>-nichts >Das ist ja wohl Unsinn. Es ist wie es das Datenblat beschreibt eindeutig >am unproblematischsten wenn man die internen Pullups aktiviert. Ganz einfach, das entspricht meiner, mittlerweile 12-jährigen, Erfahrung mit AVRs. Und da Atmel lediglich 'recommended' schreibt und nichts zwingend vorschreibt, sehe ich keine Veranlassung diese Erfahrung über den Haufen zu werfen. MfG Spess
spess53 schrieb: > Ganz einfach, das entspricht meiner, mittlerweile 12-jährigen, Erfahrung > mit AVRs. Und da Atmel lediglich 'recommended' schreibt und nichts > zwingend vorschreibt, sehe ich keine Veranlassung diese Erfahrung über > den Haufen zu werfen. > > MfG Spess Meine zweijährige Erfahrung spricht aber was anderes, ich hatte in einer großen LED-Uhr zu Entwicklungs-zeiten den INT0-Pin in der Luft hängen und zu Debugzwecken einen Interrupt dafür programmiert, der mit diverse Variablen aus dem Programm ausgegeben hat. Um den Interrupt auszulösen hat mir ein Stücken Draht gereicht, das hat auch prima funktioniert, solange bis die Anzeige per PWM gedimmt habe, die hat derart viel gestört das mir ständig dieser Interrupt ausgelöst wurde. Nachdem diese FET-Eingänge sehr hochohmig sind kriegt man da auch sehr leicht kapazitiv die nötige Schaltspannung eingekoppelt um scheinbar leere Eingänge zum Schalten zu bewegen. Ich sehe keinen Grund darin derartig versteckte und nicht immer nachvollziehbare Fehler suchen zu müssen wenn es reicht die Pullups einzuschalten.
Hi >Um den Interrupt auszulösen hat mir ein Stücken Draht gereicht, das hat >auch prima funktioniert, solange bis die Anzeige per PWM gedimmt habe, >die hat derart viel gestört das mir ständig dieser Interrupt ausgelöst >wurde. Meine Aussage bezieht sich auf unbenutzte Pins. Ein aktiviertes INT-Pin zählt da nicht dazu. MfG Spess
Also mir ist noch kein Atmel kaputgegangen weil ein unbenutzter Pin unkonfiguriert war (also Eingang ohne PullUp). Das schreibt auch Atmel so. Der Strom ist jedoch höher als bei eingeschaltetem PullUp. Das schreibt Atmel ebenfalls und kann ich auch bestätigen. => Ein "unbenutzer" Pin ohne definiertem Pegel schadet nur!! der Stromaufnahme, nicht!! der Funktion und nicht!! dem µC! Ein Setzen als Eingang mit PullUps ist daher ein Kann (evtl. Soll) aber kein Muss. Ein Setzen als Ausgang unnötig (und evtl. schädlich bei Schaltungserweiterungen, Messfehlern). avr
avr schrieb: > Der Strom ist jedoch höher als bei eingeschaltetem PullUp. > Das schreibt Atmel ebenfalls und kann ich auch bestätigen. So isses. Z.B. ATmega16 mit ner LED und ner Taste, d.h. 30 IOs unbenutzt. Da fließen dann erhebliche mA mehr, wenn die alle floaten. Und beim ATmega1280 (86 IOs) noch mehr. Auch bei Netzbetrieb muß man nicht unnütz Strom vergeuden. Peter
Wie sieht es bei GND-beschalteten Eingängen im Vergleich zu unbeschalteten Eingängen mit internem Pull-Up in Bezug zu EMV-Verträglichkeit aus?
hmm, ich breche alle unbenutze pins einfach ab, so verhalten die sich wie die pins die nicht nach aussen angeschossen sind. Was ist nicht da stört auch nicht - dazu sind alle als in und pullup konfiguriert.
Hi Langsam kommt diese Diskussion auf den Boden der Realität zurück (zumindest teilweise). Im Sinne ursprünglichen Frage, ohne weitere Premissen, stehe ich auch weiterhin zu meiner Aussage. >Auch bei Netzbetrieb muß man nicht unnütz Strom vergeuden. Wenn der AVR einen nennenswerten Anteil am Gesamtverbrauch des Gerätes hat, stimme ich dir zu. MfG Spess
Ich wuerde irgendwas fuer Diagnose dran haengen. einige Eingaenge fuer DIP-Schalter einige Ausgaenge fuer LED-Diagnoseanzeigen. Gast
Ich habe mir mal die entsprechenden Stellen im Datenblatt vom 644 durchgelesen. Ganz abgesehen davon, das dort tatsächlich die aktivierung der Pull-Ups empfohlen wird, gibt es ja auch die Möglichkeit des Tri-State High-Z Zustandes. Ich kenne das noch aus alten Zeiten als Zustand eines Ausganges, aber beim AVR wird das als eine der Optionen für einen Eingang bezeichnet. Wenn ich nun annehme, das ich den Eingang auf High-Z schalte, woher kommen dann, bei einem floatenden Eingang die hohen Ströme? Das finde ich ein wenig rätselhaft. Kann das vielleicht jemand erklären?
Öpf schrieb: > Wenn ich nun annehme, das ich den Eingang auf High-Z schalte, woher > kommen dann, bei einem floatenden Eingang die hohen Ströme? CMOS Gates sind nur dann stromlos, wenn entweder high oder low, mittendrin sind beide Transistoren mehr oder weniger eingeschaltet, folglich fliesst Strom durch beide. In diesem Fall betrifft es das erste CMOS-Gate von der Eingangsbeschaltung. Wenn du diesen Pfad in der Abbildung der Innenschaltung eines I/O-Ports im Datasheet vom 644 studierst, dann wirst du ein Transmission-Gate finden und dahinter einen Transistor, der das Signal auf Masse zieht. Im Deep Sleep ist das Transmission Gate ab- und der Transistor eingeschaltet, um das folgende CMOS-Gate (den Schmitt-Trigger) auf Masse zu bringen ohne den Pin zu beeinflussen.
Welchen Vorteil hat es die internen Pull_Ups zu vernwenden anstatt auf dem Pin ein Low-Pegel auszugeben?
dann ists aber ein fehler in der schaltung und kein wunder wenn's deswegen dampft. brauch ich mich ja bei einem SNT-controller oder irgendwelchen OPVs auch nicht wundern wenn die am falschen pin GND oder 330V bekommen. kann man sich drüber streiten, funktionieren wird beides. im hinblick auf die fehlertoleranz wären die aktivierten pullups die bessere lösung. ob man das braucht ist schon wieder eine andere frage.
> dann ists aber ein fehler in der schaltung und kein wunder wenn's > deswegen dampft. Das bedeutet ja nicht, daß man deshalb die Zerstörung provozieren muß, indem man jeden Pin unnötigerweise so konfiguriert, daß was kaputt gehen kann, wenn er falsch angeschlossen ist.
ahja verstehe. was du brauchst ist also ein sogenannter multiunipolarer µC. da kannst du an den pins anschließen was du willst und wo du es willst und der µC muß mit jeder erdenklichen kombination lauffähig bleiben... SCNR
spess53 schrieb: > Hi > >>Um den Interrupt auszulösen hat mir ein Stücken Draht gereicht, das hat >>auch prima funktioniert, solange bis die Anzeige per PWM gedimmt habe, >>die hat derart viel gestört das mir ständig dieser Interrupt ausgelöst >>wurde. > > Meine Aussage bezieht sich auf unbenutzte Pins. Ein aktiviertes > INT-Pin zählt da nicht dazu. > > MfG Spess Wenn ich INT0 ein Stückchen Programmcode vorwerfe, dann wird er ihn sporadisch ausführen, auch wenn es garnicht gewollt ist. Das ist für mich dann ein Fehler in der Hardware, die Software ist ja funktionell fehlerfrei. Nächste Frage: Wenn Code existiert springt er bei Auslösung dahin und zieht sein Ding durch, und was macht der Controller wenn für diesen Interrupt nichts hinterlegt ist? Ich weiß es nicht, aber ich könnte mir gut vorstellen das er eine, wenn auch nur kurze, Leerrunde dreht.
@Andreas Er wird den Code nur Ausführen wenn er dazu berechtigt ist. D.h. der Interrupt ist freigegeben. Wenn ich einen Interrupt freigebe, hat das seine Begründung, ich will das der µC auf etwas reagiert. Wenn das ein Pin ist, ist dieser auch mit der Interruptquelle verschaltet und damit kein freier Pin. => Interrupt durch einen freien Pin ist ein Softwarefehler ! avr
Hi >Wenn ich INT0 ein Stückchen Programmcode vorwerfe, dann wird er ihn >sporadisch ausführen, auch wenn es garnicht gewollt ist. Wieso. Du hast es ja gewollt. Du hast den Interrupt freigegeben und evtl. auch eine Routine dafür geschrieben. Und ab diesen Moment hast du dafür zu sorgen, das die richtigen Pegel ankommen. Ich habe ja nicht behauptet, das ein offener Eingang einen definierten Pegel hat. Aus diesem Grund benutze ich auch fast ausschließlich externe Pullups. In dieser Beziehung bin ich auch etwas nonkonformistisch. >Das ist für mich dann ein Fehler in der Hardware, die Software ist ja >funktionell fehlerfrei. Da du diesen 'Fehler' per Software vermeiden kannst, ist das Verhalten ein Softwarefehler. MfG Spess
> da kannst du an den pins anschließen was du willst und wo du es > willst und der µC muß mit jeder erdenklichen kombination lauffähig > bleiben... Irgendwie scheinst du es nicht begreifen zu wollen. Es geht nicht darum, ihn gegen jede beliebige Kombinationen abzusichern, sondern darum, nicht grundlos zusätzlich zu den eh schon vorhandenen noch viele weitere gefährliche Kombination zu schaffen. Oder um's so überspitzt auszudrücken wie du: Wie wäre es, wenn man die Pins wechselweise auf low und high setzt? Damit könnte man die Wahrscheinlichkeit, daß eine abgerutschte Messspitze zum Problem wird, gleich noch weiter erhöhen.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.