Stomper
29.10.2008, 20:17
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:
//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
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:
//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