frank1210
17.03.2010, 15:23
Hallo malwieder.
ich hab mir die Ultraschallerweiterung zusammengebaut. und zwar mit ner selbstentworfenen Platine. Alles gleich auf anhieb funktioniert. Fals jemand Interesse am Layout hat, stelle ich es gerne zur Verfügung.
Jetzt meine Frage:
Als Programm verwende ich folgendes:
// *******************************************
// * 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);
BackLED(OFF,OFF);
MotorSpeed(200,200);
} else {
StatusLED(RED);
MotorDir(FWD,RWD);
BackLED(ON,ON);
MotorSpeed(0,200);
Sleep(20000);
}
}
return 0;
}
welches ich mir im Netz heruntergeladen habe. Da war ne .hex-Datei mit dabei und wenn ich es flashe--funktioniert auch alles.
Wenn ich den Code kopiere, und in meine Testdatei einfüge, compilliere, und dann flashen will passiert nix.
Woran kann das liegen?? Ich benutze die neueste Lib.
ich hab mir die Ultraschallerweiterung zusammengebaut. und zwar mit ner selbstentworfenen Platine. Alles gleich auf anhieb funktioniert. Fals jemand Interesse am Layout hat, stelle ich es gerne zur Verfügung.
Jetzt meine Frage:
Als Programm verwende ich folgendes:
// *******************************************
// * 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);
BackLED(OFF,OFF);
MotorSpeed(200,200);
} else {
StatusLED(RED);
MotorDir(FWD,RWD);
BackLED(ON,ON);
MotorSpeed(0,200);
Sleep(20000);
}
}
return 0;
}
welches ich mir im Netz heruntergeladen habe. Da war ne .hex-Datei mit dabei und wenn ich es flashe--funktioniert auch alles.
Wenn ich den Code kopiere, und in meine Testdatei einfüge, compilliere, und dann flashen will passiert nix.
Woran kann das liegen?? Ich benutze die neueste Lib.