This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

FDC2212: STATUS reads always 0

Part Number: FDC2212
Other Parts Discussed in Thread: FDC2214EVM

I followed application example on page 42 of fdc2212 manual (http://www.ti.com/lit/gpn/fdc2212).

I am interfacing FDC2212 from stm32f303 uC, FDC2212 respond correctly to i2c communication (returns correct MANUFACTURER_ID), but when reading status I get 0 and also all values DATA_CH0 and DATA_LSB_CH0 are always 0.


What I am doing wrong?

Code is available at:

github.com/.../FDC2212.cpp



On osciloscope I clearly see signal on 18uH inductor. Picture of scope attached.

  • Ok it seems I am reading some values now.. but I am getting ERR_ALW.

  • After changing device ative bit, I Start reading values:

    So this line:

    //0b0   0 1 0 1 0 0 0 0 00 0001      device is active - no sleep

    Fixed reading...

    Whole setup of FDC2212_CONFIG_REGADDR              0x1A register:

           //reset device

    write16FDC(FDC2212_RESET_DEV, 0b1000000000000000);  //reset device

    //0b00  00 0001                      RESERVED

    //0b0   0 00 0001                    Normal current drive (auto scan is enabled)

    //0b0   0 0 00 0001                  Disable interrupt pin

    //0b0   0 0 0 00 0001                RESERVED

    //0b0   0 0 0 0 00 0001              Use internal oscilator

    //0b1   1 0 0 0 0 00 0001            RESERVED

    //0b0   0 1 0 0 0 0 00 0001          full current mode

    //0b1   1 0 1 0 0 0 0 00 0001        RESERVED

    //0b0   0 1 0 1 0 0 0 0 00 0001      device is active - no sleep

    //0b00 00 0 1 0 1 0 0 0 0 00 0001    Contineous reads on CH0

    //FDC2212_CONFIG_REGADDR              0x1A

    write16FDC(FDC2212_CONFIG_REGADDR, 0b0001010000000001);  //set config

    Now I would like to extend the range of FDC2212 - it seems I can detect movements only within 3 centimeters.

    Can I adapt pcb somehow (coil or cap modification?) Or it is possible to do it via software?

    Here is schematic of what I use:

    Sense area is rectangular 1cm wide and 9cm in length.

    This sense area is GND shielded on another side of pcb with raster ground plane.

  • Hello,

    To extend the range of the FDC2214EVM, you can do one of the following options:

    • Use a larger sensor
    • Do not use a ground plane directly beneath the sensor
      • If you do use a ground plane, use a hatched pattern instead of a solid pour and increase the separation between the ground plane and the sensor
    • Use a larger RCOUNT value to decrease the noise in the system
    • Use an external 40MHz reference clock to decrease the noise in the system

    Hope this helps point you in the right direction!

    Regards,

    Luke

  • Hi Luke,

    I did first two points you suggested but that has not improved sensitivity and I am already using maximal r_count in my code when initializing chip:

        //rcount maximized for highest accuracy
        write16FDC(FDC2212_RCOUNT_CH0_REGADDR, 0xFFFF);

    You can see video where I show sensitivity is still very small...

    According to TI webench site 30cm distance sense should be possible with fdc2212 - or I am missing something? See screenshot from webench:

  • Hi Zhivko,

    We recommend using an external oscillator for the best resolution. How are you measuring sensitivity?

    Are you reading out the DATAX register from the device and observing code change because a scope measurement is not going to be very precise.

    Regards,

    Varn
  • I actually haven't predicted to use external oscillator on my hardware.

    This are readings that I have from sensor.

    Since values are kind of drifting - I need to find good sample code to detect hand touch. So actually somthing to adapt to value of capsense when hand is not present near sensor.

    In bottom picture you see hand got near the sensor 5 times. So how would I go to define what vaule should be trigger value for detecting hand touch? Any idea?

  • I solved this latest problem by calculating long moving average of values and short moving average ov values.
    with this approach, software adapts to new (drfting) values. It works nicely now.