www.mikrocontroller.net

Forum: Mikrocontroller und Digitale Elektronik Atmega16 Bi-Direktional deklarieren


Autor: Heiko Heik (heiko_h)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Heiko Heik schrieb:
> DDRD = 0x00

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

mfg.

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

Bewertung
0 lesenswert
nicht lesenswert
Gar nicht

Autor: Sven P. (haku) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Der Port ist immer bidirektional.
Wenn du ihn als Ausgang konfigurierst und einschaltest:
DDRA = 0xFF;
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...

Autor: Lothar Miller (lkmiller) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sven P. schrieb:
> Masse kurzschließt,

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

mfg.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.

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

Bewertung
0 lesenswert
nicht 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.

Autor: holger (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: heiko_h (Gast)
Datum:

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

Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

Bewertung
0 lesenswert
nicht 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-Tu...

mfg.

Autor: holger (Gast)
Datum:

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

Wie schön für dich. Schaltplan?

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

Bewertung
0 lesenswert
nicht 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

Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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?

Autor: Thomas Eckmann (Firma: Thomas Eckmann Informationst.) (thomase)
Datum:

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

Ja

mfg.

Autor: heiko_h (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Okay danke euch für die Hilfe.

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.