Hallo,

ich möchte den PortD des Atmega88 als Eingang mit den internen Pullups nutzen. Das scheint allerdings nicht so einfach zu sein.

Dies ist mein C Code den ich benutze um die Ein-Bzw. Ausgänge zu stellen:
Code:
	//Ausgänge einstellen
	DDRC |= ((1<<DDC0) | (1<<DDC1) | (1<<DDC2) | (1<<DDC3) | (1<<DDC4) | (1<<DDC5));
	DDRB |= ((1<<DDB0) | (1<<DDB1) | (1<<DDB2) | (1<<DDB3) | (1<<DDB4) | (1<<DDB5));
	DDRD |= ((1<<DDD7) | (1<<DDD6) | (1<<DDD5));
	DDRD &= (~((1<<DDD4) | (1<<DDD3) | (1<<DDD2) | (1<<DDD1) | (1<<DDD0)));

	//Pullupwiderstände der Taster
	PORTD |= ((1<<PD0) | (1<<PD1) | (1<<PD2) | (1<<PD3) | (1<<PD4));
	PORTB |= (1<<PB6);
Ich weiß dass es teilweise doppelt ist und manche Klammern zu viel sind - aber ich hab alles schon ausprobiert - an den Bitoperatoren liegt es nicht.

Effekt:
PIND0 zieht den Pullup auf ca. 2,5V (von 3,3 VCC) also eigentlich schon komisch. Der Pin funktioniert aber ganz normal.

PIND1-4 ziehen gar nicht hoch - liegen also bei 0 V und funktionieren dementsprechend auch gar nicht.

PINB6 zieht auf die 3,3 V hoch und funktioniert ganz normal.

Es scheint also ein Problem mit dem PORTD zu geben.

Ich finde allerdings keine Lösung - ich habe es auch schon mit einem Atmega168 versucht, der dem 88 ja entspricht aber hier ist es das selbe Phänomen.

Laut Datenblatt sollten die Eingänge aber normal nutzbar sein - ich finde auch nichts dass man die Sonderfunktionen deaktivieren muss.

Wie kann ich den PortD nutzen?

Gruß
Stomper