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?
Heiko Heik schrieb: > DDRD = 0x00 Das ist Eingang. Bidirektional geht nicht. Du kannst höchstens bei Eingang einen Pullup setzen. mfg.
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...
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
Sven P. schrieb: > Masse kurzschließt, Das ist das Problem. Da wird nicht nur einfach ein 10K Pullup reingehängt. mfg.
>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?
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.
>Ich möchte PD5 als Ausgang, PD6 und PD7 als Eingang nutzen.
Was hat das jetzt mit bidirektional zu tun?
DDRD |= 1<<PD5;
Fertig.
An den Port habe ich davor noch eine Transistorpegel wandlung dranhängen mit PullUp auf 5V.
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?
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.
>An den Port habe ich davor noch eine Transistorpegel wandlung dranhängen >mit PullUp auf 5V. Wie schön für dich. Schaltplan?
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
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?
heiko_h schrieb: > damit ist nun PD5 als Ausgang deklariert und alle anderen bleiben als > > Eingang bestehen. Ist das so richtig? Ja mfg.
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.