nexus2358
28.07.2013, 17:25
Hallo,
ich habe den Ultraschall-Sensor für Asuro fertig gebaut und angebracht. Nun möchte ich das Programm benutzen, dass im Buch "Mehr Spaß mit Asuro" vorgegeben ist:
#include "asuro.h"
void LocalInit(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz crystal
ADCSRA = 0x00; // ADC off
// Analog comparator:
ACSR = 0x02; // Generate interrupt on falling edge
ADMUX = 0x03; // Multiplexer for comparator to
// ADC pin 3
SFIOR |= (1 << ACME); // Enable muliplexing of comparator
DDRD &= ~(1 << 6); // Port D Pin 6 is input!
}
void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on
// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64;
// set frequency to 40kHz
}
int main(void)
{
int pos, i;
int posmarker;
Init();
10
LocalInit();
while(TRUE) {
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(200, 200);
}
else {
StatusLED(RED);
MotorDir(FWD, RWD);
MotorSpeed(0, 200);
for(i = 0; i<100; i++) { Sleep(200); }
}
}
return 0;
}
Ich erhalte jedoch eine Fehlermeldung, die irgendwie mit dem Asuro.h Ordner zusammen hängt. Ausserdem seien mehrere Variablen nicht deklariert. Im Internet habe ich nun den Hinweis gefunden, dass ich die Variable volatile unsigned char count72kHz von Asuro.c nach Asuro.h verschieben soll. Ich verstehe leider nicht genau wie das gemeint ist (bin noch Anfänger). Könnte mir jemand erklären wie ich vorzugehen habe?
Danke im Voraus,
Nexus
ich habe den Ultraschall-Sensor für Asuro fertig gebaut und angebracht. Nun möchte ich das Programm benutzen, dass im Buch "Mehr Spaß mit Asuro" vorgegeben ist:
#include "asuro.h"
void LocalInit(void)
{
// Change Oscillator-frequency of Timer 2
// to 40kHz, no toggling of IO-pin:
TCCR2 = (1 << WGM21) | (1 << CS20);
OCR2 = 0x64; // 40kHz @8MHz crystal
ADCSRA = 0x00; // ADC off
// Analog comparator:
ACSR = 0x02; // Generate interrupt on falling edge
ADMUX = 0x03; // Multiplexer for comparator to
// ADC pin 3
SFIOR |= (1 << ACME); // Enable muliplexing of comparator
DDRD &= ~(1 << 6); // Port D Pin 6 is input!
}
void Ping(unsigned char length)
{
count72kHz = 0;
TCCR2 = (1 << WGM21) | (1 << COM20) | (1 << CS20);
// Toggling of IO-Pin on
// generate the Chirp
while(count72kHz < length) {
OCR2 = 0x64 + length / 2 - count72kHz;
}
TCCR2 = (1 << WGM21) | (1 << CS20); // Toggling of IO-Pin off
OCR2 = 0x64;
// set frequency to 40kHz
}
int main(void)
{
int pos, i;
int posmarker;
Init();
10
LocalInit();
while(TRUE) {
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(200, 200);
}
else {
StatusLED(RED);
MotorDir(FWD, RWD);
MotorSpeed(0, 200);
for(i = 0; i<100; i++) { Sleep(200); }
}
}
return 0;
}
Ich erhalte jedoch eine Fehlermeldung, die irgendwie mit dem Asuro.h Ordner zusammen hängt. Ausserdem seien mehrere Variablen nicht deklariert. Im Internet habe ich nun den Hinweis gefunden, dass ich die Variable volatile unsigned char count72kHz von Asuro.c nach Asuro.h verschieben soll. Ich verstehe leider nicht genau wie das gemeint ist (bin noch Anfänger). Könnte mir jemand erklären wie ich vorzugehen habe?
Danke im Voraus,
Nexus