Für den Timer sieh Dir die Funktion Sleep() in der asuro.c mal an.
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:/* uses 72kHz timer => Sleep(x) = x/72kHz [sec] */ void Sleep(unsigned char time72kHz) { count72kHz = 0; while (count72kHz < time72kHz); }
Der Code funktioniert jetzt habe den Fehler gefunden.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 Asuro fährt jetzt ungefähr 10Sekunden und bleibt dann stehen.
OK, ich hofe das reicht als Erklärung.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 } }
Gruß Winne![]()







Zitieren
Lesezeichen