Forum: Mikrocontroller und Digitale Elektronik ATmega: AUSgang lesen


von Glücklicher Lusthase (Gast)


Lesenswert?

Im Datenblatt des ATmega steht der kleine Satz: "Independent of the 
setting of Data Direction bit DDxn, the port pin can be read through the 
PINxn Register bit."
Ist es damit möglich, z.B. einen Kurzschluss eines Ausgangs nach Masse 
zu erkennen? Ich habe das noch nicht probiert. Es wäre aber für die 
automatische Fehlersuche keine schlechte Sache.

von Rene K. (xdraconix)


Lesenswert?

???

Du willst erkennen ob der Pin gegen Masse schaltet?! Ja das ist ja der 
ganze Sinn dahinter - Gegen Masse oder gegen VCC... Das nennt man halt 
Eingang.

von Ingo Less (Gast)


Lesenswert?

Nee Rene,
Er will gucken ob wenn der Pin high sein sollte er auch high ist. Denn 
falls nicht, stimmt etwas nicht.

von Peter (Gast)


Lesenswert?

Nein, das meint er nicht. Er will wissen, ob sich der gelesene Wert bei 
einem AUSgang (DDRx-Bit gesetzt) sinnvoll verwenden lässt. Zur 
Fehlererkennung.

von Paul B. (paul_baumann)


Lesenswert?

Rene K. schrieb:
> Du willst erkennen ob der Pin gegen Masse schaltet?!

Nein, er will erkennen, ob ein Pin, der als Ausgang programmiert wurde 
und als solcher "mit Gewalt" gegen seine Willen bei H-Signal auf Masse 
gezogen wird. Er möchte dann im PINX-Register sehen, ob das passiert.
------------------------------------------------------------------------ 
--
Ich habe es auch nicht probiert, denke aber, daß Du in dem Register nur 
das lesen kannst, was Du ausgibst, auch wenn der Ausgang in Natura durch 
einen Masseschluß au L gezerrt wurde.

MfG Paul

von c-hater (Gast)


Lesenswert?

Glücklicher Lusthase schrieb:

> Im Datenblatt des ATmega steht der kleine Satz: "Independent of the
> setting of Data Direction bit DDxn, the port pin can be read through the
> PINxn Register bit."
> Ist es damit möglich, z.B. einen Kurzschluss eines Ausgangs nach Masse
> zu erkennen?

Ja. Wenn du für diesen Ausgang zuvor den internen Pullup aktivierst, 
mindestens einen Takt wartest und dann das entprechende Bit in PINB 
liest, wird das bei einem Masseschluss des Pins auf Low sein, ansonsten 
auf High.

Allerdings: wenn du derartige Mechanismen zur Fehlersuche benötigst, 
solltest du dringend an deiner physischen Fertigung Verbesserungen 
vornehmen...

von Rene K. (xdraconix)


Lesenswert?

Also wenn der Pin als Ausgang definiert ist... der Ausgang als High 
gesetzt wird. Dann messen ob der Pin auch wirklich High ist?

Im Grunde so:
1
DDRB |= (1<<1);     //PB1 als Ausgang
2
PORTB |= (1<<1);    //PB1 auf High setzen
3
4
if ( !(PINB & (1<<1)) ) {
5
  // Bit ist nicht gesetzt


Das geht nicht, da der nicht der Pinstatus gelesen wird, sondern der in 
das Register PINxn geschriebene Bit. Und der ist dann halt auf high, 
auch wenn er einen kurzen zu Masse hat.

von Peter (Gast)


Lesenswert?

Dann steht im Datenblatt aber Nonsens.

von Rene K. (xdraconix)


Lesenswert?

Wieso?

Der Satz sagt doch nicht das er im Ausgangzustandes des jeweiligen 
Portregisters den Pin Status als Eingang lesen kann.

"Independent of the
setting of Data Direction bit DDxn, the port pin can be read through the
PINxn Register bit."

In Abhängigkeit der Datenrichtung (Und damit ist hier definitiv EINGANG 
gemeint), kann das PIN Register gelesen werden. Da steht nicht, das ein 
als Ausgang definierter Pin auch als Eingang gelesen werden kann.

von Tassilo H. (tassilo_h)


Lesenswert?

Rene K. schrieb:

> Das geht nicht, da der nicht der Pinstatus gelesen wird, sondern der in
> das Register PINxn geschriebene Bit. Und der ist dann halt auf high,
> auch wenn er einen kurzen zu Masse hat.

Warum sollte das so sein: Lesen von PORTx gibt das zurueck, was in 
Ausgangsregister steht. Lesen von PINx gibt den Pegel am PIN zurueck.

Wenn man den Ausgang kurzschließt, hat man einen Spannungsteiler aus 
Ausgangstransistor, Interconnect auf dem Chip, Bonddraht, Leiterbahn, 
und Kurzschlußbrücke. Wenn dabei der Widerstand des (durchgeschalteten) 
Ausgangstransistors überwiegt, wird man den Kurzschluß vmtl. erkennen 
können. Und gleichzeitig den Ausgangstransistor jenseits der Spec 
betreiben, also ist nichts garantiert.

Nachtrag: Klar kann man den PIN lesen, wenn DDR auf Ausgang steht. Man 
schaue sich das Ersatzschaltbild der IO-Logik im Datenblatt an...

: Bearbeitet durch User
von Tassilo H. (tassilo_h)


Lesenswert?

Rene K. schrieb:
> Wieso?
>
> Der Satz sagt doch nicht das er im Ausgangzustandes des jeweiligen
> Portregisters den Pin Status als Eingang lesen kann.
>
> "Independent of the
> setting of Data Direction bit DDxn, the port pin can be read through the
> PINxn Register bit."
>
> In Abhängigkeit der Datenrichtung (Und damit ist hier definitiv EINGANG
> gemeint), kann das PIN Register gelesen werden. Da steht nicht, das ein
> als Ausgang definierter Pin auch als Eingang gelesen werden kann.

Da steht nicht "in Abhängigkeit von" sondern "UNABHÄNGIG VON der 
Einstellung des Data Direction bits DDxn kann der Portpin durch das PINx 
Register bit gelesen werden"! ;-)

von Carl D. (jcw2)


Lesenswert?

> "Independent of the
> setting of Data Direction bit DDxn, the port pin can be read through the
> PINxn Register bit."

"Unabhängig von der Datenrichtung in DDxn, kann der (physische) PortPin 
über PINxn gelesen werden"

Es gibt doch heute Google-Translate, da kann man grobe 
Sprachunkenntnusse ausgleichen ;-)

von Rene K. (xdraconix)


Lesenswert?

Tassilo H. schrieb:
> Da steht nicht "in Abhängigkeit von" sondern "UNABHÄNGIG VON der
> Einstellung des Data Direction bits DDxn kann der Portpin durch das PINx
> Register bit gelesen werden"! ;-)

Oh... :D Ja stimmt... Mein Fehler!

von Carl D. (jcw2)


Lesenswert?

Läst sich auch sprachunabhängig aus den (vereinfachten) 
IO-Port-Schaltplan im DB rauslesen.
Sofern man diese Fremdsprache versteht ;-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Rene K. schrieb:
> Das geht nicht, da der nicht der Pinstatus gelesen wird, sondern der in
> das Register PINxn geschriebene Bit.

Humbug.  Wenn du ins Register PINxn etwas schreibst, dann führt das
(bei allen halbwegs modernen AVRs) dazu, dass der Pin toggelt.

Aus PORTxn liest du zurück, was zuvor dahin geschrieben worden ist,
aber PINxn liest in der Tat den Zustand der Eingangszelle zurück.

von Paul B. (paul_baumann)


Lesenswert?

Ich opfere keinen Kontroller, um festzustellen, was nun stimmt.

---------------------------------------------------------------
Dazu fällt mir ein:
2 Kumpel beim Bier: "Sag mal -wie ist denn Deine Frau so im Bett?"
"Ach, die Einen sagen So, die Anderen so"

MfG Paul

von m.n. (Gast)


Lesenswert?

Paul B. schrieb:
> Ich opfere keinen Kontroller, um festzustellen, was nun stimmt.

Einfach das Datenblatt lesen oder den Ausgangsimpuls auf µs begrenzen!

Das Schöne beim AVR ist noch, daß man bei den Ausgängen, die 
ADC-Eingänge sind, auch die Spannung messen kann. Experten können daran 
feststellen, wieweit der Kurzschluß entfernt ist ;-)

von c-hater (Gast)


Lesenswert?

Paul B. schrieb:

> Ich opfere keinen Kontroller, um festzustellen, was nun stimmt.

Wenn du einen Controller "opfern" musst, nur um herauszubekommen, ob 
stimmt, was lt. DB zu erwarten ist, dann machst du definitiv irgendetwas 
grundfalsch...

von Stefan F. (Gast)


Lesenswert?

Ich hatte das mal ausprobiert, zu einer Zeit, als ich das 
Blockschaltbild im Datenblatt noch noch verstanden hatte.

Wenn man das PORTx Register liest, erhält man immer den Wert, den der 
Port haben SOLL, sofern er denn als Ausgang konfiguriert ist.

Wenn man das PINx Register liest, erhält man immer den aktuellen 
tatsächlichen Wert der Pins. Kurzschlüsse kann man durch Lesen der PINx 
Register erkennen.

von Ingo Less (Gast)


Lesenswert?

Die Frage was nun stimmt stellt sich nicht. Man kann den Pegel über das 
PINx Register lesen. Was man über den Ausgang einstellt kann man am PINx 
Register (und auch am Port-Register sehen) wenn beide Ungleich sind 
liegt ein Fehler vor...

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Paul B. schrieb:
> Ich opfere keinen Kontroller, um festzustellen, was nun stimmt.

Dann speise ihn mit 1,8 V, da ist die Stromergiebigkeit der
Ausgänge so gering, dass du noch nichtmal die maximalen Grenzwerte
des Datenblatts überschreitest, wenn du den Ausgang kurzschließt.

von Paul B. (paul_baumann)


Lesenswert?

Oh, wie sie alle gleich anspringen...
:-))

Einmal nur den Ironie-Schnörpel vergessen und schon ist Alles zu spät.

m.n. schrieb:
> Experten können daran
> feststellen, wieweit der Kurzschluß entfernt ist ;-)

Richtig.
Ich habe mir auf diese Weise ein akustisches "Millohmmeter" gebaut, um
ohne auf irgendwelche Skalen oder Displays gucken zu müssen, Fehler 
suchen zu können.

MfG Paul

von Peter (Gast)


Lesenswert?

Interessant. Also PIN Ist-Zustand. PORT Soll-Zustand (auch bei PWM???)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

Peter schrieb:
> PORT Soll-Zustand (auch bei PWM???)

Nein.  Über PORTmn liest du zurück, was du nach PORTmn geschrieben
hast.

Wenn der Port durch alternative Peripherals getrieben wird (Timer,
UART), dann liest du aus PORTmn nur das zurück, was normalerweise
auf den Port ausgegeben werden würde.

Über PINmn dagegen liest du immer den Ist-Zustand.

von Peter (Gast)


Lesenswert?

Ah, ok. Danke. Das ist ein sehr wichtiger Zusatz.

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.