娇小w搡bbbb搡bbb,《第一次の人妻》,中国成熟妇女毛茸茸,边啃奶头边躁狠狠躁视频免费观看

歷史上的今天

今天是:2025年06月21日(星期六)

2020年06月21日 | 半年之殤:困擾半年的MSP430的I2C總線問題在今天解決

發布者:meilidaowl 來源: eefocus關鍵字:MSP430  I2C總線 手機看文章 掃描二維碼
隨時隨地手機看文章

搞過嵌入式開發的程序員一定知道有I2C總線,手機和電視中的主要串行技術,通過兩條線SDA,SCL解決總線傳輸,地址區分和熱插拔問題的技術。


可是就是這么一個簡單的東西,讓我這個自認為有些經驗的單片機開發者浪費了整整五個月!這還是我有比較充分的經驗,在一年半前就已經非常了解I2C協議的情況下!這段時間我花了無數的時間在調試,思考,解決問題而沒有一絲進展。反復的檢查問題,想要的結果死活不出來!昨晚的反思讓我今天早上我一大早起來第一件事就是調代碼,結果正確出來的時候,眼淚都快出來了。這篇文章,總結下這五個月來的問題,這五個月給我好好的上了一課。


五個月前,初步規劃方案階段:


我做的體感項目發展到了第四代,為了盡可能的減少尺寸和功耗,將原來的64腳IPM封裝的MSP430F149換成了更小,功耗更低的MSP430F2132。選擇該型號有顯然的好處:32QFN封裝,硬件I2C,自帶上拉電阻,16MHz的功耗更低。我們使用了原來所用的ADXL345加速計,MPU3050陀螺儀和HMC5883L的磁場計解決方案。在前一版的MSP430F149上是采用模擬I2C總線,而上述傳感器掛在這條總線上跑起來都毫無問題,只要焊接無問題,就一定能保證正確結果。而事實證明,這種自信確實是最后的罪魁禍首。


四個月前,第一版制作失敗:

換方案后,板子確實做得非常小,只有硬幣那么厚,小拇指那樣的細條。我們在設計上花費了很多精力,保證盡可能小的體積和封裝。PCB制版,焊接,上電,加速度計工作非常正常,而其他傳感器返回都為錯誤。我們一看這個情況,I2C出來啦!單片機沒問題!推斷只能是傳感器焊接問題。重新焊接,不行?那可能是布線和焊接問題。之所以考慮是焊接,是因為那種芯片非常難焊,所有管腳都在芯片屁股下面。如果技巧不夠,很容易出現焊接不良的情況,以前的多數問題都是焊接問題。


解決了一些小的布局問題以后,準備做第二次板。 


兩個月前:第二版制作失敗:


第二版做出來之后,出現了更嚴重的問題,每次上電調試,第一次程序還能寫進去,第二次就不行了。再用萬用表測,電源短路。上面的所有傳感器都燒掉了!后來才知道,用的助焊劑非常好用,但導電!如果不洗干凈,就會出現短路的問題! 后來我們都把板子直接泡到酒精里。 


新的問題又出現了,單片機工作很不穩定。經常出現調試寫入不正常,程序跑飛的情況,板子也會變得特別燙。用示波器一看,電源紋波相當大,在電源芯片旁邊的電容燙的不能用手碰。仔細分析,原來是我們使用的電容值沒有達到正常標準。這句話就在電源芯片PDF中的某一個非常不起眼的地方...更換以后,這部分沒問題了。


可是,I2C還是出不來!加速度計的0X00寄存器返回0XEF值,原本以為是對的,但實際上應該是0xE5;加上驅動程序一跑,發現加速度計根本沒正常工作!其他寄存器有的值讀出來是錯誤的,比如寫入0x3E,讀出來卻是0X5F.有些根本就不能讀!但磁場計卻能出來~陀螺儀永遠出不來! 這是為什么呢?既然磁場計能正確讀值,說明單片機和I2C總線軟硬件都沒問題,難道加速度計和陀螺儀芯片是假的??    


我們罵了一遍那些“萬惡的”淘寶賣家,重新買了一批傳感器回來。因為硬件制作確實嚴格按照要求做了。我們高興的以為,這不是我們的問題,開心的等待著順豐把芯片送回來。同時,繼續改進電路,完成了第三版。


一個半月前:第三版的I2C依舊有問題:


芯片買回來了,新PCB到貨了,興沖沖的上電,發現問題依舊,磁場計能出來,加速度計問題依舊,萬惡的0xEF。陀螺儀還和往日一樣,完全沒反應。這下尷尬了!


焊接問題?!我們找了手機維修的大牛,仔細的給我們焊了一遍。同組的同學也認真的焊接好多板子,出現的還是一樣的問題。


軟件I2C問題?但為什么磁場計能出來?所以沒問題


電路問題?仔細查過,沒問題。所有的布線都OK,測試都聯通。


單片機?工作的挺正常啊,JTAG調試都沒問題啊,讓它輸出高電平就是高,輸出低就是低,上拉電阻乖乖的焊上了。我不認為它有什么問題。


所有的選項都排除了,我只能把它歸結到自身:你平時太墮落了,老天看不下去,故意讓你遇到這種最惡心的問題。那段時候,我極度迷信。事實上,這套系統我在PC端上開發了足夠強大的服務器端,采用了最新的技術和設計方法,幾乎硬件一調好,系統就能工作啊!各種應用接口,通信流量監測,識別算法,插件系統,自然交互界面,無所不用其極。這個項目不屬于我正常的工作范疇,算是“周末項目”,做著玩玩賺點小錢花,但并不表示我對它不重視。它讓我很有動力的學了很多的東西。有點意思的是,如果不是這套體感系統,我也不會這么鉆研.NET程序開發,也不會在博客園開博客。哈哈。


半個月前:絕望

就像前一段,按照我的邏輯把所有的問題都考慮了一遍(后來想,真的是這樣嗎?)依舊無果。我已經不知道怎么做了,我變的迷信癲狂不知所措。可能是這個項目本身給我帶來了太多的好處,老天已經覺得它應該退出我的人生舞臺了。


可是我真的能放棄么?花了那么多錢,當然錢是次要的,那么多時間和精力才是關鍵。如果現在放棄,原有的那些東西都沒有了任何價值,最多證明我學過某門技術。我的無數思考和結論都沒有了意義。    最主要的是,我困擾在了我原本認為最簡單的問題上,它不可能解決不了呀?!怎么回事!


好多次我11點多從實驗室回來,一晚上的時間繼續白費,還是出不來.....


我翻了好多技術資料,發了好多詢問帖,有人會幫我回答,但那些問題我都挨個排查過了,沒有問題啊、


我甚至不相信邏輯,覺得數學書上的證明都是扯淡,誰也沒告訴你1+1一定等于2。我生活在一個不可知的世界。


我會經常做夢,夢到傳感器都出來了,然后興奮的一塌糊涂,早上起來插上板子,發現問題依舊,還是"0XEF",還是錯誤的I2C!



我逐漸的將注意力集中在了單片機上面,是它的問題么?我雖然了解I2C協議,看過了各種可能的問題,并嚴格按照I2C協議寫了代碼。但我開始懷疑它在通信的時候到底做了什么。我為什么不用示波器看看波形呢?它輸出高低電平無誤就證明你該相信它么? 


波形捕獲證明:它出現了中間電平。 數字電路只有0和1,不可能有中間電平這種東西!如果出現,只能是電阻分壓!  在與ADXL345通信時,這個問題表現得尤為明顯,MHC5883L通信時,中間電平變低了,正好落在了單片機能正確檢測的范圍之內。


那么,出現了不該出現的電阻,它在不合時宜的地方出現,分解了本該正確的電平值導致了單片機端口電壓檢測錯誤!電阻從哪來呢?我明明已經關掉了單片機的上拉電阻使能,按照PDF的說明,這應該也是沒有問題的。但肯定就是單片機問題!


昨天:心血來潮


正好是圣誕節,瘋玩了一天,晚上回來,還是決定去實驗室看看。將板子的I2C總線引出來,去掉CPU,接到了原來的MSP430F149軟件I2C引腳,上電,三個傳感器都毫無壓力的出來了。非常流暢和清晰!就是單片機問題!


換單片機?代價太大,如果換掉,那么所有的板子都要重做。而且原來的尺寸太大,所以原來的外觀設計都要推倒重來。如果這一步邁出去,我們五個月來的辛苦基本上都白費了。真的要這樣么?原來的程序沒問題啊!或許只能這樣了。


我不信,MSP430提供了硬件I2C,為什么不用硬件I2C試試看呢?原來嘗試過,但很奇怪所以沒有繼續深入。那我就要和你死磕。從晚上9點鐘開始到12點宿舍熄燈。找到了一份完整的關于硬件I2C的代碼模板,不過有些問題,明天繼續。


今天:成功!


6點鐘睡不著了,想著那些事情,我趕緊坐起來,趁著自己有些精神,趕緊看那些代碼。昨天晚上太累,好些地方寫錯了。修修改改,哦?有點意思啊。再改掉了中斷的代碼和其他的一些問題之后,加上驅動函數,加速度計正常工作!陀螺儀正常工作!磁場計正常工作!


究其原因,是MSP430F2132和MSP430F149的端口結構不一致導致的,2系列的單片機存在上拉電阻和一些額外的配置,導致一般的模擬I2C代碼移植到該單片機時,檢測高低電平的時候無法正確判斷。但硬件I2C不存在這個問題,只要外部加上拉電阻,就能正常工作,具體細節我還沒有仔細論證分析,等待幾天之后的分析結果。


那一刻,我有點暈,有點不想說話。反倒是很平靜。這種事情,從來都不會有那種“放著不動就能成功”的情形。但還是趕緊跑出去給隊友打了電話。興奮之情完全不用形容~原本這一刻,是準備在做好板子焊接完成后的五分鐘搞定的,我花了五個月時間。經歷了各種痛苦和無語,它今天總算出來了。項目因為這個問題卡的死死的沒有半點進展,如果早出來的話,現在幾乎已經做完了.....%>_<% 


對這個成功,我真的無顏大肆渲染,這可能是一個本科生的簡單小實驗而已,把我足足干掉了五個月的時光。它不是什么歷史性時刻,它僅僅是一個普普通通項目的簡單開始而已,僅僅如此。


總結: 

這部分可能是最本文關鍵的部分。我的盲目自信和粗心讓我在如此簡單的問題上困擾了整整五個月。這些問題讓我快崩潰。寫在下面的:


任何事情首先建立反饋,能讓我們真實的知道內部發生了什么,串口,調試JTAG,液晶屏,或者是示波器,邏輯分析儀,這些都是非常得力的助手。


不怕一個問題出錯,怕就怕在它是半對半錯性質的,對的那方面很容易讓你排除本身應該存在的問題,掩飾錯誤的真正原因,HMC5883L我恨你。


仔細看手冊說明!我什么時候學的壞毛病:喜歡跳讀,大致明白什么意思就行了。可是,那些問題就藏在原本跳過去的地方(不過對我這個問題,單片機手冊上還真沒說明,否則我真能看出來,但電源芯片配置不正確燒板子的事情,卻絕對有關聯)。


這個世界是有邏輯的,如果它出錯,那么肯定是有內在問題,上帝非常公平。


認真嚴謹的工作態度,詳細分析問題的能力——這兩句是我寫實驗報告時經常寫的,但我實際按照要求做了么?沒有!別人給你傳授經驗為什么很多情況沒用?來自真正努力地實踐,而這卻是好多人掛在嘴上而又特別缺乏的,包括我。多數問題真的都是個態度問題。


這個問題讓我險些放棄了整個項目,因為越來越大的實驗室壓力和考試壓力,讓我不知道該怎么走下去。實際上再過幾天調不出來,我就很可能放棄它了,它往后的故事也不會再有了,也更不會有這篇文章了。文章雖長,可我寫它的時間不超過調試上面那個問題的五十分之一。


這個問題雖然不大,但確實是自我出生以來讓我最無語的問題,仿佛死死的卡著脖子不能說話,痛卻說不出來。 


我很感激陪伴我度過這五個月的隊友,我妹妹,還有好多關心我的人。我還相信一件事情,我雖然是黨員,但我也是“二元論”者,這個世界有物理規律支撐,同時,天在看,地也在看,努力工作,好好待人待己,這個世界都不會虧待你的。

關鍵字:MSP430  I2C總線 引用地址:半年之殤:困擾半年的MSP430的I2C總線問題在今天解決

上一篇:亞馬遜準備買下ZooX的,能否念好自動駕駛的生意經?
下一篇:msp430g2553的IIC通信

推薦閱讀

一年一度的中國版CES(CES Aisa,亞洲消費電子展)近期拉開帷幕,這已經是CES進入中國的第四個年頭,我們也作為特邀媒體來到展會現場,為諸位揭開今年消費電子領域的看點與變化。?我們馬不停蹄奔走CES Aisa 5大展館后,說真的,有一絲遺憾。畢竟在老美2018 CES上各種新奇有趣的產品層出不窮,谷歌與亞馬遜圍繞語音生態的“貼身肉搏”也異常精彩。然而...
聯建光電控股股東、實際控制人、第二大股東以及廣東南方新視界傳媒科技有限公司(以下簡稱“擬收購方”)簽署了《股份轉讓意向書》。為進一步優化公司股權治理結構,確保公司經營模式創新和整體戰略落地,擬收購方擬通過協議轉讓方式取得公司第二大股東持有的聯建光電12.55%股份,并擬同意在現行法律法規和監管層許可范圍內,為取得聯建光電實際控制權,...
據91mobiles的2020年買方見解調查數據顯示,三星或許會在未來幾個月內看到更多增長,這可能會以小米等競爭對手的成本為代價。圖源:91mobiles據91mobiles給出的數據,有23.7%的受訪者表示,下次升級時他們可能會購買三星手機,小米以20%的份額位居第二。值得一提的是,91mobiles去年也進行了相同的調查,并對用戶提出了相同的問題當時的品牌偏好也是如此...
工控機主板及ARM工控主板都屬于工業主板范疇,其與普通主板擁有本質區別,下面就分析一下工控機主板及ARM工控主板核心要素分析,以便大家在進行工業主板選型的時候有所區別。主要有以下幾點:1、工業主板與普通主板主要的區別在于:尺寸規格、擴展槽的支持、使用環境、生命周期、可靠性、保護功能、工作溫度等方面。2、工業級主板常在惡劣環境下工作(工作...

史海拾趣

問答坊 | AI 解惑

基于ARM微控制器LPC2138的分布式系統設計

摘 要:本文基于RS485總線,以ARM微控制器LPC2138為核心構建了一個分布式控制系統,依靠ARM微控制器的強大的控制處理能力和豐富的外設,實現了智能化的控制和更大程度的系統集成,文中給出了部分電路圖,闡述了系統中引入的無極性連接和IAP(在應 ...…

查看全部問答∨

51單片機C語言程序設計與實驗

51單片機C語言程序設計與實驗…

查看全部問答∨

黑白液晶上的動畫 (USB控制)

$(\'swf_u6M\').innerHTML=AC_FL_RunContent(\'width\', \'550\', \'height\', \'400\', \'allowNetworking\', \'internal\', \'allowScriptAccess\', \'never\', \'src\', encodeURI(\'http://player.youku.com/player.php/sid/XMTQ1MTUyMDgw/v.sw ...…

查看全部問答∨

有沒有。。。。全自動洗鞋機

現在大街上干洗店到處可見。我就是沒看過干洗鞋的。發明一個自動洗鞋的,這估計是個好生意…

查看全部問答∨

怎么用IO口模擬ALE

怎么用IO口模擬ALE呢? 謝謝!…

查看全部問答∨

移植2440官方bsp遇到的問題

我現在在把官方的 5.0bsp移植到我的mini2440 上發現當下載完nk后串口打印信息到這句就結束了 系統應該死機了 我在debug版本下也看到這種情況到那句就死機了 下面是我的debug信息  是什么原因導致的啊   Microsoft Windows CE ...…

查看全部問答∨

關于波特率的原理和公式推導

全雙工異步的串口通信,波特率本質是指每個高低電平的維持時間吧?還有那個定時器初值的公式怎么推導出來的,誰幫忙解答一下,忘記了。…

查看全部問答∨

某程序在一個實時系統(200M CPU,50MSDRAM)中已經最優化了,換到另外一個系統(300M CPU,50M SDRAM)中是否還需要優化,為什么?

某程序在一個實時系統(200M CPU,50MSDRAM)中已經最優化了,換到另外一個系統(300M CPU,50M SDRAM)中是否還需要優化,為什么? 請知道的趕緊回答啊!…

查看全部問答∨

我有本wince5.0的山寨本,怎么把它變成一個Web服務器?

還有我能裝雙系統嗎?(DOS?Linux?) 怎么弄?要折騰多久?…

查看全部問答∨
小廣播
設計資源 培訓 開發板 精華推薦

最新單片機文章
何立民專欄 單片機及嵌入式寶典

北京航空航天大學教授,20余年來致力于單片機與嵌入式系統推廣工作。

 
EEWorld訂閱號

 
EEWorld服務號

 
汽車開發圈

 
機器人開發圈

電子工程世界版權所有 京ICP證060456號 京ICP備10001474號-1 電信業務審批[2006]字第258號函 京公網安備 11010802033920號 Copyright ? 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
主站蜘蛛池模板: 棋牌| 金乡县| 淳化县| 芦山县| 永登县| 绥德县| 保康县| 罗江县| 东安县| 博兴县| 清原| 泰宁县| 寿光市| 文安县| 闵行区| 康保县| 邯郸县| 荣昌县| 佳木斯市| 永胜县| 普陀区| 三江| 满城县| 同仁县| 宁都县| 扶余县| 梧州市| 界首市| 搜索| 广灵县| 古交市| 德令哈市| 宜昌市| 新郑市| 祁东县| 华容县| 大方县| 年辖:市辖区| 五台县| 阿鲁科尔沁旗| 兰坪|