[DAY 13] _ADXL345_I2C时序说明 (ADXL345)

今天我就来讲用逻辑分析仪来看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时序是甚麽:
https://ithelp.ithome.com.tw/upload/images/20210926/20141979IdnA3xeFTN.png
这段时序要看ADXL345_Init();这部分
https://ithelp.ithome.com.tw/upload/images/20210926/20141979r9Y3Ip8mDR.png
再来看看这部分的I2C逻辑分析仪的图:
https://ithelp.ithome.com.tw/upload/images/20210926/20141979dHaY9D2lYE.png
这逻辑分析仪会直接帮我写的时序自动显示16进制,前提是要有I2C的开始信号和结束信号才会认定这为I2C时序
先看黄色框框的部分,我刚开始先写入A6为写入的设备地址,我昨天说的0x53为设备地址,左移1位後再来最後1bit决定写或是读,0(写)、1(读),所以A6为写入、A7为读出,再来看0x31(绿色部分)是DATA_FORMAT的暂存器的地址(位置可以去看我昨天写在.h里面,我是照手册需告位置的),写入0x2B红框部分,接下来以此类推,我就是以这种方式来看自己是否有写对,看到这应该知道逻辑分析仪方便的地方了吧~
/images/emoticon/emoticon01.gif


<<:  30天打造品牌特色电商网站 Day.12 一定要有的导览列

>>:  day11: CSS style 规划 - utility CSS(Tailwind)-2

Day9 - 2D渲染环境基础篇 V[Canvas动画概论] - 成为Canvas Ninja ~ 理解2D渲染的精髓

OK, 我们终於来到了基础篇最後的部分,也就是Canvas动画~!(撒花) 在这个部分,我们会介绍:...

PHP 语言和你 SAY HELLO!!

第十四天 各位点进来的朋友,你们好阿 小的不才只能做这个系列的文章,但还是希望分享给点进来的朋友,知...

[DAY18] Use Case 设计概念

缘起 Use Case 的职责是把业务逻辑封装,一个 Use Case 大致可以对应到一个 User...

IOS、Python自学心得30天 Day-11 模组训练改善-3

前言: 经过一个晚上的找资料,模组终於能继续训练,但目前还没有强制停止储存模型的方法,所以之後会再改...

Day 30: 总结篇 — 30 天的 Obsidian 学习之旅

一、前言 认真使用 Obsidian 也已经 1 年了,这一路上学习到相当多的内容,才慢慢打造出今天...