2
\$\begingroup\$

We have been working on motion sensor unit FIS1100.

We decided to use it as traditional motion sensor (FIS1100 can be operated in two modes Attitude engine mode and traditional sensor mode). We are using I2C for communication with motion sensor. Read and write to the motion sensor works properly. After making the configurations, I am not seeing any output in the output data registers.

Can anyone tell me where i had gone wrong in my configuration as this is my first experience with motion sensors.

Below is my configuration:

CTRL1 - 0x00
CTRL2 - 0x00 [full scale = 2g and ODR = 1000 ]
CTRL3 - 0x00 [full scale = 32 gps and ODR = 1000]
CTRL4 - 0x00 [There is no external magnetometer connected to FIS1100]
CTRL5 - 0x00 [Disabled low pass and high pass filters]
CTRL6 - 0x00
CTRL7 - 0x83 [Enabling sample synchronization,accelerometer and gyroscope]

How i read data from output data registers [Ax,Ay,Az and Gx,Gy,Gz]

Read STATUS0 register [Stop the updation of output data].
Read Output data registers [A[X,Y,Z][H,L], G[X,Y,Z][H,L]].

Note : We have also carried out accelerometer self test but there is no
output data in the output data registers.

Output:

MS conf completed
/*************CTRL registers after configuration ********************************/
ctrl1 = 0x0
ctrl2 = 0x0
ctrl3 = 0x0
ctrl4 = 0x0
ctrl5 = 0x0
ctrl6 = 0x0
ctrl7 = 0x83
/********************************************************/
STATUS0 = 0
ax = 0 : ay = 0 : az = 0 ;
gx = 0 : gy = 0 : gz = 0 ;

Datasheet can be downloaded from the following link
https://www.fairchildsemi.com/datasheets/FI/FIS1100.pdf


Edited to add answers to questions and schematic:

Read and write to the motion sensor works properly - I confirmed it by probing the I2C lines with DSO; moreover when I read 0x00 register I got 0xFC.

How have you proved that your hardware design (including I2C interface) is correct? - We used the application diagram (section 1.4 in datasheet) given in the datasheet FIS1100 (except that we haven't used magnetometer).

How do you know that your software program is correct? - When I read the datasheet this is what I understood, We can control FIS1100 motion sensor with seven control registers. I have listed out how I have configured them in the OUTPUT section above. This is where I need to know if anything needs to be done in addition to what I have done above, or if I am configuring it wrongly ????
Schematic diagram

Thanks

\$\endgroup\$
  • \$\begingroup\$ Hi - You will need to supply lots more information, before people can help you :-( You said: "Read and write to the motion sensor works properly." (a) How exactly have you confirmed that? (b) Read register 0 from the device - what value do you read? (c) How have you proved that your hardware design (including I2C interface) is correct? (d) Please supply a schematic diagram and explain your hardware. (e) How do you know that your software program is correct? Please supply full and clear answers to those questions, by adding them to the end of your original posting, using the "edit" button. \$\endgroup\$ – SamGibson Apr 28 '16 at 10:23
  • \$\begingroup\$ Hi Sam, Pls let us know if you need any more information on our set up :) \$\endgroup\$ – Ekambaram Apr 29 '16 at 7:45
2
\$\begingroup\$

Thanks for adding the schematic and the answers so far. Based on that, I have some concerns about the hardware design, and some suggestions for you to make progress with your troubleshooting.

Hardware:

a) By you reading register 0 of the FIS1100 successfully, that gives me some confidence in the I2C bus functionality. However:

  • Even though the I2C bus is working at least to some extent, personally I would use a low capacitance (i.e. not a "x1") scope probe and check the I2C waveforms on both sides of the PCA9306 I2C voltage translator. This is to get even more confidence in the waveform shape and check that it meets the timing requirements shown in the FIS1100 datasheet.

  • The need to check the I2C bus waveform is especially true on the 3.3V (MCU) side of the PCA9306, where I am surprised at the designer's choice of 10k\$\small\Omega\$ pull-up resistors, especially if the bus will be operating at more than 100kHz.

b) Although you say that your design is based on the datasheet, it is also different in several ways, including:

  • No MCU control of the FIS1100 RST (reset) pin; just a power-on reset. Even if that reset pulse meets the FIS1100 requirements (you need to check that), you have no way to reset the FIS1100 without a power-cycle. Also, as I will explain later, the "official" FIS1100 SDK goes through a more complex (but not fully explained) reset procedure which you cannot do, without MCU control of the FIS1100 reset pin.

  • You tied RESV3 pin to ground via 100k\$\small\Omega\$ resistor. The datasheet says it should be tied to ground, and a direct connection to ground is shown in the datasheet. We don't know how your change to the example design could affect the FIS1100 behaviour, as this is a reserved pin. However unless you have specific information from the IC manufacturer to deviate from the datasheet, such deviation is generally a risky plan.

  • Based on my experience with other IMUs, good power decoupling is vital for correct behaviour. I see your schematic shows the recommended capacitors C20 and C21, but the PCB layout also needs to be considered.

  • The recommended decoupling is missing from the PCA9306 VREF2 pin (see section 9.2.2.1 in the PCA9306 datasheet).

Software:

I did a quick search for you, but I only found one place with sample code for using the FIS1100 - and that is the official SDK from the manufacturer. Since you haven't mentioned using that, I will explain how you can get it:

  • Go to this link to create a "My Fairchild" account. (Obviously that link may rot over time, so be prepared to check their website if that link fails.)

  • Login to your new account, update your account profile and fill-in the address of your company (my old "My Fairchild" account was missing one of the address fields, and the download would not continue until this part of the account profile was completed).

  • Go to: https://www.fairchildsemi.com/evaluate/evaluation-boards/FEBFIS1100.html

  • Download the user guide for their FIS1100 evaluation board from the link on that page; it shows you a sample schematic and PCB layout.

  • At the bottom of that page under "Related Resources", click the "FEB Supporting Files (ZIP)" icon (I can't link it here, as it uses a bunch of JavaScript and must be clicked from the page I listed above, and you must be logged-in to your "My Fairchild" account first).

  • After you read and accept the license agreement, you can download the file (current version is 41.2MB) which is a Windows installation executable (unfortunately). When executed (requires admin permissions) it will offer to install all the software (and drivers) needed to use their FIS1100 evaluation kit, on their recommended MCU board.

  • Under the installation directory e.g. default: C:\Program Files\Fairchild Semiconductor\FIS1100 SDK 1.0.3 look under the SDK directory, including the Documentation, Examples and fis_driver sub-directories. The fis_driver sub-directory source code can easily be reviewed to see how the various FIS1100 registers and signals are used. Due to the software license, I don't believe that I can include that code here.

  • Interestingly, that source code includes accelerometer and gyroscope self-test routines which don't exactly follow the sequence of events shown in the FIS1100 datasheet. I don't know if the differences are important, but you said that:

We have also carried out accelerometer self test but there is no output data in the output data registers.

Therefore I would consider attempting the self-test again, but following the sequence of register accesses shown in the source code, instead of that shown in the datasheet. It would also be interesting whether the INT2 signal is behaving as described in the datasheet, when you attempt to perform the self-test.

  • Note that Fis1100_reset() function in the example source code, manually toggles the FIS1100 RST pin (which your schematic doesn't allow you to do), asserting it for 100uS, and then sends some commands for which I can't (quickly) find the meaning. Again, that might (or might not) be relevant to the incorrect behaviour you are seeing.

  • You said that you:

Read STATUS0 register [...] Read Output data registers [...] ctrl7 = 0x83

OK, so you have CTRL7 bit 7 (SyncSimpl) set. Therefore it may be helpful for you to check exactly what is reported in STATUS0 register. For example, if the accelerometer and gyroscope bits are all zero, that would suggest the accelerometer and gyroscope are not producing any readings. It would also be interesting whether the INT2 signal behaves as described in the datasheet when you are trying to do this.

I hope those comments and suggestions are helpful in your troubleshooting - of course it is up to you whether you decide to use any of that information :-)

\$\endgroup\$
  • \$\begingroup\$ Hi Sam, Connecting the RESV3 pin to ground through resister is the mistake we have been doing.After removing the resister our motion sensor is working properly.Thanks for spending your time and helping us :) \$\endgroup\$ – Ekambaram May 2 '16 at 14:23
  • \$\begingroup\$ @Ekambaram - That's good news - thanks for the feedback and I'm glad you found the problem! Unfortunately, since that is a "reserved" pin, we are not likely to ever know its exact use. As always, follow the datasheet :-) Thanks again! \$\endgroup\$ – SamGibson May 3 '16 at 16:29

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.