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:
Allerdings hab ich immer noch das Problem das die Abstandswerte vom Asuro nicht zu stimmen scheinenCode:#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(); }







Zitieren

Lesezeichen