iT邦幫忙

2021 iThome 鐵人賽

DAY 13
0
Arm Platforms

基於ARM-M0架構MCU之落摔檢測韌體開發系列 第 13

[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


上一篇
[DAY 12] _三軸感測器讀取函示講解 (ADXL345)
下一篇
[DAY 14] _最小系統板規劃
系列文
基於ARM-M0架構MCU之落摔檢測韌體開發32

尚未有邦友留言

立即登入留言