Nun möchte ich noch den Abstand meiner mittleren IR-LED ausgeben. Die LED ist am PIN33 (PA7) des Atmega32 angehängt.
In der asuro.h habe ich folgendes eingetragen:
Code:
#define IR_RIGHT (1 << MUX1) //rechts
#define IR_LEFT ((1 << MUX0) | (1 << MUX1)) //links
#define IR_MITTE (1 << MUX2) //mittig???
In der asuro.c:
Code:
/* Funktion zum Auslesen der IR-Sensoren (links, rechts, mitte) */
void IRData(unsigned int *data)
{
// Prozessorinterne Referenz verwenden
// Multiplexer auf linken Sensor schalten
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_LEFT;
// Wandlung starten
ADCSRA |= (1 << ADSC);
// Warten, bis Wandlung beendet
while (!(ADCSRA & (1 << ADIF)));
// ADCIF zurücksetzen
ADCSRA |= (1 << ADIF);
// ADC-Wert auslesen
data[0] = ADCL + (ADCH << 8);
// Prozessorinterne Referenz verwenden
// Multiplexer auf rechten Sensor schalten
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_RIGHT;
// Wandlung starten
ADCSRA |= (1 << ADSC);
// Warten, bis Wandlung beendet
while (!(ADCSRA & (1 << ADIF)));
// ADCIF zurücksetzen
ADCSRA |= (1 << ADIF);
// ADC-Wert auslesen
data[1] = ADCL + (ADCH << 8);
// Prozessorinterne Referenz verwenden
// Multiplexer auf rechten Sensor schalten
ADMUX = (1 << REFS0) | (1 << REFS1) | IR_MITTE;
// Wandlung starten
ADCSRA |= (1 << ADSC);
// Warten, bis Wandlung beendet
while (!(ADCSRA & (1 << ADIF)));
// ADCIF zurücksetzen
ADCSRA |= (1 << ADIF);
// ADC-Wert auslesen
data[2] = ADCL + (ADCH << 8);
}
Die Werte der rechten und linken LED stimmen, aber die Mittlere liefert Quatsch.
Was habe ich falsch gemacht?
Lesezeichen