Hallo
Sind das die Werte mit internem PullUp? Wenn ja, dann würde ich den ADC über Bord werfen und es mal so versuchen:
Die 1023 sind nur ein Beispiel, grundsätzlich würde wohl auch eine direkte Zuweisung funktionieren:Code:void OdometryData (unsigned int *data) { Vorbereitung zum Lesen der Odometrie-Sensoren. */ DDRC &= ~((1 << PC0) | (1 << PC1)); // Port auf Input=>Back-LEDs gehen aus PORTC |= ((1 << PC0) | (1 << PC1)); // PullUps einschalten für PC0 und PC1 ODOMETRIE_LED_ON; // Odometrie-LED's einschalten /* Linken Odometrie-Sensor lesen */ if (PORTC & (1<<PC1)) data[0]=1023; else data[0]=0; /* Rechten Odometrie-Sensor lesen */ if (PORTC & (1<<PC0)) data[1]=1023; else data[1]=0; }
data[0]=(PORTC & (1<<PC1))/2;
bzw.
data[1]=(PORTC & (1<<PC0));
Nach "ODOMETRIE_LED_ON;" muss vermutlich eine kleine Verzögerung eingebaut werden weil die LEDs nicht sofort voll leuchten.
Noch eine Anmerkung zu übertriebenen Bitschiebereien. WHEEL_LEFT 1 wäre hier wohl übersichtlicher:
Die Definition aus asuro.h#define WHEEL_LEFT (1 << MUX0) //ADC1
#define WHEEL_RIGHT 0 //ADC0
Gruß
mic







Zitieren

Lesezeichen