Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Fork of ADIS16488 by
Revision 3:4420cf0e0b74, committed 2017-01-10
- Comitter:
- raprism
- Date:
- Tue Jan 10 22:22:51 2017 +0100
- Parent:
- 2:e2e5e40668bf
- Commit message:
- - added ADIS16485 as correct model type
- removed redundant SPI writes
Changed in this revision
| Adis16488.cpp | Show annotated file Show diff for this revision Revisions of this file |
--- a/Adis16488.cpp Sat Apr 27 23:12:44 2013 +0000
+++ b/Adis16488.cpp Tue Jan 10 22:22:51 2017 +0100
@@ -19,7 +19,7 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
+
#include "Adis16488.h"
uint16_t const GYRO_REGS[] = {0x1000, 0x1200, 0x1400, 0x1600, 0x1800, 0x1A00};
@@ -36,7 +36,7 @@
_cs = &cs;
_rst = &rst;
_dr = &dr;
-
+
return;
}
@@ -45,65 +45,67 @@
_dr->mode(PullDown);
_rst->write(0);
_cs->write(0);
-
- _spi->format(16,3);
- _spi->frequency(10000000);
-
+
+ //_spi->format(16, 3); // needs to be done with spi.format()!
+ _spi->frequency(2000000);
+
return;
}
void Adis16488::enable(void)
{
LOG("Preparing the ADIS16488 IMU\n");
-
+
_rst->write(1);
wait(1.0);
-
+
writeRegister(0x8000);
- writeRegister(0x7e00);
+ //writeRegister(0x7e00);
uint16_t id;
- readRegister(0x7e00, id);
- if(id != 0x4068)
+ readRegister(0x7e00, id); // actually writes also to register!
+ if(id != 0x4068 && id != 0x4065)
{
ERROR("Product ID doesn't match, %04X\n", id);
}
- LOG("Product ID is %04X\n", id);
-
+ LOG("Product ID is %05u (%04X).\n", id, id);
//this result correctly returns 0x4068 as per the ADIS16488 specification
- //get the SERIAL_NUM (page 4, reg: 0x20)
+
+ //get the SERIAL_NUM (page 4, reg: 0x20)
writeRegister(0x8004); //first change the page to page 4
writeRegister(0x2000); //send the register to get on the next write
uint16_t serial_num;
readRegister(0x2000, serial_num);
LOG("IMU serial number is %04X\n", serial_num);
-
+
writeRegister(0x8003); //change to page 3
- writeRegister(0x7800); //get FIRMWARE_REV
+ //writeRegister(0x7800); //get FIRMWARE_REV
uint16_t rev;
readRegister(0x7800, rev);
LOG("Firmware revision %04X\n", rev);
-
- writeRegister(0x7A00); //get FIRMWARE_DM
+
+ //writeRegister(0x7A00); //get FIRMWARE_DM
uint16_t rev_dm;
readRegister(0x7A00, rev_dm);
-
- writeRegister(0x7C00); //get FIRMWARE_YR
+
+ //writeRegister(0x7C00); //get FIRMWARE_YR
uint16_t rev_yr;
readRegister(0x7C00, rev_yr);
- LOG("Frimware date/month/year is %02X/%02X/%04X\n", ((rev_dm>>8)&0xff), (rev_dm&0xff), rev_yr);
-
- //change the DECRATE to 98.4 Hz (this is also in page 3)
+ LOG("Firmware date.month.year is %02X/%02X/%04X\n", (rev_dm&0xff), ((rev_dm>>8)&0xff), rev_yr);
+
+ // change the DEC_RATE (this is also in page 3)
+ // sampling rate is 2460/(DEC_RATE+1)Hz
+ // so for 0x17: 102.5 Hz
writeRegister(0x8C17); //write high byte (only page number can be written in a single byte)
- writeRegister(0x8D00); //write the low byte of DECRATE
-
+ writeRegister(0x8D00); //write the low byte of DEC_RATE
+
// using varf...
// writeRegister(0x86CD); //write high byte to register 0x06
// writeRegister(0x8700); //write the low byte of 00 to registed 0x07
writeRegister(0x8000); //change to page 0
-
- // configred so IRQ is allowed
+
+ // configured so IRQ is allowed
_dr->rise(this, &Adis16488::drHandler);
-
+
return;
}
@@ -114,12 +116,12 @@
}
void Adis16488::readRegister(uint16_t const reg, uint16_t &data)
-{
+{
_cs->write(0);
_spi->write(reg);
data = _spi->write(reg);
_cs->write(1);
-
+
return;
}
@@ -128,7 +130,7 @@
_cs->write(0);
_spi->write(reg);
_cs->write(1);
-
+
return;
}
@@ -160,7 +162,6 @@
{
readRegister(DELTVEL_REGS[i], deltvel.data[i]);
}
-
+
return;
}
-
