Was passiert bei falscher Pinbelegung?

Huhu,

ich habe gerade auf Grund meiner Ausbildung zum Elektroniker für Betrierbstechnik mit der Microcontrollertechnik angefangen und habe da eine Frage zum Arduino Uno Board.

Was passiert wenn ich z.B. Pin 10 in der Programmierung als Ausgang definiere, aber ein Eingangssignal (z.B. von einem Taster) mit +5V an diesen Pin anlege. Oder ich z.B. Pin 5 als Eingang definiere und einen Verbraucher (LED) mit der Anode an Pin 5 sowie der Kathode an GND anklemme?

Können möglicherweise Hardwareschäden auftreten?

MfG Pantherinae

Hallo.

In der Regel nicht.

Man kann das sogar beabsichtigt machen.

Beispiel: LED mit Anode an Pin 8, Kathode an Pin 9 (natürlich mit Widerstand an der LED!!) Jetzt definiert man PIN 8 und PIN 9 als Outputs und setzt beide auf HIGH. -> LED leuchtet nicht

Setzt du dann den Kathoden-Pin 9 auf LOW fließt strom. (Potentialausgleich) -> LED leuchtet

Das nennt sich "sinking".

Klar kann bei sowas der Controller beschädigt werden. Wenn Du einen Pin auf Output und Low setzt und gleichzeitig 5V anlegst, dann wir mit sehr hoher Wahrscheinlichkeit der maximal zulässige Strom überschritten. Der Erfolg ist dann ein mindestens ein defekter Ausgang :frowning:

Wenn Du hingegen ein LED falsch anschliesst ohne Vorwiderstand, dann ist es eine interessante Frage was warum zuerst kaputt geht. Mit Vorwiderstand hingegen bleibt schlimmstenfalls die LED dunkel und sonst rührt sich nichts.

Wenn Du das Verhalten der verschiedenen Pins mal sehen willst, dann schau Dir mal meine Seite hier an: http://blog.blinkenlight.net/experiments/basic-sketches/

Gruß, Udo

kduin:
Hallo.

In der Regel nicht.

Man kann das sogar beabsichtigt machen.

Beispiel: LED mit Anode an Pin 8, Kathode an Pin 9 (natürlich mit Widerstand an der LED!!)
Jetzt definiert man PIN 8 und PIN 9 als Outputs und setzt beide auf HIGH.
→ LED leuchtet nicht

Setzt du dann den Kathoden-Pin 9 auf LOW fließt strom. (Potentialausgleich)
→ LED leuchtet

Das nennt sich “sinking”.

Eine sinnvolle Anwendung dafür wäre z.B. eine zweifarbige LED mit zwei Anschlusspins. Je nach Flussrichtung leuchtet eine der beiden Farben.

Danke für eure Antworten.

Das heißt für das abwechselnde Leuchten einer Dual-LED könnte ich den Sketch folgendermaßen schreiben:
Die Led wäre dann zwischen Pin 8 und 9 verklemmt.

void setup()
{
pinMode (8, OUTPUT);
pinMode (9, OUTPUT);
}

void loop()
{
digitalWrite (8, LOW);
digitalWrite (9, HIGH);
delay (200);
digitalWrite (9, LOW);
digitalWrite (8, HIGH);
delay (200);
}

MfG Pantherinae

Genauso sieht es aus. Im Grunde muss man halt nur aufpassen das kein zu hoher STrom fließt bzw eine zu hohe Spannung anliegt. Ich persöhnlich nutze wenn ich höhere Spannungen überwache als 5V trotz Vorteiler immer noch eine 5,1V Z-Diode (Eingänge sind bis max 5,5V "belastbar"). Dann ist man noch sicherer.

max. 40 mA pro Port und 200mA für alle Ports zusammen

Pantherinae: Das heißt für das abwechselnde Leuchten einer Dual-LED könnte ich den Sketch folgendermaßen schreiben: Die Led wäre dann zwischen Pin 8 und 9 verklemmt.

Ich hoffe Du schließt die LED mit Vorwiderstand in Reihe an.

PS den Kode hebt man mit der Taste mit der Rautentaste hervor.

Grüße Uwe

kduin: [quote author=Udo Klein link=topic=79510.msg600958#msg600958 date=1321717236] Klar kann bei sowas der Controller beschädigt werden.

max. 40 mA pro Port und 200mA für alle Ports zusammen [/quote] Was denn nu? Aus dem Datenblatt Atmega8/Atmega168: "Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device." Klingt für mich nicht nach Kurzschlussfest!

Nee, sind nicht kurzschlußfest.
Grüße Uwe

Schwarzfuss:

kduin: [quote author=Udo Klein link=topic=79510.msg600958#msg600958 date=1321717236] Klar kann bei sowas der Controller beschädigt werden.

max. 40 mA pro Port und 200mA für alle Ports zusammen

Was denn nu? Aus dem Datenblatt Atmega8/Atmega168: "Stresses beyond those listed under “Absolute Maximum Ratings” may cause permanent damage to the device." Klingt für mich nicht nach Kurzschlussfest! [/quote] Ich denke kduin wollte freundlicherweise sagen, dass der max. Strom, der in einen Port hinein- oder herausfließen darf (Sink oder Source) laut Angaben im Datenblatt tunlichst auf 40 mA begrenzt werden sollte. Dass das Ding kurzschlussfest sein soll, kann ich aus seinen Angaben nicht deuten.

Wolfgang

Ist es also generell Sinnvoll, bevor man eine neue Schaltung mit dem Arduino verbindet, den BareMinimum - Sketch zu laden ?

Hallo Knauf,

was erhoffst du dir davon?

Der BareMinimum-Sketch tut garnichts (mal abgesehen davon, dass in init() für dich unsichtbar ein paar Timer konfiguriert werden)! Das kannst du auch sehen, wenn du dir den Code anschaust: da stehen in setup() und loop() keine Befehle drin.

Es werden keine Pins auf Ein- oder Ausgang geschaltet, es wird kein Ausgang gesetzt oder zurückgesetzt, es werden keine internen Pull-Up-Widerstände aktiviert oder deaktiviert. Nix!

Im übrigen ist nach einem Reset des Mikrocontrollers (durch Resettaster, Einschalten der Versorgungsspannung, usw.) alles im ungefährlichen Zustand: die I/O-Pins sind im hochohmigen Zustand auf Eingang geschaltet. Da kannst du beliebig 0 Volt oder 5 Volt anlegen ohne etwas kaputt zu machen. Erst wenn dein Programm einen Pin auf "Ausgang" schaltet (z.B. mit pinMode() ) kann es gefährlich werden. Aber da rettet dich auch kein vorheriges Aufrufen des BareMinimum-Sketches oder eines sonstigen Programms.

Wolfgang

Naja, was für den Controller gilt, gilt für den Arduino noch lange nicht. Siehe hier: http://blog.blinkenlight.net/experiments/basic-sketches/. Davon abgesehen ist alles auf "high Z" nicht notwendig "ungefährlich". Sowas hängt immer auch von der restlichen Schaltung ab. Man sollte so designen, daß diese Situation ungefährlich ist, aber von selber passiert sowas nicht.

voithian: Dass das Ding kurzschlussfest sein soll, kann ich aus seinen Angaben nicht deuten.

So interpretiert halt jeder für sich selbst eine Aneinanderreihung von Worten, ich lese aus "Reply #6" das Anzweifeln von Udos Post, und wollte eine Klarstellung erreichen, falls es jemand genauso deutet. 8)

[quote author=Udo Klein link=topic=79510.msg601931#msg601931 date=1321810046] Naja, was für den Controller gilt, gilt für den Arduino noch lange nicht. Siehe hier: http://blog.blinkenlight.net/experiments/basic-sketches/. [/quote] Wenn man mal von den Sonderfällen der Pins für Rx, Tx und Pin 13 absieht, kann man Arduino-Pins und Controller-Pins doch gleichsetzen, oder? Die sind doch direkt durchverbunden. Unterschiede kann es natürlich durch eine angeschlossene Hardware geben, das ist klar.

Davon abgesehen ist alles auf "high Z" nicht notwendig "ungefährlich". Sowas hängt immer auch von der restlichen Schaltung ab.

Das "ungefährlich" bezog sich natürlich darauf, dass man an einen sonst nicht anderweitig beschalteten Pin im "high Z"-Zustand beliebig GND oder +5V (selbst aus einem 20A-Netzteil) anlegen kann ohne dass etwas passiert (So wie es durch den im Eingangsposting beschriebenen Taster passieren könnte. So habe ich jedenfalls die Eingangsfrage verstanden).

Man sollte so designen, daß diese Situation ungefährlich ist, aber von selber passiert sowas nicht.

Auch ich bin ein Freund von Vorwiderständen und definierten Eingangssignalen durch Pull-up- oder Pull-down-Widerständen ;)

Erst wenn dein Programm einen Pin auf “Ausgang” schaltet (z.B. mit pinMode() ) kann es gefährlich werden. Aber da rettet dich auch kein vorheriges Aufrufen des BareMinimum-Sketches oder eines sonstigen Programms.

@ voithian
genau , der BareMinimum Sketch tut “nix”, darum ging es mir

Bei mir ist jede Schaltung ein “Prototyp”, d.h.: ich baue was auf, programmiere etwas, reisse die Schaltung
wieder ab und baue was neues auf.
Es ist also gut möglich das was bei der einen Schaltung ein Ausgang war nun ein Eingang ist.

Darum meine “Anfängerfrage” ob ich auf der “sicheren Seite” bin den Arduino sozusagen in einen Zustand zu bringen wo die Pins noch nicht geschaltet sind.

gruß Dennis

Knauf: Bei mir ist jede Schaltung ein "Prototyp", d.h.: ich baue was auf, programmiere etwas, reisse die Schaltung wieder ab und baue was neues auf. Es ist also gut möglich das was bei der einen Schaltung ein Ausgang war nun ein Eingang ist.

Darum meine "Anfängerfrage" ob ich auf der "sicheren Seite" bin den Arduino sozusagen in einen Zustand zu bringen wo die Pins noch nicht geschaltet sind.

OK, ich verstehe die Frage jetzt wahrscheinlich richtig: Du möchtest verhindern, dass du bei einer geänderten Schaltung irrtümlich noch das alte Programm startest, das vielleicht Pins als Ausgang setzt, die du im neuen Programm als Eingang verwendest, richtig?

Dann kannst du natürlich das BareMinimum-Programm verwenden, um das alte Programm zu "putzen" und die Pins in einen unkritischen Zustand zu bringen (siehe meine vorhergehende Antwort und die zusätzlichen Anmerkungen von Udo).

Ah ok, vielen Dank Euch allen ;)

Und ja , ich habe mich wohl etwas umständlich ausgedrückt, danke fürs mitdenken :roll_eyes:

Vielen Dank euch allen :)

Dann hätte ich noch ein paar Fragen...

Wenn ich den BareMinimum Sketch auf das Arduino Uno Board lade, wie sind dann die Pins belegt? Ein-/oder Ausgang?

Wenn ich fertig bin lade ich momentan jedes Mal den Blink Sketch auf das Board. Dieser war, soweit ich mich erinnere ab Werk darauf. Wie sind in dem Falle die Pins bis auf Pin 13 belegt? Diese müssten dann doch wie die im BareMinimum Sketch belegt seid, da diese nicht im Sketch erwähnt werden.

Und wie ist es mit Pin 0 und 1, an diesen steht ja TX und RX, dürfen diese eigentlich auf dem Board als Ein-/und Ausgänge verwendet werden? Denn wenn ich Pin 1 als Ausgang setze und eine LED daran klemme blinkt bei jedem aufleuchten der LED die SMD-LED TX kurz auf.

Anbei noch, natürlich benutze ich Vorwiderstände ;)

MfG Pantherinae