mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik PORTA ??


Autor: Greenhorn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich habe eine hoffentlich einfache Frage. Den folgenden Code-Ausschnitte 
programmiere ich in meinen ATmega32. Warum ist aber der PINA0 auf HIGH. 
Ich habe doch DDRA auf Eingang gestellt.

int main (void)
{
DDRA=0x00;
PORTA=(1<<PA0);
return 0;
}

Danke

Autor: Ulrich (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry aber das wird dir hoffenltich nimand hier sagen!!!

Was verstehst du nicht im Datenblatt?

Autor: Jens (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Weil du mit PORTA in diesem Fall die internen pull-ups aktivierst. Du 
mußt den Pin dann extern auf Masse ziehen, um eine Veränderung zu 
erkennen.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Greenhorn

>ich habe eine hoffentlich einfache Frage. Den folgenden Code-Ausschnitte
>programmiere ich in meinen ATmega32. Warum ist aber der PINA0 auf HIGH.
>Ich habe doch DDRA auf Eingang gestellt.

Mal abgesehen davon, dass es wenig Sinn macht einem Port, welcher als 
Eingang definiert ist einen Wert zuzuweisen.
Allerdings bewirkt das beim AVR, dass der interne Pull-up von PA1 
eingeschaltet wird.
Siehe Datenblatt.

MFG
Falk



Autor: Bri (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hab doch Mitleid mit dem Greenhorn.

Du hast den Pullup-Widerstand aktiviert!

Autor: Michael Wilhelm (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
[c]
int main (void)
{
DDRA=0x00;     //Datenrichtung Eingang
PORTA=(1<<PA0);//Pull Up aktiviert
return 0;
}
[/]
Der Controller macht genau, was du ihm sagst.

MW

Autor: Greenhorn (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ja jetzt habe ich es im Datenblatt gesehen. Wenn ich einen PIN auf High 
schalte sind folgende Codezeilen elektrisch äquivalent.

DDRA=0xFF;
PORTA=(1<<PA0);

DDRA=0x00;
PORTA=(1<<PA0);

Das Ergebnis in beiden Fällen ist HIGH.

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Greenhorn

>ja jetzt habe ich es im Datenblatt gesehen. Wenn ich einen PIN auf High
>schalte sind folgende Codezeilen elektrisch äquivalent.

Nicht ganz.

>DDRA=0xFF;
>PORTA=(1<<PA0);

Das ist ein Ausgang, der HIGH treibt. Dort kann man schon ordentlich 
Strom rausziehen (20mA) ohne dass die Spannung wesentlich in die Knie 
geht.


>DDRA=0x00;
>PORTA=(1<<PA0);

Das ist nur ein interner Pull-up, 30-50 kOhm. Damit kann man bestenfalls 
Taster auswerten, nennenswert Strom bekommt man aus dem Pion nicht raus.

>Das Ergebnis in beiden Fällen ist HIGH.

Wenn keinerlei Last am Pin hängt.

MFG
Falk

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das heist aber nicht das sie elektrisch
äquivalent sind.

Das eine mal (Eingang) ist der Pin High, weil über den
Pullup Widerstand der Pin mit Vcc verbunden
ist. Du kannst so einen Pin ohne Bedenken mit Masse
verbinden. Der Pin wird auf Low gezogen und beim Abfragen
erkennt der µC das als Low an

Das andere mal (Ausgang) ist der Pin High, weil der
Port Ausgangstreiber da aktiv Strom drauf legst.
Wenn du so einen Pin mit Masse verbindest, baust du einen
Kurzschluss und überlastest den Ausgangstreiber, der dann
irgendwann in Rauch aufgehen wird.

Autor: Oliver (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
>sind folgende Codezeilen elektrisch äquivalent

Codezeilen sind sowieso nicht elektrisch, und äquivalent sind die auch 
nicht.

Programmierst du
DDRA=0x00;
PORTA=(1<<PA0);

und legst den Pin0 von PortA danach auf Masse (z.B. per Taster), dann 
geht das entsprechende PINA-Bit auf 0, und du kannst den Tastendruck 
auswerten.

Programmierst du
DDRA=0xFF;
PORTA=(1<<PA0);

und legst den Pin0 von PortA danach auf Masse (z.B. per Taster), dann 
geht der Ausgang kaputt, und du kannst den AVR wegwerfen.
Als äquivalent würde ich das nicht bezeichen.

Oliver

Autor: Hauke Radtki (lafkaschar) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Elektrisch equivalent?!
Nö.

DDRA=0xFF;
PORTA=(1<<PA0);

So hast du den Port auf Ausgang geschaltet und hast auf dem Pin ein High 
ausgegeben. In dieser "Betriebsart" kannst du auch Strom aus dem Port 
ziehen (da per Mosfet die Versorgungsspannung auf den Pin geschaltet 
ist)

DDRA=0x00;
PORTA=(1<<PA0);

Hier hast du den Port als Eingang. Bei dem Pin ist der Pullupwiderstand 
aktiviert. Dieser liegt in der Größenordnung von 50kOhm (wenn ich mich 
recht errinnere) Wenn du jetzt eine etwas längere Leitung dran hast 
schau dir mal die Flanken vom Signal an ... Durch den Widerstand und die 
Leitung wird ein Tiefpassfilter gebildet.

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.