www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik I/O des ATMega als Strom Senke


Autor: Jochen K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich wollte einen I/O Pin eines ATMega32 als zuschaltbare Masse 
verwenden, habe damit aber meine Probleme.

Bisher bin ich davon ausgegangen dass jeder I/O ein OpenCollector 
Ausgang mit zuschaltbarem PullUp Widerstand ist.

Transistor durchschalten:   DDRx = (1 << Pxy);
Transistor sperren:         DDRx = (0 << Pxy);
PullUp zuschalten:          PORTx = (1 << Pxy);
PullUp trennen:             PORTx = (0 << Pxy);

Das heisst mit DDRx = (1 << Pxy); und PORTx = (0 << Pxy); müsste ich 
mehr oder weniger GND am Pin anliegen haben. Wenn ich das mit dem 
Ohmmeter überprüfe habe ich aber diverse MOhm.

(RTFM ist geschehen, schlauer als das was ich hier zusammengefasst habe 
bin ich daraus aber nicht geworden)

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen K. wrote:
> Bisher bin ich davon ausgegangen dass jeder I/O ein OpenCollector
> Ausgang mit zuschaltbarem PullUp Widerstand ist.
Beim AVR ist das aber ein falscher Ausgang.

> Transistor durchschalten:   DDRx = (1 << Pxy);
> Transistor sperren:         DDRx = (0 << Pxy);
> PullUp zuschalten:          PORTx = (1 << Pxy);
> PullUp trennen:             PORTx = (0 << Pxy);
Nicht ganz...

> Das heisst mit DDRx = (1 << Pxy); und PORTx = (0 << Pxy); müsste ich
> mehr oder weniger GND am Pin anliegen haben. Wenn ich das mit dem
> Ohmmeter überprüfe habe ich aber diverse MOhm.
Wer viel misst, misst Mist, ganz besonders hier :-)

> (RTFM ist geschehen, schlauer als das was ich hier zusammengefasst habe
> bin ich daraus aber nicht geworden)
Scheinbar nicht, sonst wüsstest du ja:
DDRx    PORTx     Wirkung
0       0         offen/floating
0       1         Pullup aktiv
1       0         Senke
1       1         Quelle

Im PINx-Register steht immer der tatsächliche Zustand des Ports. Wenn 
du einen Port mit DDRx:PORTx = 1:1 konfigurierst (Quelle, 5V halt) und 
den dann kurzschließt, wird PINx 0 liefern.

Autor: Jochen K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>Scheinbar nicht, sonst wüsstest du ja:
scheinbar doch, denn was ich im ersten Beitrag geschrieben habe ist ja 
nichts anderes als die Tabelle die du zitiert hast.


Nun habe ich aber eher das gegenteilige Problem, nicht dass der I/O als 
Source untauglich ist, sondern dass er nicht richtig sperrt. Mit 
gesperrtem Transistor, deaktiviertem PullUp und am IO anliegenden 12V, 
fließen durch den gesperrten Transistor immer noch über 2mA. Bei 5V sind 
es nur noch nA.

Autor: Benedikt K. (benedikt) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen K. wrote:

> gesperrtem Transistor, deaktiviertem PullUp und am IO anliegenden 12V,
> fließen durch den gesperrten Transistor immer noch über 2mA. Bei 5V sind
> es nur noch nA.

Ist vollkommen klar, denn im Datenblatt steht ausdrücklich, dass man 
maximal bis Vcc+0,5V gehen darf. Du bist also außerhalb der Specs, daher 
kann der AVR machen was er will.

In diesem Fall werden die Schutzdioden leitend daher fließt der Strom.

Autor: Jochen K. (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
ah....danke

Autor: Simon K. (simon) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen K. wrote:
> Nun habe ich aber eher das gegenteilige Problem, nicht dass der I/O als
> Source untauglich ist, sondern dass er nicht richtig sperrt. Mit
> gesperrtem Transistor, deaktiviertem PullUp und am IO anliegenden 12V,
> fließen durch den gesperrten Transistor immer noch über 2mA. Bei 5V sind
> es nur noch nA.

Haha! Ja, ein Scheiß Chip ist das, unfassbar.

Oh mann. Ist das dein Ernst?

Autor: Wolfgang Schmidt (wsm)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Beachte, es gibt noch Schutzdioden gegen Masse und gegen 5V.

12V an einen Port legen ist unsinnig.

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jochen K. wrote:
>>Scheinbar nicht, sonst wüsstest du ja:
> scheinbar doch, denn was ich im ersten Beitrag geschrieben habe ist ja
> nichts anderes als die Tabelle die du zitiert hast.
Nein, du hast es falsch verstanden. Oder du hast es falsch ausgedrückt.
Wenn in DDRx eine '1' steht, ist immer ein Transistor 
durchgeschaltet, entweder der, der nach Masse zieht (PORTx = 0), oder 
der, der nach Vcc zieht (PORTx = 1).
Nur wenn in DDRx eine '0' steht, beeinflusst du mit PORTx den Pull-up.

Die Ausgangsstufen des AVR bestehen aus Totem-Poles, die können sowohl 
Strom liefern als auch versenken.

> Nun habe ich aber eher das gegenteilige Problem, nicht dass der I/O als
> Source untauglich ist, sondern dass er nicht richtig sperrt. Mit
> gesperrtem Transistor, deaktiviertem PullUp und am IO anliegenden 12V,
> fließen durch den gesperrten Transistor immer noch über 2mA.
Das ist sicher dir Schutzdiode.

> Bei 5V sind es nur noch nA.
Das ist der Leckstrom der Transistoren.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.