Forum: Compiler & IDEs AtMega32 Bitmanipulation


von SMD_Stefan (Gast)


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...

von SMD_Stefan (Gast)


Lesenswert?

Hat sich erledigt, Beinchen waren über Lötzinnreste kurzgeschlossen...

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.