今天我就来讲用逻辑分析仪来看I2C的时序吧,我觉得在学习阶段有台逻辑分析仪是很方便的,可以快速查看那个脚的时序,当然用示波器也行,但还要自己拉波型分段看有点麻烦。
逻辑分析仪便宜的一台大概1500就可以了,虾皮露天都有在卖。
来看看我三轴读取的情况吧。在看之前先来看我的主程序:
int main(void)
{
int8_t x0,x1,y0,y1,z1,z0;
double x,y,z,s;
SysTick_Init(48);
ADXL345_Init();
delay_ms(20);![](http://)
while(1)
{
x0=ADXL345_RD_Reg(0x32);// 取得 X 轴 低位元资料
x1=ADXL345_RD_Reg(0x33);// 取得 X 轴 高位元资料
x=((x1 << 8)+x0)/256.0;
y0=ADXL345_RD_Reg(0x34);// 取得 Y 轴 低位元资料
y1=ADXL345_RD_Reg(0x35);// 取得 Y 轴 高位元资料
y=((y1 << 8)+y0)/256.0;
z0=ADXL345_RD_Reg(0x36);// 取得 Z 轴 低位元资料
z1=ADXL345_RD_Reg(0x37);// 取得 Y 轴 高位元资料
z=((z1 << 8)+z0)/256.0;
s=sqrtf((xx)+(yy)+(zz));
printf("X=%.2f Y=%.2f Z=%.2f s=%.2f \r\n",x,y,z,s);
delay_ms(500);
}
}
先来看一上电後第1个执行的I2C时序是甚麽:
这段时序要看ADXL345_Init();这部分
再来看看这部分的I2C逻辑分析仪的图:
这逻辑分析仪会直接帮我写的时序自动显示16进制,前提是要有I2C的开始信号和结束信号才会认定这为I2C时序
先看黄色框框的部分,我刚开始先写入A6为写入的设备地址,我昨天说的0x53为设备地址,左移1位後再来最後1bit决定写或是读,0(写)、1(读),所以A6为写入、A7为读出,再来看0x31(绿色部分)是DATA_FORMAT的暂存器的地址(位置可以去看我昨天写在.h里面,我是照手册需告位置的),写入0x2B红框部分,接下来以此类推,我就是以这种方式来看自己是否有写对,看到这应该知道逻辑分析仪方便的地方了吧~
。
<<: 30天打造品牌特色电商网站 Day.12 一定要有的导览列
>>: day11: CSS style 规划 - utility CSS(Tailwind)-2
OK, 我们终於来到了基础篇最後的部分,也就是Canvas动画~!(撒花) 在这个部分,我们会介绍:...
第十四天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...
缘起 Use Case 的职责是把业务逻辑封装,一个 Use Case 大致可以对应到一个 User...
前言: 经过一个晚上的找资料,模组终於能继续训练,但目前还没有强制停止储存模型的方法,所以之後会再改...
一、前言 认真使用 Obsidian 也已经 1 年了,这一路上学习到相当多的内容,才慢慢打造出今天...