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
Lesezeichen