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.
??? 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.
Nee Rene, Er will gucken ob wenn der Pin high sein sollte er auch high ist. Denn falls nicht, stimmt etwas nicht.
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.
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
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...
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.
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.
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
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"! ;-)
> "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 ;-)
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!
Läst sich auch sprachunabhängig aus den (vereinfachten) IO-Port-Schaltplan im DB rauslesen. Sofern man diese Fremdsprache versteht ;-)
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.
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
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 ;-)
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...
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.
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...
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.
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
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.