The Netduino forums have been replaced by new forums at community.wildernesslabs.co.
This site has been preserved for archival purposes only
and the ability to make new accounts or posts has been turned off.
h3mp's Content
There have been 12 items by h3mp
(Search limited from 01-May 23)
I have a simple program running at the moment that just reads a sensor and writes the result to a serial port...
every time it goes around the loop it toggles between two LEDs
while (true)
{
ToggleTwoLEDs();
ReadSensor();
WriteResultToSerialPort();
}
while running in visual studio the loop runs very quickly, when i stop debugging the LEDs toggling reduces to about quarter the speed (according to my eyes)..
I just replaced all instances of Debug.Print with a function called "DebugPrint", then i have a global bool i can toggle to compile with the debug output turned off.. now running at full speed:
I think the sensor has 10k pullups on it, I guess to move forwards i should look at it on a scope and logic analyser then post the results here.. was just hoping someone would magically know why it doesn't work on the new boards! :-)
I'm trying to read multiple registers at once from a LSM9DS0 accelerometer/gyro/compass chip..
Each sensor has 6 registers in a row that return X/Y/Z high and low bytes.. so i should be able to use the I2C_ADDRESS of the chip's XM sensor, then point a 'read' at the first of the 6 registers then i was hoping that would return an array of that register plus the next 5..
I use code based on this following example i found on the web:
I2CDevice.Configuration config = new I2CDevice.Configuration(I2C_ADDRESS, I2C_CLOCK_RATE_KHZ);
I2CDevice i2c = new I2CDevice(config);
byte write = { AddressOfFirstRegisterIneed }; byte read = newbyte[6]; //surely this should return the first and subsequent 5 registers? // create I2C write and read transaction
I2CDevice.I2CTransaction i2cTx = new I2CDevice.I2CTransaction[2];
i2cTx[0] = I2CDevice.CreateWriteTransaction(write);
i2cTx[1] = I2CDevice.CreateReadTransaction(read); // execution
i2c.Execute(i2cTx, I2C_TIMEOUT);
..what i get back is an array of bytes all containing the same value!? (there should be 6 distinct values returned).
if i do 6 separate transactions one after another reading just 1 byte, then i can return all 6 registers successfully..
but as they are all in a row should i not be able to do all this in one transaction?
(i'm doing this on my old Netduino 1 that is probably running 4.2.0 update1 as i didnt have any newer netduinos in my office today)
“The I2C embedded inside the LSM9DS0 behaves like a slave device and the following protocol must be adhered to. After the start condition (ST) a slave address is sent, once a slave acknowledge (SAK) has been returned, an 8-bit sub-address (SUB) will be transmitted: the 7 LSb represents the actual register address while the MSB enables the address auto increment. If the MSb of the SUB field is ‘1’, the SUB (register address) will be automatically increased to allow multiple data read/writes.”