我将传感器更改为非FIFO模式,但值在任何方向上仍然相同。
这是我如何将数据从寄存器转换为mg:
uint8_t hight;
uint8_t低;
int16_t结果;
double result1; low = readvalue(0x28);
hight = readvalue(0x29);
result =((hight<< 8)| low)>> 6; //转换为10位
if(结果& 1<< 9){
结果| =(1
完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我的问题是x,y和z寄存器的输出。
移动时寄存器的内容会发生变化,但只能快速移动。加速期间值会发生变化。不幸的是,运动后的价值观。问题是,任何方向的值都是相同的。我的程序在不同位置接受x,y和z寄存器的不同值,但传感器不会更改这些值。当传感器是水平的时,我接受g_z = 1,g_x = 0,g_y = 0,当我把它旋转90度时我估计g_z = 0, g_y = 1,g_x = 0 至少价值应该是不同的。但是值是相同的。 也许我在寄存器设置中犯了一些错误或者传感器无法做到这一点????? 我的注册设置: 地址价值 0x1f 0xc0 = 1100 0000 //编辑:修改 0x20 0x77 = 0111 0111 0x23 0x80 = 1000 0000 0x24 0x70 = 0111 0000 0x2e 0x80 = 1000 0000 以上来自于谷歌翻译 以下为原文 my problem is the output of the x,y and z registers. The content of the registers change when moving, but only with fast movement. The values change during the acceleration. Unfortunately, after the movement the values. The problem is, the values are the same in any orientation. My program accepts different values for x, y and z register in different positions, but the sensor doesn’t change these values. When the sensor is horizontal I accept g_z = 1, g_x = 0, g_y = 0 and when I turn it by 90 degrees I estimate g_z = 0, g_y = 1, g_x = 0 at least the values should be different. However the values are the same. Maybe I made some mistakes in the register settings or the sensor is not able to do this????? My register settings: Address value 0x1f 0xc0= 1100 0000 // edit: revised 0x20 0x77= 0111 0111 0x23 0x80= 1000 0000 0x24 0x70= 0111 0000 0x2e 0x80= 1000 0000 |
|
相关推荐
7个回答
|
|
配置似乎是正确的,我认为问题将出在你的阅读程序中。请检查是否为输出寄存器的低电平和高电平有红色。我建议你不使用FIFO就开始读取数据,因为它有点复杂。
注意:0xC0 = 1100 0000 以上来自于谷歌翻译 以下为原文 The configuration seems to be correct, I think the problem will be in your reading procedure. Please check that you red both low and high part of the output registers. I would recommend you to start read the data without using FIFO, because it is little bit more complex. Note: 0xC0 = 1100 0000 |
|
|
|
你好Miroslav,
我将传感器更改为非FIFO模式,但值在任何方向上仍然相同。 这是我如何将数据从寄存器转换为mg: uint8_t hight; uint8_t低; int16_t结果; double result1; low = readvalue(0x28); hight = readvalue(0x29); result =((hight<< 8)| low)>> 6; //转换为10位 if(结果& 1<< 9){ 结果| =(1 |
|
|
|
转换不正确(即result =((hight<< 8)| low)>> 6;你在8位变量中旋转高字节)。
使用以下命令,它还将管理二进制补码格式。 以上来自于谷歌翻译 以下为原文 The conversion is not correct (i.e. result = ((hight<<8) | low) >> 6; you rotate the high byte in 8 bit variable). Use following commands, it will also manage the two's complement format. |
|
|
|
我猜你没有读取所有输出值,因为启用了BDU,数据不会更新。您可以尝试禁用BDU,以确认此理论
您也可以共享完整的代码,以便我可以查看它。 以上来自于谷歌翻译 以下为原文 I guess you are not reading all the output values and because the BDU is enable the data are not updated. You can try to disable BDU, to confirm this theory You can also share the complete code so I can look at it. |
|
|
|
sensor :: sensor(char i){
char I2C_ADDR = i; vector&lt; string&gt;一个; a.push_back('i2cset -y 0 0x19 0x24 0x00'); a.push_back('i2cset -y 0 0x19 0x2e 0x00'); a.push_back('i2cset -y 0 0x19 0x1f 0xc0'); a.push_back('i2cset -y 0 0x19 0x23 0x00'); a.push_back('i2cset -y 0 0x19 0x20 0x57'); a.push_back('i2cset -y 0 0x19 0x30 0x00'); for(auto tmp:a) 系统(tmp.c_str()); this-&gt; fd = open('/ dev / i2c-0',O_RDWR); if(fd 以下为原文 sensor::sensor(char i){ char I2C_ADDR = i; vector a.push_back('i2cset -y 0 0x19 0x24 0x00'); a.push_back('i2cset -y 0 0x19 0x2e 0x00'); a.push_back('i2cset -y 0 0x19 0x1f 0xc0'); a.push_back('i2cset -y 0 0x19 0x23 0x00'); a.push_back('i2cset -y 0 0x19 0x20 0x57'); a.push_back('i2cset -y 0 0x19 0x30 0x00'); for(auto tmp : a) system(tmp.c_str()); this->fd = open('/dev/i2c-0', O_RDWR); if (fd < 0) { cout << 'Error opening file: ' < if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) { cout << 'ioctl error: ' < } char sensor::readvalue(char hex){ char arr = hex; write(fd, &arr ,1); read(fd, &arr, 1); return arr; } int8_t hight; uint8_t low; int16_t ergebnis; cout < low = readvalue(0x28); cout << hex << +low << ' '; hight = readvalue(0x29); cout << hex << +hight << ' '; cout << 'tt' << 'achse x: '; ergebnis = ((int16_t)hight<<8)+(uint16_t)low; ergebnis = ergebnis>>6; ergebnis = ergebnis * 4; cout << dec << ergebnis << ' '; |
|
|
|
如果BDU被禁用,值是否会改变?
不幸的是我没想到linux编程所以我无法帮助你,但传感器配置是正确的,它将测量100Hz的加速度。 以上来自于谷歌翻译 以下为原文 Does the value change if the BDU is disabled? Unfortunately I'm not expect on linux programming so I can't help you with that, but the sensor configuration is correct, it will measure acceleration at 100Hz. |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
请教:在使用UDE STK时,单片机使用SPC560D30L1,在配置文件怎么设置或选择?里面只有SPC560D40的选项
2821 浏览 1 评论
3262 浏览 1 评论
请问是否有通过UART连接的两个微处理器之间实现双向值交换的方法?
1838 浏览 1 评论
3687 浏览 6 评论
6091 浏览 21 评论
对H747I-DISCO写程序时将CN2的st-link复用为usart1,再次烧录时无法检测到stlink怎么解决?
390浏览 2评论
STM32G474RE芯片只是串口发个数据就发烫严重是怎么回事?
480浏览 2评论
STM32处理增量式编码器Z信号如何判断中断是正转的还是反向转的?
311浏览 2评论
使用STM32F407VET6的USB2.0功能,发现ctl后芯片无数据返回,是什么原因可能导致的呢?
227浏览 2评论
用STM32G431开发工程,1.50版本的Package包文件无法输出项目工程
332浏览 2评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-31 20:05 , Processed in 1.322753 second(s), Total 89, Slave 73 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号