Für den Timer sieh Dir die Funktion Sleep() in der asuro.c mal an.
Code:
/* uses 72kHz timer => Sleep(x) = x/72kHz [sec] */
void Sleep(unsigned char time72kHz) {
count72kHz = 0;
while (count72kHz < time72kHz);
}
Damit der Timer funktioniert wird alle 27.7777 ms (1/36KHz) ein Interrupt ausgelöst (SIG_OUT_COMPARE2) und die Variable count72KHz um eins erhöht.
Code:
volatile unsigned char count72kHz;
/* uses timer2 (36kHz for IR communication */
/* counts falling and rising edge => 36kHz*2 = 72kHz */
SIGNAL (SIG_OUTPUT_COMPARE2) {
count72kHz ++;
}
Der Code funktioniert jetzt habe den Fehler gefunden.
Der Asuro fährt jetzt ungefähr 10Sekunden und bleibt dann stehen.
Code:
#include "asuro.h" // Header für die Funktionen MotorSpeed() Sleep()
//Prototype
void warte(unsigned int zeit); // Deklaration für die Funktion warte() in mili Sekunden
int main (void) // int ist der Rückgabewert der Funktion main
{
Init(); // Damit der Asuro einwandfrei startet
MotorSpeed(180,180); // Motor links und rechts läuft mit 180 max. 255
warte(10000); // warte 10 Sekunden lang
MotorSpeed(0,0); // Asuro bleibt stehen
while(TRUE); // endlosschleife --> Mach garnix mehr (Programm Ende)
return 0; // Rückgabewert der Funktion main ist 0
}
void warte(unsigned int zeit) // Funktion warte()
{
while(zeit--) // zähle rückwärts bis der Wert 0 ist
{
Sleep(72); // Funktion Sleep() aus der Asuro.h
}
}
OK, ich hofe das reicht als Erklärung.
Gruß Winne
Lesezeichen