Hallo Zusammen,
irgendwie bekomme ich von meinem ADIS16265 nur Blödsinn gemeldet.
So frage ich derzeit zu Testzwecken der Kommunikation die Temperatur und die Spannung mit ab.
Die Auswertung der Daten erfolgt wie folgt:
Folgende Anzeigen habe ich für die WertCode:switch ( m_Active_Command ) { case ADIS16265_GYRO_OUT: if((SPIReceiveBuffer[0] & 0x20) > 0 ) // Do we have a negative value { iValue=((SPIReceiveBuffer[0] & 0x3F) * 256) + SPIReceiveBuffer[1]; iValue*=-1; // we have a negative value of angle speed } else { iValue=((SPIReceiveBuffer[0] & 0x3F) * 256) + SPIReceiveBuffer[1]; } m_DigitalGyroRawValue = (double) (iValue * 0.7326) * (M_PI / 180.0); break; case ADIS16265_TEMP_OUT: if((SPIReceiveBuffer[0] & 0xF) > 3 ) // Do we have a negative value { iValue=((SPIReceiveBuffer[0] & 0x3F) * 256) + SPIReceiveBuffer[1]; iValue= 4095 - iValue + 1; } else { iValue=((SPIReceiveBuffer[0] & 0x3F) * 256) + SPIReceiveBuffer[1]; } m_ADIS16265_Temperature = 25.0 + (iValue * 0.1453); break; case ADIS16265_ANGL_OUT: iValue=(SPIReceiveBuffer[0] & 0x3F ) * 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] & 0x0F) * 256 + SPIReceiveBuffer[1] ); m_ADIS16265_Voltage = ((double)(iValue * 0.00183)); break; }
Hat jemand das Teil am Rennen und kann mir einen Tip geben.Spannung: 1.87392 Volt statt ca. 4.96 Volt
Temperatur: -1314.084 Grad Celsius statt irgendwas um die 20-25 Grad.
Winkelangabe: 8.51055 Grad statt 0, da noch nicht bewegt und keine Vorgaben
Alarm Status: 0111010000000000 diese macht jedoch Sinn entsprechend der Dok.
Gruss R.
Kaum macht man es richtig, schon funktioniert's ...
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.
Kaum macht man es richtig, schon funktioniert's ...
Lesezeichen