基於mc3253加速度的調試

1.調試的芯片是mc3253

2.通過i2c配置寄存器

3.調試過程

(1)初始化i2c,i2c的讀寫速率

(2)i2c的讀寫函數,讀寫函數基本相同,設備從地址不同

(3)從設備的地址。

(4)先讀取芯片的id,看i2c是否能通訊,從設備的地址是否正常,芯片的焊接是否有問題。

(5)開始調試值,這個寄存器的值,一般會有,主要調試閾值,採樣的頻率,工作模式,中斷等。

 

8.24-------------------------------------------------------------------------------------------------------------

附一張初始化的圖片:

現在調試的過程就是,用的在nordic上的已經調試好的加速度的代碼,移植到emf32這個單片機平臺上。然後設置寄存器,當發生敲擊事件觸發中斷。

 

敲擊加速度傳感器,發現未發生中斷。

問題分析:

基本情況是:muc + acc,通過i2c進行通信。

 

一開始測試通信是否可行,發現通過i2c可以發送數據,讀取數據。i2c ok,

再讀取xyz的數值,發現沒有數據。

開始覺得是芯片壞了,或者寄存器的值沒有設置對。然後開始扒芯片手冊,一個一個對寄存器。

 

1.首先是芯片的寄存器,爲了兼容別的芯片,這個寄存器的值是一定需要的。

mc3256_read_byte2(0x32, &reg);,//寄存器0x32,讀取的值放入reg中

 

2,.然後是設置芯片的模式設置,要修改寄存器的值,芯片的狀態一定要是standby,否則修改不成功。

reg=(0x43);

mc3256_write_byte2(0x07, reg);

 

注意:如果要芯片工作且能觸發中斷,則模式要修改爲wake

reg=0x41; //該值將中斷腳拉高

//reg=0xC1; //該值可以將中斷腳拉低

mc3256_write_byte2(0x07, reg);

注:通過i2c修改這兩個寄存器的值,來確定中斷腳是否有焊接問題,如果中斷腳能被拉高拉低,則確定焊接無關,最後測試該腳一直是低狀態。

 

3.修改要觸發的中斷種類,這個寄存器表示,設置爲什麼中斷,當達到條件時就會觸發,相當於使能某個種類的中斷,比如敲擊中斷,搖晃中斷,跌落中斷等。

reg=0x04;//(reg|0x10); // use tap int type

mc3256_write_byte2(0x06, reg);

 

4.設置xyz探測的使能,此處表示xyz軸有變化的檢測

//tap dected on x y and z-axis

reg=0xE0;

mc3256_write_byte2(0x09, reg);//

 

5.閾值的設置,對中斷產生的一個閾值,一般通過調節這個值來

//set tap threshold

reg=0x11;///0-ff

mc3256_write_byte2(0x32, reg);//

 

6.然後讀取一次中斷標誌寄存器,清一下中斷。

//mdelay(100);

mc3256_read_byte2(0x03, &reg);// read 0x03 once ,avoiding register value is not 0x0

 

7.再最後將芯片的工作模式由standby修改爲wakeup

//wake mode

reg=0x41;

//reg=0xC1;

mc3256_write_byte2(0x07, reg);

 

8.對完這些寄存器後,發現有個寄存器設置的不對,就是檢測這個xyz的,修改完之後,讀取xyz軸的座標,發現果然可以讀取到值,然後在翻轉芯片等,發現數值都是正確的,滿心以爲調試ok

reg=0x02; -》修改爲0x03

mc3256_write_byte2(0x20, reg);//8bit 2g

發現敲擊還是沒有中斷,整個人都不好了。

 

開始將mcu和加速度芯片連接的中斷腳分開,分別測量裝填,mcu中斷腳高電平,加速度中斷腳低電平,(此處測量的是引到mcu的線路上,並不是直接連接acc芯片的引腳)

 

通過i2c發送數據,將中斷腳拉低,發現問題,中斷腳未焊好。這裏就是往上述的0x07裏面寫入不同的值。

 

從新焊接後,敲擊,發生中斷事件,muc這邊中斷設置爲下降沿觸發。每次觸發後,清除中斷。

 

一切都寫好之後,發現只有在初始化的時候,纔會觸動中斷,接着又不行了,發現acc的中斷標誌位已經被清除了,但是事實上就是中斷未清除,後來打印這個中斷狀態寄存器的值(0x03)發現中斷時是被清楚的,但是就是不觸發中斷,後來將讀取中斷寄存器的值讀取時間太快了(每次觸發中斷之後都去讀取這個中斷標誌,這個時間太短,後來改爲定時器3秒後去讀取),後來發現一切都可以了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章