Forum: Mikrocontroller und Digitale Elektronik PORTA ??


von Greenhorn (Gast)


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

von Ulrich (Gast)


Lesenswert?

Sorry aber das wird dir hoffenltich nimand hier sagen!!!

Was verstehst du nicht im Datenblatt?

von Jens (Gast)


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.

von Falk (Gast)


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



von Bri (Gast)


Lesenswert?

Hab doch Mitleid mit dem Greenhorn.

Du hast den Pullup-Widerstand aktiviert!

von Michael Wilhelm (Gast)


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

von Greenhorn (Gast)


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.

von Falk (Gast)


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

von Karl H. (kbuchegg)


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.

von Oliver (Gast)


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

von Hauke R. (lafkaschar) Benutzerseite


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.

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.