Ich habe mich nun die letzten tage mit der Ultraschall erweiterung beschäftigt, aber es wäre ja zu schön, wenn das gleich alles klappen würde. Ich vermute, dass ich den Operationsverstärker wohl getötet habe, denn, wenn ich messe, und ich an die Pins 3,6 und 7 gehe (alles Pins die mit dem US Empfänger verbunden sind) fährt der Asuro geradeaus, ansonsten dreht er sich nur im Kreis, ich benutze das Beispielprogramm aus dem Buch Mehr Spaß mit dem Asuro Band 1. Falls es nicht jeder Auswendig kann :
Code:
// *******************************************
// * Ultraschall für ASURO *
// * Roboter versucht Hindernissen *
// * auszuweichen *
// * Achtung: asuro.c ist geändert *
// * (c) 2005Robin Gruber *
// * Details zum Code in: *
// * "Mehr Spaß mit ASURO, Band I" *
// *******************************************
#include "asuro_us.h"
void LocalInit(void)
{
// Change Oscillator-frequency to 40kHz, no toggling of IO-pin
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz
// ADC off
ADCSRA = 0;
// Analog Comparaot
ACSR = 0x02; // Generate Interrupt on falling Edge
ADMUX=0x03; // Multiplexer for Comparator to ADC pin 3
SFIOR|=(1<<ACME);
DDRD&=~(1<<6);
}
void Ping(unsigned char length)
{
count72kHz=0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
while (count72kHz<length) {
OCR2=0x64+length/2-count72kHz;
};
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2=0x64;
}
int main(void)
{
int pos;
int posmarker;
int odata[2];
Init();
LocalInit();
while(1) {
// OdometrieData(odata);
posmarker=0;
Ping(20);
for (pos=0; pos<100; pos++) {
Sleep(10);
if ((ACSR&(1<<ACI))!=0) {
if (posmarker==0) {posmarker=pos;}
}
ACSR|=(1<<ACI);
}
if (posmarker>10) {
StatusLED(GREEN);
MotorDir(FWD,FWD);
MotorSpeed(150,150);
} else {
StatusLED(RED);
MotorDir(FWD,RWD);
MotorSpeed(0,150);
Sleep(20000);
}
}
return 0;
}
Hatte jemand vielleicht schonmal dasselbe oder ein ähnliches Problem oder ist jemand der selben Auffassung, dass der Operationsverstärker kaputt sein könnte?
Ansonsten wünsch ich fröhliche Weihnachten.
mfg
Erik
Lesezeichen