falls es jemand interressiert... (oder auch nicht^^)

ich hab das Problem größtenteils gelöst. Ich glaube mein Programm für den Asuro war einfach zu groß (>7,0kB). Deshalb hab ich das ganze etwas anderst aufgezogen:
Code:
#include "asuro.h"
#include "i2c.h"

#define pcf8591_address 0x90

int main(void)
{
	unsigned char ret[6];
	int i;	
	
	Init();	
	EncoderInit();
	InitI2C();
	MotorDir(FWD, FWD);
	while(1)
	{
		StartI2C(pcf8591_address + WRITE);
		WriteI2C(0x4);
		StopI2C();
		Sleep(40);
		StartI2C(pcf8591_address + READ);		
		ReadI2C(ACK);
		ret[0] = ReadI2C(ACK);
		ret[1] = ReadI2C(ACK);
		ret[2] = ReadI2C(ACK);
		ret[3] = ReadI2C(ACK);
		i = 0;
		SerWrite(ret, 4);					
		SerRead(ret, 1, 0);					
		switch(ret[0])
		{
		case '1': MotorSpeed(150, 0);
				  while(!(ret[0] < 60 && ret[1] < 60))
				  {
					ret[0] = ReadI2C(ACK);
					ret[1] = ReadI2C(ACK);
					ReadI2C(ACK);
					ReadI2C(ACK);
				  }
				  MotorSpeed(0, 0);					
				  break;
		case '3': MotorSpeed(0, 150);
				  while(!(ret[0] < 60 && ret[1] < 60))
				  {
					ret[0] = ReadI2C(ACK);
					ret[1] = ReadI2C(ACK);
					ReadI2C(ACK);
					ReadI2C(ACK);
				  }
				  MotorSpeed(0, 0);
				  break;
		}
		EncoderSet(0, 0);
		while(i == 0)
		{				
			ret[0] = ReadI2C(ACK);
			ret[1] = ReadI2C(ACK);
			ret[2] = ReadI2C(ACK);
			ret[3] = ReadI2C(ACK);
						
			if(ret[0] > ret[1]) {
				MotorSpeed(100, 140); //120, 155
			}
			else if(ret[0] < ret[1]) {
				MotorSpeed(140, 100); //155, 120
			}
			else
				MotorSpeed(100, 100); //120, 120
												
													
			if(encoder[0] > 900 || (ret[0] > 190 && ret[1] > 190))
			{							
				MotorSpeed( 0, 0);	
				PrintInt((int)encoder[0]);
				SerWrite(" ", 1);							
				i = 1;
			}	
							
		}
		StopI2C();

	}	
	StopI2C();
}
Allerdings hab ich immer noch das Problem das die Abstandswerte vom Asuro nicht zu stimmen scheinen