Ich misch mich mal mir meinem eigenen Problem ein!

Ich hab mir hier aus dem Forum einen Beispielcode auf den asuro geflasht, und zwar den aus der Test.zip in diesem Thread:
https://www.roboternetz.de/phpBB2/ze...ag.php?t=13478
Der funktionierte auch wunderbar, aber ich wollte die Tastenbelegung ändern und stoße auf Probleme!

Nachdem ich die alten Codes ersetzt hab mit den Codes für die Tasten die ich verwenden will lief erstmal nichts. Daraufhin hab ich was geändert und es funktioniert, aber die Reaktionszeiten sind ganz fies nach unten gegangen!

Das hier hab ich geändert:
cmd = rxdata; // (rxdata & 0x3F);

Code:
#include "asuro.h"
#include <stdlib.h>

#define IRFWD     0x1794
#define IRRWD     0x1795
#define IRLEFT    0x1796
#define IRRIGHT   0x1797
#define IROK      0x17A5
#define IRSTOP    0x1786

#define OFFSET 100
#define STEP   60

int speedLeft, speedRight;
volatile unsigned int rxdata;
volatile unsigned char rxbits;

SIGNAL (SIG_OVERFLOW0)
{
   rxbits++;
   rxdata<<=1;
   rxdata |= (PIND & (1 << PD0)); // liest Datenbits
   TCNT0 = 34; // Timer auf 1778µs
   if(rxbits==14)
   {
      TCCR0 &= ~((1 << CS01) | (1 << CS00)); // stoppt Timer
   }
}

void Driver(void)
{
   unsigned char leftDir= FWD, rightDir= FWD;

   leftDir = rightDir = FWD;
   if (speedLeft < 0)
      leftDir = RWD;
   if (speedRight < 0)
      rightDir = RWD;

   if (speedLeft > 240)
      speedLeft = 240;
   if (speedLeft < -240)
      speedLeft = -240;
   if (speedRight > 240)
      speedRight = 240;
   if (speedRight < -240)
      speedRight = -240;

   MotorDir(leftDir, rightDir);
   MotorSpeed(abs(speedLeft),abs(speedRight));
}

void IRFwd(void)
{
   speedRight += STEP;
   speedLeft += STEP;
   if (abs(speedLeft) < OFFSET)
   {
      speedRight += STEP;
      speedLeft += STEP;
   }
   FrontLED(ON);
   BackLED(OFF,OFF);
}

void IRRwd(void)
{
   speedRight -= STEP;
   speedLeft -= STEP;
   if (abs(speedLeft) < OFFSET)
   {
      speedRight -= STEP;
      speedLeft -= STEP;
   }
   FrontLED(OFF);
   BackLED(ON,ON);
}

void IRLeft(void)
{
   FrontLED(OFF);
   BackLED(ON,OFF);
   if (speedLeft != 0)
   {
      speedLeft /= 4;
      Driver();
      Msleep(80);
      speedLeft *= 4;
   }
   else
   {
      speedLeft = -150;
      speedRight = 150;
      Driver();
      Msleep(80);
      speedLeft = speedRight = 0;
   }
}

void IRRight(void)
{
   FrontLED(OFF);
   BackLED(OFF,ON);
   if (speedRight != 0)
   {
      speedRight /= 4;
      Driver();
      Msleep(80);
      speedRight *= 4;
   }
   else
   {
      speedLeft = 150;
      speedRight = -150;
      Driver();
      Msleep(80);
      speedLeft = speedRight = 0;
   }
}

void IRStop(void)
{
   speedRight = speedLeft = 0;
   FrontLED(OFF);
   BackLED(OFF,OFF);
}

int main(void)
{
   static unsigned int cmd;

   Init();
   while (1)
   {
      rxbits = 1;
      rxdata = 0;
      TIMSK |= (1 << TOIE0);
      // Interrupt scharf
      while (PIND & (1 << PD0))
         ; // warte auf 1. Flanke
      TCNT0 = 90;
      // Timer auf 1333µs
      TCCR0 = (1 << CS01) | (1 << CS00);
      // Start Timer
      while (rxbits < 14)
         ; // warte bis alle Bits empfangen

      cmd = rxdata;      //      (rxdata & 0x3F);
      // 6 Command-Bits werden verwertet

      switch (cmd)
      {
      case IRRWD:
         IRRwd();
         break;
      case IRFWD:
         IRFwd();
         break;
      case IRLEFT:
         IRLeft();
         break;
      case IRRIGHT:
         IRRight();
         break;
      case IRSTOP:
      case IROK:
         IRStop();
         break;
      }
      Driver();
   }
   return 0;
}