Gast
#3172653
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...