ATmega: AUSgang lesen

Gast #4473096
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.
#4473139
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
Gast #4473140
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...
#4473148
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.
#4473171
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.
#4473172
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...
#4473178
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"! ;-)
#4473182
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 ;-)
Moderator Persönliche Seite #4473195
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.
Gast #4473230
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 ;-)
Gast #4473240
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.
Gast #4473250
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...
#4473269
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
Moderator Persönliche Seite #4473300
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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren