今天我就來講用邏輯分析儀來看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紅框部分,接下來以此類推,我就是以這種方式來看自己是否有寫對,看到這應該知道邏輯分析儀方便的地方了吧~。