Forum: Mikrocontroller und Digitale Elektronik Atmega16 Bi-Direktional deklarieren


von Heiko H. (heiko_h)


Lesenswert?

Hi, wie kann ich z.b. PORTD bei einem Atmega16 Bi-Direktional 
deklarieren?

Wenn ich PortD als Ausgang setzte muss ich

PORTD = 0x00

DDRD = 0x00

schreiben.

Aber bei Bi-Direktional?

von Thomas E. (thomase)


Lesenswert?

Heiko Heik schrieb:
> DDRD = 0x00

Das ist Eingang. Bidirektional geht nicht. Du kannst höchstens bei 
Eingang einen Pullup setzen.

mfg.

von Karl H. (kbuchegg)


Lesenswert?

Gar nicht

von Sven P. (Gast)


Lesenswert?

Der Port ist immer bidirektional.
Wenn du ihn als Ausgang konfigurierst und einschaltest:
1
DDRA = 0xFF;
2
PORTA = 0xFF;

Und dann den ganzen Port nach Masse kurzschließt, dann wirst du PORTA 
als 0xFF und PINA als 0x00 lesen. Zumindest suggeriert das das 
Schaltbild im Datenblatt...

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Sven P. schrieb:
> dann wirst du PORTA als 0xFF und PINA als 0x00 lesen.
> Zumindest suggeriert das das Schaltbild im Datenblatt...
Das ist auch so. Nur sollte das mit dem Auslesen passieren, vor der 
Porttreiber abraucht...  :-o

von Thomas E. (thomase)


Lesenswert?

Sven P. schrieb:
> Masse kurzschließt,

Das ist das Problem. Da wird nicht nur einfach ein 10K Pullup 
reingehängt.

mfg.

von holger (Gast)


Lesenswert?

>Hi, wie kann ich z.b. PORTD bei einem Atmega16 Bi-Direktional
>deklarieren?

Sag einfach mal was du machen möchtest.
Wenn man den Portd als quasi OpenCollector betreibt
geht da schon was. Was hängt am Port?

von heiko_h (Gast)


Lesenswert?

Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.

von Karl H. (kbuchegg)


Lesenswert?

heiko_h schrieb:
> Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.

Und?
Was hindert dich daran?

Die einzelnen Pins kannst du beliebig entweder Ein- oder Ausgang 
zuordnen.
Aber hier dachten alle, du willst EINEN Pin bidirektional betreiben.

von holger (Gast)


Lesenswert?

>Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.

Was hat das jetzt mit bidirektional zu tun?

DDRD |= 1<<PD5;

Fertig.

von heiko_h (Gast)


Lesenswert?

An den Port habe ich davor noch eine Transistorpegel wandlung dranhängen 
mit PullUp auf 5V.

von heiko_h (Gast)


Lesenswert?

holger schrieb:
>>Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.
>
> Was hat das jetzt mit bidirektional zu tun?
>
> DDRD |= 1<<PD5;
>
> Fertig.

Mit dieser Deklaration ist der PD5 nun Bidirektional oder als Ausgang 
deklariert?

von Thomas E. (thomase)


Lesenswert?

heiko_h schrieb:
> Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.

Das ist natürlich ganz was anderes. Jeder Portpin kann einzeln als Ein- 
oder Ausgang betrieben werden. Nicht der ganze PortD wird umgeschaltet.

http://www.mikrocontroller.net/articles/AVR-GCC-Tutorial#Zugriff_auf_IO-Ports

mfg.

von holger (Gast)


Lesenswert?

>An den Port habe ich davor noch eine Transistorpegel wandlung dranhängen
>mit PullUp auf 5V.

Wie schön für dich. Schaltplan?

von Karl H. (kbuchegg)


Lesenswert?

heiko_h schrieb:
> holger schrieb:
>>>Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.
>>
>> Was hat das jetzt mit bidirektional zu tun?
>>
>> DDRD |= 1<<PD5;
>>
>> Fertig.
>
> Mit dieser Deklaration ist der PD5 nun Bidirektional oder als Ausgang
> deklariert?

Tu dir selbst einen Gefallen und schau in die Tutorien rein!

AVR-GCC-Tutorial
AVR-Tutorial

von heiko_h (Gast)


Lesenswert?

Also ich habe mich jetzt mal nen bischen in das Tutorial reingelesen.

Alle Ports ains Standartgemäß Eingänge:

Habe nun folgendes deklariert:

//Port D deklarieren (PD5 als Ausgang gesetzt)

 DDRD = (1<<PD5);

damit ist nun PD5 als Ausgang deklariert und alle anderen bleiben als
Eingang bestehen. Ist das so richtig?

von Thomas E. (thomase)


Lesenswert?

heiko_h schrieb:
> damit ist nun PD5 als Ausgang deklariert und alle anderen bleiben als
>
> Eingang bestehen. Ist das so richtig?

Ja

mfg.

von heiko_h (Gast)


Lesenswert?

Okay danke euch für die Hilfe.

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.