Forum: Mikrocontroller und Digitale Elektronik IO Pin defekt durch falsches DDR Register?


von Markus H. (holzbaer)


Lesenswert?

Hi, Kann es sein dass ein IO Pin der als Ausgang definiert ist DDRx auf 
"1" und das PORTx auf "1" gesetzt wurde, über das PINx Register auch 
eingelesen werden kann?
Draussen ist ein Schalter direkt auf GND!
In weiterer Folge wurde der PIN übrigens defekt! Ich denke der FET am IO 
Pin gab irgendwann mal den Geist auf, aber ein paar hundert Kurzschlüsse 
gegen GND hat er anscheinend verkraftet!?
Kann meine Theorie stimmen?

von spess53 (Gast)


Lesenswert?

Hi

>Kann meine Theorie stimmen?

Welche?

MfG Spess

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

Du hast den Pin kurzgeschlossen und gnadenlos überlastet - klar ist der 
jetzt kaputt. PINXn liefert immer den physikalischen Status eines PINs, 
auch wenn er als Ausgang definiert ist, deshalb hat das wohl eine Zeit 
lang funktioniert.


Gruß
Jonathan

von Christopher G. (cbg)


Lesenswert?

Paging Dr. Manual, paging Dr. Manual!
Bei AVRs kann man immer über das PIN Register den Pinzustand einlesen.

von Noah (Gast)


Lesenswert?

Ja. Der hält das aus. Man kann ihn als ausgang auf high schalten und 
runterziehen und liest eine 0 am PIN, irgendwann geht er davon aber 
kaputt. die schaltung auf seite 47 im datenblatt: 
http://www.atmel.com/dyn/resources/prod_documents/doc2543.pdf lässt auch 
darauf schliessen, dass es so sein müsste.

von Markus H. (holzbaer)


Lesenswert?

Hi, das ist es! Danke!
Hab das auch gerade mit nem Emulator und der IO-view nachgecheckt!
War verdammt schwer rauszufinden warum ein Eingang direkt am uP defekt 
wird, wenn man die Software nicht selbst hat!
Hatte schon alles Mögliche mit Überspannung Induktionsspannung usw.. in 
Verdacht. Aber es ist wirklich nur Software - Irre...

von Andreas (Gast)


Lesenswert?

Markus H. schrieb:
> Aber es ist wirklich nur Software - Irre...

Mit der Software hat das nichts zu tun, sondern nur und ausschließlich 
mit Deiner Hardware. Man schließt einen Schalter gegen GND nicht direkt 
an einen Portpin an. Man macht einen 10k Widerstand zwischen Schalter 
und Pin.

von Markus H. (holzbaer)


Lesenswert?

Das ist mir schon klar, wenn es "NORMAL" läuft würde ich das auch 
machen. Clamping Dioden bzw. TVS Diode würde ich auch vorsehen.
In der Regel mache ich sogar einen Optokoppler drauf, wenn schon ein 
Kabel von der Baugruppe nach außen geht!
Leider handelt es sich hierbei um einen von vorne herein nicht geplanten 
Taster den der Kunde mehr oder weniger erpresst hat.
Man kennt das ja, sicherheitshalber sieht man ein paar Portpins auf ner 
Stiftleiste vor um eventuell im Nachhinein flexibler zu sein - und schon 
wird auch was draufgetrixt...
Wie dem auch sei, das ganze Schlamassel wäre nie passiert, wäre die 
Software ordentlich ausgeführt worden.

von Volker S. (volkerschulz)


Lesenswert?

Andreas schrieb:
> [...]
> Mit der Software hat das nichts zu tun, sondern nur und ausschließlich
> mit Deiner Hardware. Man schließt einen Schalter gegen GND nicht direkt
> an einen Portpin an. Man macht einen 10k Widerstand zwischen Schalter
> und Pin.

Und warum sollte man das generell tun? Um der 10K-Widerstandsindustrie 
in Zeiten der Weltwirtschaftskrise den Ruecken zu staerken? Man verbaut 
doch keine unnuetzen Widerstaende (schon gar nicht in der 
Serienproduktion) um sich davor zu schuetzen, dass ein 
Softwarenetwickler zu doof ist einen Eingang auch als Eingang zu 
definieren...

Volker

von Jonathan S. (joni-st) Benutzerseite


Lesenswert?

In der Entwicklung oder bei Umbauten macht man das schon. Wär ja 
dämlich, wenn ein 5€-µC kaputtgeht, nur weil man 1ct für einen 
Widerstand sparen will... In der Serienproduktion macht man sowas 
natürlich nicht, da spielt 1ct schon eine Rolle.


Gruß
Jonathan

von Stone (Gast)


Lesenswert?

> Man macht einen 10k Widerstand zwischen Schalter
> und Pin.
Warum genau baut man einen Spannungteiler an eigen digital IO ?
Also man hat entweder einen floating Pin wenn der Taster nicht gedrückt 
ist, oder nen Spannungteiler mit dem (internen) Pull up. Klingt ja nach 
nem tollen Vorschlag.
Also 270-800 Ohm wären ja noch ok, aber 10k.


Gruß Matthias

von Karl H. (kbuchegg)


Lesenswert?

Markus H. schrieb:

> Wie dem auch sei, das ganze Schlamassel wäre nie passiert, wäre die
> Software ordentlich ausgeführt worden.


Da wird ein klärendes Gespräch mit dem Entwickler notwendig. Du musst 
ihm klar machen, dass er das verbockt hat und auch warum.
Es geht nicht um Schuldzuweisung sondern darum, dass er das nie wieder 
macht. Und vor allen Dingen, dass er sich überlegt, wie er seinen 
Codierstil verändern muss, damit ihm sowas nicht noch einmal passiert.

von Volker S. (volkerschulz)


Lesenswert?

Jonathan Strobl schrieb:
> In der Entwicklung oder bei Umbauten macht man das schon. Wär ja
> dämlich, wenn ein 5€-µC kaputtgeht, nur weil man 1ct für einen
> Widerstand sparen will...

Der µC geht ja eben nicht kaputt weil man am Widerstand gespart hat, 
sondern weil der Entwickler Mist gebaut hat. Wenn man (in der 
Entwicklung) alle Eventualitaeten abdecken will, ist es auch mit einem 
Widerstand nicht getan.

> In der Serienproduktion macht man sowas
> natürlich nicht, da spielt 1ct schon eine Rolle.

Nun ist es natuerlich auch nicht so ganz sinnvoll dem Prototypen einen 
Widerstand zu spendieren, um nachher zu merken dass die Seriengeraete 
abrauchen. Da ist der defekte 5€-µC schon die bessere Wahl.

Es ging mir aber eigentlich auch nur darum dass Andreas 'man macht das 
so nicht' nicht generalisiert wird. In diesem speziellen Falle lag der 
Fehler ganz klar beim Entwickler, auch wenn der Elektroniker ihn 
vielleicht weniger schlimm haette aussehen lassen koennen. ;)

Volker

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.