So,
ich habe den Quellcode nochmals verändert
Code:switch ( m_Active_Command ) { case ADIS16265_GYRO_OUT: if((SPIReceiveBuffer[0] & 0x20) > 0 ) // Do we have a negative value { iValue=((SPIReceiveBuffer[0] & 0x3) * 256) + SPIReceiveBuffer[1]; iValue*=-1; // we have a negative value of angle speed } else { iValue=((SPIReceiveBuffer[0] & 0x3) * 256) + SPIReceiveBuffer[1]; } m_DigitalGyroRawValue = (double) (iValue * 0.7326) * (M_PI / 180.0); break; case ADIS16265_TEMP_OUT: if((SPIReceiveBuffer[0] & 0xF) >= 0xE ) // Do we have a negative value { iValue=((SPIReceiveBuffer[0] & 0xF) * 256) + SPIReceiveBuffer[1]; iValue= 4095 - (iValue + 1); } else { iValue=((SPIReceiveBuffer[0] & 0x3) * 256) + SPIReceiveBuffer[1]; } m_ADIS16265_Temperature = (double) 25.0 + (double) (iValue * 0.1453); break; case ADIS16265_ANGL_OUT: iValue=(SPIReceiveBuffer[0] & 0x3 ) * 256 + SPIReceiveBuffer[1]; m_DigitalOrientationAngle= (double)(iValue * 0.03663) * (M_PI / 180.0); break; case ADIS16265_GYRO_OFF: break; case ADIS16265_ALM_CTRL: m_ADIS16265_AlarmControl=SPIReceiveBuffer[0] * 256 + SPIReceiveBuffer[1]; break; case ADIS16265_GLOB_CMD: break; case ADIS16265_SUPPLY_OUT: iValue= (int) ((SPIReceiveBuffer[0] & 0xF) * 256 + SPIReceiveBuffer[1] ); m_ADIS16265_Voltage = ((double)(iValue * 0.00183)); break;
Jetzt zeigen die Werte deutlich bessere Werte.
Temperatur -> 28.051 Grad
Spannung: 4,92636 Volt
Winkelwert: 0.2908 Grad in rad
Jetzt besteht nur noch das Problem, das zeitweise die Werte von normalen Werten auf seltsame Werte springen.
Hat jemand eine Idee, was hier noch passieren kann.
Gruss R.
Lesezeichen