Skip to main content
Explorer
July 10, 2023
Question

ASM330lhh

  • July 10, 2023
  • 1 reply
  • 1842 views

Hi,
I am working with ASM330lhh, connected to my linux device via i2c.
in the sysfs i can see the device with the command  "ls -l /sys/bus/iio/devices/iio:device1/"  that return:
total 0
-r--r--r-- 1 root root 4096 Mar 24 14:21 consumers
-rw-r--r-- 1 root root 4096 Mar 24 14:21 current_timestamp_clock
-r--r--r-- 1 root root 4096 Mar 24 14:21 dev
drwxr-xr-x 2 root root 0 Mar 24 14:21 events
--w------- 1 root root 4096 Mar 24 14:21 hwfifo_flush
-rw-r--r-- 1 root root 4096 Mar 24 14:21 hwfifo_watermark
-r--r--r-- 1 root root 4096 Mar 24 14:21 hwfifo_watermark_max
-r--r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_scale_available
-rw-r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_x_raw
-rw-r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_x_scale
-rw-r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_y_raw
-rw-r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_y_scale
-rw-r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_z_raw
-rw-r--r-- 1 root root 4096 Mar 24 14:21 in_anglvel_z_scale
-r--r--r-- 1 root root 4096 Mar 24 14:21 name
lrwxrwxrwx 1 root root 0 Mar 24 14:21 of_node -> ../../../../../../../../firmware/devicetree/base/soc@0/bus@30800000/i2c@30a40000/asm330lhh@6a
drwxr-xr-x 2 root root 0 Mar 24 14:21 power
-rw-r--r-- 1 root root 4096 Mar 29 15:59 sampling_frequency
-r--r--r-- 1 root root 4096 Mar 24 14:21 sampling_frequency_available
lrwxrwxrwx 1 root root 0 Mar 24 10:25 subsystem -> ../../../../../../../../bus/iio
-r--r--r-- 1 root root 4096 Mar 24 14:21 suppliers
-rw-r--r-- 1 root root 4096 Mar 24 10:25 uevent

from the linux  terminal i am reading the device registers with 'i2cdump -f -y 2 0x6a' command, so the i2c is working.

my questions:

1. What are the units the i got from the command "cat in_anglvel_x_raw" ? degrres/second, milli degrees/second or radians?
2. what i need to do with the value of "in_anglvel_x_scale" ?
3. is there is a special mode to read from the libiio user space application? 
    FIFO or somthing like that? a code example will be great!
4.how should i initiate the device via i2c in the start?

Thanks

 

    This topic has been closed for replies.

    1 reply

    ST Employee
    July 11, 2023

    Hi @Orenzv ,
    Welcome to ST Community =D

    to reply directly to your questions:

    1. the raw data usually refers to the raw value in the register in LSB, that has no physical value. to get to mdps, you have to apply the conversion formula
      angvel[mdps] = angvel[LSB] * AngulaRateSensitivity
      referring to the datasheet (page 14, table 3), depending on the Full Scale selected
    2. I would say that there is the converted value, in mdps, probably, but you should check it by reading it (I never worked with Linux, so I'm not sure at the moment)
    3. sure, the FIFO can be used, and you can refer to the application note of the sensor for more info (and code snippets)
    4. also for this, you can refer to the application note, there is everything you should know, there =)

    If this answers your question, please, mark this as "best answer", by clicking on the "accept as solution" to help the other users of the community

    Niccolò

    OrenzvAuthor
    Explorer
    January 29, 2024

    As you already know, I am working with ASM330LHH and I am trying to work with Gyroscope.
    I found in STM's Git an example application code, as you can see in the link: https://github.com/STMicroelectronics/STMems_Standard_C_drivers/blob/master/asm330lhh_STdC/examples/asm330lhh_read_data_pollng.c

    I Took only the Gyroscope relevant code(Configuration and data polling) and Converted it to CPP.
    I Am using I2C that is working fine, I can read the Device ID.

    The problem is the X, Y and Z values I am reading as you can see in my prints:
    x: -6.58, y: -9.38 , z: -2.31

    x: -6.58, y: -9.66 , z: 1935.92

    x: -6.09, y: -9.73 , z: 1923.32

    x: -6.30, y: -10.01 , z: -7.84

    x: -6.37, y: -9.73 , z: -1.96

    x: -6.44, y: -9.73 , z: -2.10

    x: -6.65, y: -9.66 , z: -4.76

    x: -6.09, y: -9.94 , z: -4.62

    x: -6.58, y: -9.73 , z: -7.14

    x: -6.44, y: -9.66 , z: -4.62

    x: -6.09, y: -9.52 , z: 1925.91

    x: -5.81, y: -9.52 , z:

    x: -6.65, y: -9.73 , z: -4.83

    x: -6.30, y: -9.45 , z: 1901.97
    . . . .


    The values are not around '0' and Z sometimes gets high values('1923.32', '1903.23',…)

    Appreciate any help in this issue,
    Oren