GrimReaper
05.10.2007, 11:36
Hallo;
Ich bin noch kein Experte mit dem Asuro, aber habe mich trotzdem schon mal daran versucht ihn etwas umzubauen. Mein Ziel ist es 3 Sensoren zum Verfolgen der Linie zu haben (fordert zwar mehr den Prozessor, finde ich aber einfach besser).
Die Liniensensoren werden ja über den A/D Wandler ausgelesen und da ich die Odometrie überhaupt nicht brauche, dachte ich mir, ich benutze einen A/D Port der Odometrie (mir ist klar, dass da die BackLEDs mit dranhängen und die nicht mehr funktionieren wenn man da was ändert).
Hir mal der Schaltplan für den A/D Port ADC0 (Pin 23), da hängt normalerweise die rechte Odometrie dran, die ich netfernt habe. Ich habe einfach die Schaltung für die Liniensensoren eins zu eins kopiert und natürlich die selben Bauteile verwendet.
U+
|
Fototransistor
|
|
A/DC 0 (Pin23) ---------
|
|
Widerstand (20 kOhm)
|
GND
In der asuro.c habe ich die Funktion für das auslesen der Fototransistoren wie folgt umgeschrieben:
void LineData(unsigned int *data)
{
ADMUX = (1 << REFS0) | IR_LEFT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[0] = ADCL + (ADCH << 8);
ADMUX = (1 << REFS0) | IR_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[1] = ADCL + (ADCH << 8);
ADMUX = (1 << REFS0) | WHEEL_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[2] = ADCL + (ADCH << 8);
}
Nun zu meinem Problem, grundsätzlich funktioniert es, ich sehe hell/dunkel Unterschiede, allerdings werden nur Werte zwischen 0 und 8 zurückgegeben.
Ich verstehe das nicht ganz, da ich die selben Bauteile wie für die Liniensensoren verwendet habe und zum Auslesen ja auch die selbe Referenzspannung benutzt wird.
Hat jemand eine Idee, woran das liegen könnte?
Ich bin noch kein Experte mit dem Asuro, aber habe mich trotzdem schon mal daran versucht ihn etwas umzubauen. Mein Ziel ist es 3 Sensoren zum Verfolgen der Linie zu haben (fordert zwar mehr den Prozessor, finde ich aber einfach besser).
Die Liniensensoren werden ja über den A/D Wandler ausgelesen und da ich die Odometrie überhaupt nicht brauche, dachte ich mir, ich benutze einen A/D Port der Odometrie (mir ist klar, dass da die BackLEDs mit dranhängen und die nicht mehr funktionieren wenn man da was ändert).
Hir mal der Schaltplan für den A/D Port ADC0 (Pin 23), da hängt normalerweise die rechte Odometrie dran, die ich netfernt habe. Ich habe einfach die Schaltung für die Liniensensoren eins zu eins kopiert und natürlich die selben Bauteile verwendet.
U+
|
Fototransistor
|
|
A/DC 0 (Pin23) ---------
|
|
Widerstand (20 kOhm)
|
GND
In der asuro.c habe ich die Funktion für das auslesen der Fototransistoren wie folgt umgeschrieben:
void LineData(unsigned int *data)
{
ADMUX = (1 << REFS0) | IR_LEFT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[0] = ADCL + (ADCH << 8);
ADMUX = (1 << REFS0) | IR_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[1] = ADCL + (ADCH << 8);
ADMUX = (1 << REFS0) | WHEEL_RIGHT; // AVCC reference with external capacitor
ADCSRA |= (1 << ADSC); // Start conversion
while (!(ADCSRA & (1 << ADIF))); // wait for conversion complete
ADCSRA |= (1 << ADIF); // clear ADCIF
data[2] = ADCL + (ADCH << 8);
}
Nun zu meinem Problem, grundsätzlich funktioniert es, ich sehe hell/dunkel Unterschiede, allerdings werden nur Werte zwischen 0 und 8 zurückgegeben.
Ich verstehe das nicht ganz, da ich die selben Bauteile wie für die Liniensensoren verwendet habe und zum Auslesen ja auch die selbe Referenzspannung benutzt wird.
Hat jemand eine Idee, woran das liegen könnte?