Hallo alle zusammen,

ich habe mal versucht ein kleines Programm zu schreiben, welches den ASURO von 80 auf 255 in 10er Schritten ein mal vorwärts und ein mal rückwärts beschleunigt.
Dabei sollen:
der Weg,
die Geschwindigkeit
und die Beschleunigung
gemessen werden (Drehzahl fehlt noch).
Leider ist mein Programm etwas zu groß geraten und der ASURO-Flasher meckert. Außerdem geht es nur manchmal. Mal kommen im Hyperterminal die richtigen Werte, mal nur die Überschriften, mal Chinesisch .... mal macht der ASURO gar nix mehr ... liegt evtl an den vielen Prints oder an der Größe des Progs.
Zur Zeit ist der untere Teil des Progs auskommentiert aus Platzgründen des Controllers (steht aber fast das selbe wie oben nur die Richtung und langsamer oder schneller ändern sich -- vlt bekommts ja jemand fertig mit einer "Kopfzeile" das ganze laufen zu lassen da bin ich grade dran)

Code:
#include <asuro.h>
#include <string.h> // für strlen

/*Left min/max, right min/max values da minimiert auf acht bit *4 

+00150 *4  =	600							//data[1] left
+00222 *4  =	888

+00190 *4  =	760 						//data[0] right
+00236 *4  =	944

*/


//Variablenverageb

int speed;									//PWM des Rades
float msleft;								//Metre pro Sekunde (Radgeschwindigkeit links
float msright;								//Metre pro Sekunde (Radgeschwindigkeit rechts

float msleft1;								// Vorherige Geschwindigkeit (für a)
float msright1;								// Vorherige Geschwindigkeit (für a)
	
float mleft;								//Gefahrene Strecke links
float mright;								//Gefahrene Strecke rechts

float aleft;								//Beschleunigung linkes Rad
float aright;								//Beschleunigung rechtes Rad

unsigned int data [2];  					//Array erstellen mit 2 Speicherzellen für Odometriedaten
											//data [0] links T11
											//data [1] rechts T12 
											
int Zeit = 1000;							//Zeit in der die Impulse gezählt werden 1s
int Zeit1 = 0;								//letzte Zeit zur bestimmung der Zeit dif (für a)

int triggerleft  = 	(((222-150)/2)+150)*4;		//Helldunkelwechsel linkes Rad 
int leftimpuls = 0;							//gezählte Impulse pro Zeit links

int triggerright =  (((236-190)/2)+190)*4;	//Helldunkelwechsel rechtes Rad
int	rightimpuls = 0;							//gezählte Impulse pro Zeit rechts

unsigned int long stopzeit;

float pie	= 3.14;	//15927;					//pie
float Umfang = 12; //.0165920775;				//(38.25*pie);					//Umfang in cm
int Muster = 12;							//anzahl der Hell Dunkel übergänge
//-----------------------------------------------------------------------------
int main(void)
{
BackLED(OFF,OFF);							//alle LED werden im Programm zur Veranschaulichung genutzt
StatusLED(RED);								//d.h. wo bin ich im Prog. die Backeled´s sind aus da Odometrie an
	

   Init();
   while(1){   
//-----------------------------------------------------------------------------
//Intro für Hyperterminal
//----------------------------------------------------------------------------- 
SerPrint("\t             Telemetriedaten\n\r\n\r");

//Überschrift im Hyperterminal für Vorwärts

SerPrint("\tVorwärts\n\r\n\r");
//----------------------------------------------------------------------------- 
//Los gehts 			beschleunigen
//----------------------------------------------------------------------------- 
	StatusLED(GREEN);
   	MotorDir(FWD,FWD);					//Richtung festlegen
	
	Zeit1 = 0 ;							//muss vor der Schleife genullt werden fals nioch restwert aus letzter Schleife
	msright1 = 0;
	msleft1 = 0;
	
	for (speed=80;speed<=255;speed +=10){  //Geschwindigkeit von 80 auf 255 in 10er schritten
		MotorSpeed(speed,speed);			//Geschwindigkeit einlesen
			
			leftimpuls = 0;					//Impullse vor Zählvorgang auf null
			rightimpuls = 0;				//Impullse vor Zählvorgang auf null
			
			//Detektierung der Impulse
			stopzeit=Gettime()+Zeit; 	 	//1 sekunde Hell Dunkel Wechsel detektieren
			do {
				OdometrieData(data);				//Odo daten bereitstellen
					if(data[0]==triggerright)		//wenn data = trigerlevel
					  rightimpuls++;				//impulse erhöhen
					if(data[1]==triggerleft)		//siehe zwei drüber
					  leftimpuls++;					//siehe zwei drüber
			
			} while (stopzeit>Gettime());			//das ganze bis Zeit um (1s)
			
			//Auswertung der Impulse
								
				//Geschwindigkeit
				msright = (rightimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);  //da ms
				msleft = (leftimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);	//da ms
				
				//Zurückgelegter Weg
				mright = msright * Zeit;
				mleft	= msleft * Zeit;
				
				//Beschleunigung
				aright = (msright-msright1) / (Zeit-Zeit1);
				aleft = (msleft-msleft1) / (Zeit-Zeit1);
					
				Zeit1 = Zeit;			//jetzige Zeit Zwischenspeichern für a beim nächsen turn
				msright1 = msright;		//jetzige Geschwindigkeit Zwischenspeichern für a beim nächsen turn
				msleft1 = msleft;		//jetzige Geschwindigkeit Zwischenspeichern für a beim nächsen turn
				
			//Ausgabe
			
			
				
			
			
			//rechtes
			SerPrint("Rechtes Rad    ");
			PrintFloat(mright,2,2);
			SerPrint (" m    ");
			PrintFloat(msright,2,2);
			SerPrint(" cm/s"    );
			PrintFloat(aright,2,2);
			SerPrint(" cm/s²");
			
			//Lehrstellen zwischen rechts und links
			SerPrint("           ");
			
			//links
			SerPrint("Linkes Rad    ");
			PrintFloat(mleft,2,2);
			SerPrint (" m    ");
			PrintFloat(msleft,2,2);
			SerPrint(" cm/s    ");
			PrintFloat(aleft,2,2);
			SerPrint(" cm/s²");
			
			//2*absatz
			
			SerPrint("\n\r\n\r");
			}
//----------------------------------------------------------------------------- 
//Langsamer werden
//----------------------------------------------------------------------------- 
		Zeit1 = 0 ;
		msright1 =0;
		msleft1 =0;
	 
		for (speed=255;speed>=80;speed -=10){
		MotorSpeed(speed,speed);
			
			leftimpuls = 0;
			rightimpuls = 0;
			
			//Detektierung der Impulse
			stopzeit=Gettime()+Zeit; 	 //1 sekunde Hell Dunkel Wechsel detektieren
			do {
				OdometrieData(data);
					if(data[0]==triggerright)
					  rightimpuls--;
					if(data[1]==triggerleft)
					  leftimpuls--;
			
			} while (stopzeit>Gettime());
			
			//Auswertung der Impulse
				
				//Geschwindigkeit
				msright = (rightimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);  //da ms
				msleft = (leftimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);	//da ms
				
				//Zurückgelegter Weg
				mright = msright * Zeit;
				mleft	= msleft * Zeit;
				
				//Beschleunigung
				aright = (msright-msright1) / (Zeit-Zeit1);
				aleft = (msleft-msleft1) / (Zeit-Zeit1);
					
				Zeit1 = Zeit;
				msright1 = msright;
				msleft1 = msleft;
				
			//Ausgabe
			
			
				
			
			
			//rechtes
			SerPrint("Rechtes Rad    ");
			PrintFloat(mright,2,2);
			SerPrint (" m    ");
			PrintFloat(msright,2,2);
			SerPrint(" cm/s"    );
			PrintFloat(aright,2,2);
			SerPrint(" cm/s²");
			
			//Lehrstellen zwischen rechts und links
			SerPrint("           ");
			
			//links
			SerPrint("Linkes Rad    ");
			PrintFloat(mleft,2,2);
			SerPrint (" m    ");
			PrintFloat(msleft,2,2);
			SerPrint(" cm/s    ");
			PrintFloat(aleft,2,2);
			SerPrint(" cm/s²");
			
			//2*absatz
			
			SerPrint("\n\r\n\r");
			}		
//-----------------------------------------------------------------------------
//Rückwärts
//----------------------------------------------------------------------------- 


//Überschrieft im Hyperterminal

SerPrint("\t             Rückwärts\n\r\n\r");
//----------------------------------------------------------------------------- 
//Los gehts 			beschleunigen
//----------------------------------------------------------------------------- 	
		StatusLED(YELLOW);
		MotorDir(RWD,RWD);
		
		Zeit1 = 0 ;
		msright1 =0;
		msleft1 =0;
		
	for (speed=80;speed<=255;speed +=10){
		MotorSpeed(speed,speed);
						
			leftimpuls = 0;
			rightimpuls = 0;
			
			//Detektierung der Impulse
			stopzeit=Gettime()+Zeit; 	 //1 sekunde Hell Dunkel Wechsel detektieren
			do {
				OdometrieData(data);
					if(data[0]==triggerright)
					  rightimpuls++;
					if(data[1]==triggerleft)
					  leftimpuls++;
			
			} while (stopzeit>Gettime());
			
			//Auswertung der Impulse
			
				//Geschwindigkeit
				msright = (rightimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);  //da ms
				msleft = (leftimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);	//da ms
				
				//Zurückgelegter Weg
				mright = msright * Zeit;
				mleft	= msleft * Zeit;
				
				//Beschleunigung
				aright = (msright-msright1) / (Zeit-Zeit1);
				aleft = (msleft-msleft1) / (Zeit-Zeit1);
					
				Zeit1 = Zeit;
				msright1 = msright;
				msleft1 = msleft;
				
			//Ausgabe
			
			
				
			
			
			//rechtes
			SerPrint("Rechtes Rad    ");
			PrintFloat(mright,2,2);
			SerPrint (" m    ");
			PrintFloat(msright,2,2);
			SerPrint(" cm/s"    );
			PrintFloat(aright,2,2);
			SerPrint(" cm/s²");
			
			//Lehrstellen zwischen rechts und links
			SerPrint("           ");
			
			//links
			SerPrint("Linkes Rad    ");
			PrintFloat(mleft,2,2);
			SerPrint (" m    ");
			PrintFloat(msleft,2,2);
			SerPrint(" cm/s    ");
			PrintFloat(aleft,2,2);
			SerPrint(" cm/s²");
			
			//2*absatz
			
			SerPrint("\n\r\n\r");
			}
		
		
//----------------------------------------------------------------------------- 
//Langsamer werden
//----------------------------------------------------------------------------- 

	Zeit1 = 0 ;
	msright1 =0;
	msleft1 =0;
		
	for (speed=255;speed>=80;speed -=10){
		MotorSpeed(speed,speed);			
			
			leftimpuls = 0;
			rightimpuls = 0;
			
			//Detektierung der Impulse
			stopzeit=Gettime()+Zeit; 	 //1 sekunde Hell Dunkel Wechsel detektieren
			do {
				OdometrieData(data);
					if(data[0]==triggerright)
					  rightimpuls--;
					if(data[1]==triggerleft)
					  leftimpuls--;
			
			} while (stopzeit>Gettime());
			
			//Auswertung der Impulse
			
				//Geschwindigkeit
				msright = (rightimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);  //da ms
				msleft = (leftimpuls * ((Umfang*pie)/Muster))/(Zeit*1000);	//da ms
				
				//Zurückgelegter Weg
				mright = msright * Zeit;
				mleft	= msleft * Zeit;
				
				//Beschleunigung
				aright = (msright-msright1) / (Zeit-Zeit1);
				aleft = (msleft-msleft1) / (Zeit-Zeit1);
					
				Zeit1 = Zeit;
				msright1 = msright;
				msleft1 = msleft;
				
			//Ausgabe
			
			
				
			
			
			//rechtes
			SerPrint("Rechtes Rad    ");
			PrintFloat(mright,2,2);
			SerPrint (" m    ");
			PrintFloat(msright,2,2);
			SerPrint(" cm/s"    );
			PrintFloat(aright,2,2);
			SerPrint(" cm/s²");
			
			//Lehrstellen zwischen rechts und links
			SerPrint("           ");
			
			//links
			SerPrint("Linkes Rad    ");
			PrintFloat(mleft,2,2);
			SerPrint (" m    ");
			PrintFloat(msleft,2,2);
			SerPrint(" cm/s    ");
			PrintFloat(aleft,2,2);
			SerPrint(" cm/s²");
			
			//2*absatz
			
			SerPrint("\n\r\n\r");
			}
	 
	
		}     
		
	   return 0;}
Viel spaß und schon mal danke

NomiS