AtMega32 Bitmanipulation

Gast #3172653
Lesenswert?

Hallo,

ich verzweifel grade seit einigen Stunden an einer scheinbar extrem 
leichten Aufgabe:

Ich möchte 2 I/O Pins an einem Atmega32 schalten, und zwar entweder als 
Eingang (Pull-up deaktiviert), oder als Ausgang (high oder low) und das 
voneinander unabhängig. Quellcode und Fehlerbeschreibung sind wie folgt:

1. Fall: beide I/O Pins als eingang (funktioniert;  Messgerät zeigt 
zumindest 0V an)
PORTD &= ~((1<<PD2)|1<<PD3));
DDRD &= ~((1<<PD2)|(1<<PD3));

2. Fall: PD3 soll Ausgang (high) sein, PD 2 eingang
PORTD |= (1<<PD3);
DDRD |= (1<<PD3);
PORTD &= ~(1<<PD2);
DDRD &= ~(1<<PD2);
---> Beide Pins zeigen 5V an. Eigentlich soll ja nur PD3 5V ausspucken, 
und PD2 floaten (vermutlich nahe an 0V)

3. Fall: beide I/O Pins als Ausgang, beide low (funktioniert)
PORTD &= ~((1<<PD2)|(1<<PD3));
DDRD |= ((1<<PD2)|(1<<PD3));

4. Fall: beide I/O Pins als Ausgang, PD2 high, PD3 low:
PORTD |= (1<<PD2);
PORTD &= ~(1<<PD3);
DDRD |= ((1<<PD2)|(1<<PD3));
------> Beide Pins haben nun die gleiche Ausgangsspannung, und zwar etwa 
2,6V.

5. Fall: wie 4. Fall, nur PD2 low, PD3 high:
PORT |= (1<<PD3);
PORT &= ~(1<<PD2);
DDR |= (1<<PD2);
DDR |= (1<<PD3);
(gleicher Fehler wie bei 4.)

Hat jemand eine Idee?

Grüße...

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren