Ik ben bezig een applicatie voor Arduino om te zetten naar een C applicatie om te draaien op een NRF51 van Nordic Semi. Over i2c lees ik een accelerometer uit en doe vervolgens wat met die data.
In Arduino is de code als volgt:
Voor de native applicatie heb ik er het volgende van gemaakt:
Zoals te zien nagenoeg hetzelfde. De resultaten zijn dat echter niet. Op Arduino krijg ik het volgende:
In de native applicatie gebeurt echter het volgende:
De bitshift en bitwise OR zouden volgens mij hetzelfde moeten doen maar ik kan zelf het verschil in resultaat niet verklaren. Iemand die me een zetje in de goede richting kan geven?
In Arduino is de code als volgt:
C:
1
2
3
4
5
6
7
8
9
10
| byte Buffer[6]; short AccelRaw_x, AccelRaw_y, AccelRaw_z; float Accel_x, Accel_y, Accel_z; readReg(addr_A, LSM330D_OUT_X_L_A, 6, Buffer); AccelRaw_x = ((Buffer[1] << 8) | Buffer[0]); AccelRaw_x = AccelRaw_x >> 4; Accel_x = AccelRaw_x * 0.001; |
Voor de native applicatie heb ik er het volgende van gemaakt:
C:
1
2
3
4
5
6
7
8
9
10
| uint8_t Buffer[6]; short AccelRaw_x, AccelRaw_y, AccelRaw_z; float Accel_x, Accel_y, Accel_z; readI2cData(LSM330D_A_ADDR0,LSM330D_OUT_X_L_A,Buffer,6); AccelRaw_x = ((Buffer[1] << 8) | Buffer[0]); AccelRaw_x = AccelRaw_x >> 4; Accel_x = AccelRaw_x * 0.001; |
Zoals te zien nagenoeg hetzelfde. De resultaten zijn dat echter niet. Op Arduino krijg ik het volgende:
C:
1
2
3
4
5
| Buffer[0] = 96 Buffer[1] = 254 AccelRaw_x (1) = -416 AccelRaw_x (2) = -26 Accel_x = -0.03 |
In de native applicatie gebeurt echter het volgende:
C:
1
2
3
4
5
| Buffer[0] = 96 Buffer[1] = 254 AccelRaw_x (1) = 24672 AccelRaw_x (2) = 1542 Accel_x = 1.542 |
De bitshift en bitwise OR zouden volgens mij hetzelfde moeten doen maar ik kan zelf het verschil in resultaat niet verklaren. Iemand die me een zetje in de goede richting kan geven?
[ Voor 32% gewijzigd door Knopsje op 15-06-2015 15:29 ]