ARM:g-sensor数据手册、函数原型atoi&itoa、读取加速度的基础
来源:互联网 发布:淘宝高佣金采集 编辑:程序博客网 时间:2024/04/30 02:41
1、g-sensor数据手册 // mma8653
1.1 测量范围
±2(1/256)±4(1/128)±8(1/64)
1.2 从设备地址
0x1d
R:0x3b W:0x3A
1.3 几种工作模式
powerdown / standby / active
1.4 内部有多少个寄存器(大概每个寄存器的用途)
50 多个寄存器(除去保留的)
- [ 0 : 3 ] - Z Y X方向是否有心的加速度值
- [ 4 : 7 ] - Z Y X方向的数据是否被取走,没被取走就会被覆盖
'SYSMOD
- [ 1 : 0 ] - 当前系统工作模式
'XYZ_DATA_CFG
- [ 1 : 0 ] - 配置测量范围
1.5 哪个寄存器中存储的是g-sensor芯片的ID - 0x5a
' WHO_AM_I -0x0d
1.6 哪个寄存器中存储的是计算得到的三个轴的加速度值
'OUT_X_MSB - OUT_X_LSB
'OUT_Y_MSB - OUT_Y_LSB
'OUT_Z_MSB - OUT_Z_LSB
该寄存器在ACTIVE模式下读取。
1.7 哪个寄存器可以操作改变g-sensor的工作模式
1.9 S5P6818要将1个字节写入到g-sensor某个特定寄存器中,具体时序要求?
2、编程实现itoa、atoi函数
vi itoa.c
void itoa (char* buffer, unsigned int num);
' 一个代码写的好坏的有三个功能:
即算法的优劣:时间复杂度、空间复杂度、代码是否易读
3、读取加速度的方法
3.1 切换为ACTIVE模式
CTRL_REG1 - [ 0 ] 1 = ACTIVE模式 // 写入操作
单字节的写入:
主设备发送start信号,发送从设备地址 | W
主设备接收ACK信号
主设备发送要写入的寄存器地址
主设备接收ACK信号
主设备发送要写入寄存器的数据
主设备接收ACK信号
主设备发送stop信号
先将CTRL_REG1寄存器的内容读到S5P6818内部缓存
在缓存中将bit0位 - 置1
再将缓存的值写回CTRL_REG1寄存器
3.2 加速度值存在的寄存器
STATUS:3轴加速度值状态信息
OUT_X_MSB
OUT_X_LSB:x轴的加速度值
OUT_Y_MSB
OUT_Y_LSB:y轴的加速度值
OUT_Z_MSB
OUT_Z_LSB:z轴的加速度值
两种方式读取加速度值:
1)单字节读取,每次读1个寄存器,读6次;
2)多字节读取,一次性读取6个字节数据;
寄存器地址会自动+1
注意:// 按照多字节的读取方式,要保证 CTRL_REG - [1] = 0 才能读到XYZ低位加速度值。
1.1 测量范围
±2(1/256)±4(1/128)±8(1/64)
1.2 从设备地址
0x1d
R:0x3b W:0x3A
1.3 几种工作模式
powerdown / standby / active
1.4 内部有多少个寄存器(大概每个寄存器的用途)
50 多个寄存器(除去保留的)
所有的寄存器都是 8 bit的
- [ 0 : 3 ] - Z Y X方向是否有心的加速度值
- [ 4 : 7 ] - Z Y X方向的数据是否被取走,没被取走就会被覆盖
'SYSMOD
- [ 1 : 0 ] - 当前系统工作模式
'XYZ_DATA_CFG
- [ 1 : 0 ] - 配置测量范围
1.5 哪个寄存器中存储的是g-sensor芯片的ID - 0x5a
' WHO_AM_I -0x0d
1.6 哪个寄存器中存储的是计算得到的三个轴的加速度值
'OUT_X_MSB - OUT_X_LSB
'OUT_Y_MSB - OUT_Y_LSB
'OUT_Z_MSB - OUT_Z_LSB
该寄存器在ACTIVE模式下读取。
1.7 哪个寄存器可以操作改变g-sensor的工作模式
‘ CTRL_REG1
- [ 0 ] 1 = 配置为ACTIVE活跃模式
1.9 S5P6818要将1个字节写入到g-sensor某个特定寄存器中,具体时序要求?
master--ST--从addr|W---接ACK---0x0d---接ACK---SR---从地址|R---接ACK---收---NACK---STOP
slave --------接---------发ACK-----接---发ACK-----------接-------发ACK---
2、编程实现itoa、atoi函数
vi itoa.c
void itoa (char* buffer, unsigned int num);
/** 代码演示 - itoa.c **/void itoa (char* buf, unsigned int num) { unsigned int tmp = 0; buf[0] = '0'; buf[1] = 'x'; int i = 9; while (num) { tmp = num % 16; if (tmp > 9) buf[i] = 'a' + tmp - 10; else buf[i] = '0' + tmp; num /= 16; i--; } while (i >= 2) { buf[i--] = '0'; // 0x0000005a 中间补全的0 } buf[10] = 0; // 最后1位的\0}
/** 代码演示 - atoi.c **/int atoi (char* s) { int i = 0, cnt = 0, num = 0; char* tmp = s; while (*tmp) { if (*tmp >= '0' && *tmp <= '9') num = num * 10 + (*tmp - 48); // '0' <==> 48 else break; tmp++; } return num;}
' 一个代码写的好坏的有三个功能:
即算法的优劣:时间复杂度、空间复杂度、代码是否易读
/** 代码演示 - mma8653.h**/#ifndef _MMA8653_H_#define _MMA8653_H_extern void mma8653_show_id (void);#endif //_MMA8653_H_/** 代码演示 - mma8653.c**/#include "iic.h"#include "itoa.h"#include "uart.h"#define ID_REG 0x0d#define SLA_ADDR 0x1dvoid mma8653_read (unsigned char offset, /* 寄存器地址 */ unsigned char* buf, /* 字节缓冲区 */ int len /* 读取字节数 */) { // start---发送从设备地址<<1|W---接收ACK iic2_start (SLA_ADDR, 0); // 发送要读取的寄存器地址---接收ACK iic2_tx (&offset, 1); // start---发送设备地址<<1|R---接收ACK iic2_start (SLA_ADDR, 1); // 接收从设备返回的指定的寄存器内容,NACK iic2_rx (buf, len); // 发送stop iic2_stop ();}void mma8653_show_id (void) { unsigned char id = 0; char buf[11] = {0}; // 读取ID mma8653_read (ID_REG, &id, 1); // 显示ID uart_puts ("\nmma8653_ID:"); itoa (buf, id); uart_puts (buf);}
3、读取加速度的方法
3.1 切换为ACTIVE模式
CTRL_REG1 - [ 0 ] 1 = ACTIVE模式 // 写入操作
单字节的写入:
主设备发送start信号,发送从设备地址 | W
主设备接收ACK信号
主设备发送要写入的寄存器地址
主设备接收ACK信号
主设备发送要写入寄存器的数据
主设备接收ACK信号
主设备发送stop信号
先将CTRL_REG1寄存器的内容读到S5P6818内部缓存
在缓存中将bit0位 - 置1
再将缓存的值写回CTRL_REG1寄存器
3.2 加速度值存在的寄存器
STATUS:3轴加速度值状态信息
OUT_X_MSB
OUT_X_LSB:x轴的加速度值
OUT_Y_MSB
OUT_Y_LSB:y轴的加速度值
OUT_Z_MSB
OUT_Z_LSB:z轴的加速度值
两种方式读取加速度值:
1)单字节读取,每次读1个寄存器,读6次;
2)多字节读取,一次性读取6个字节数据;
寄存器地址会自动+1
注意:// 按照多字节的读取方式,要保证 CTRL_REG - [1] = 0 才能读到XYZ低位加速度值。
0 0
- ARM:g-sensor数据手册、函数原型atoi&itoa、读取加速度的基础
- atoi()函数原型与itoa()函数原型
- itoa atoi ltoa ultoa函数原型实现
- itoa atoi ltoa ultoa函数原型实现
- strcpy,strcat, strcmp, atoi, itoa函数原型
- ARM:g-sensor重力传感器电路原理图、I2C控制器数据手册、g-sersor芯片数据手册
- 基础函数的实现(strcpy,strcat, strcmp, atoi, itoa)
- 基础函数的实现(strcpy,strcat, strcmp, atoi, itoa)
- 基础函数的实现(strcpy,strcat, strcmp, atoi, itoa)
- 函数atoi,itoa 的实现
- 函数atoi,itoa 的实现
- strcpy,strcat, strcmp, atoi, itoa函数原型实现
- strcpy,strcat, strcmp, atoi, itoa函数原型实现
- strcpy,strcat, strcmp, atoi, itoa函数原型实现
- Android 加速度传感器(G-Sensor)
- Android 加速度传感器(G-Sensor)
- atoi() & itoa()函数的内部的实现
- atoi() & itoa()函数的内部的实现
- 带表头的单向循环链表
- 【SQL Server】批量数据导入到数据库
- bzoj1038 [ZJOI2008]瞭望塔
- Android6.0编译程序时,getSlotFromBufferLocked: unknown buffer: 0xac0f8650
- Linux防火墙开启与关闭
- ARM:g-sensor数据手册、函数原型atoi&itoa、读取加速度的基础
- java设计模式之代理模式
- 定时关机
- SQL FOREIGN KEY 外键限制学习笔记
- APP实用开发—RxJava 和 Retrofit 结合使用
- java 开发pc小工具 ,打包可运行的 jar
- Android服务(Service)
- gevent调度流程解析
- 制图 | AutoCAD 基本设置和使用