Electronics 板


LINE

小弟是社會新鮮人,剛到公司自學不到一個月就被任命要在一個禮拜內寫出I2C通訊的程式 是的,您沒看錯,沒有前輩帶。 小弟現在要用PIC16F1824與OZ8920(battery protection IC)通訊,我已經把I2C的spec看 完一遍了,也把PIC16F1824的MSSP module稍微看過一輪,但還是不知道怎麼起頭。 我知道所有I2C的流程,Start, slave address, R/W, ACK, Stop,但是要如何變成程式碼 就是有困難。 我有上網抓I2C的範例,但是看了之後覺得跟SPEC上寫的流程完全不一樣,我還上國外論壇 請教,但沒有人能幫助到我的情況。我發文的網址:http://www.microchip.com/forums/m994750.aspx?tree=true 接著我又找了這個視頻https://www.youtube.com/watch?v=yM9OpRPMEAE,然後發現明明都
是I2C的通訊規格,為什麼這個視頻有分address high跟address low,我才懷疑會不會是 跟不同IC通訊時,都要配合各個IC相對應的Timing diagram,我不確定,所以想上來請教 前輩們。 我現在要做的事情只有從OZ8920的register中抓取想要的資料,OZ8920其他的動作皆由硬 體完成,想請前輩們給小弟一點方向,讓我知道能從哪裡下手,拜託了!不然我就要GG了! 這裡是OZ8920的datasheet:https://www.dropbox.com/sh/apiqddpjlv26ceq/AAA_HjaRwg8dPN0fSVTg2ddTa?dl=0 6/1補充:下載過datasheet的大大,請幫小弟一個忙,看完之後刪掉此檔案,因為主管說此 文件不能外流QQ --



※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 49.215.197.69
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Electronics/M.1495980900.A.E29.html ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:16:10 ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:16:54
1F:推 TWkobe: 有先確定接線都符合spec規範? 05/28 22:23
有,我們公司全部都是硬體工程師,版子已經做好了,只有我一個韌體工程師 現在的情況是deadline已經要到了,版子已經全部弄好了,就差在韌體寫進去就完了 ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:28:47
2F:推 TWkobe: mcu有先量過gpio產生的方波符合spec的要求? 05/28 22:29
這個......我完全不知道也沒這個觀念,但我想前輩們應該都知道這個要求,因為他們使 用這顆ic很久了 ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:33:36
3F:推 TWkobe: 看spec這i2c是write/read的basic function看page 34 05/28 22:33
4F:→ TWkobe: slave addr就是你這個外部設備的地址 05/28 22:33
5F:→ TWkobe: 你看p16有寫要符合方波的要求 05/28 22:35
我看了page34,他要先給slave address(這顆IC是60H),但我有個疑問,60H不是1個byte 的表示法嗎?可是它只能給7個bits,意思是我60H要用7個bits表示嗎?(變成C0H) 給slave address後,接著給reg_index,這跟PIC上的spec寫的方式不同,PIC上面是給 slave後就直接給data了。這樣是不是代表是說,不同IC雖然都是用I2C規格通訊,但傳送 訊息的方式卻是要依照IC的spec下去指定? 我有看Page16了,但我沒有看到方波的需求,都是跟時間有關係的參數 ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:45:55
6F:推 TWkobe: address high/low 應該只是一次接收量不夠分high low 05/28 22:39
7F:→ TWkobe: 實際上還是當作address而已 05/28 22:39
8F:推 hsucheng: http://www.ti.com/lit/an/slva704/slva704.pdf 05/28 22:40
9F:→ hsucheng: ti的文件,只有7頁希望對你有幫助 05/28 22:41
另外,在page34,在Write_data的後面有一個叫CRC,想請問前輩那是什麼? 謝謝hsucheng大大 ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:48:28
10F:推 TWkobe: CRC是校驗碼, 偶爾會因為有雜訊造成data錯誤 利用這個可以 05/28 22:51
11F:→ TWkobe: 簡單還原正確的data 05/28 22:51
那我猜我應該不用理它,因為我現在只是要抓電流跟電壓的register判斷是否在充電放電 跟充飽了沒,就算有誤差也不影響。 我想請教一下,我上面假設的60H→C0H是對的嗎?我應該只要照著page34的方式下去寫就行 了吧? ※ 編輯: zzss2003 (49.215.197.69), 05/28/2017 22:54:39
12F:推 TWkobe: 地址是0x60, 但實際上只要餵7bit address, 有些可以直接給 05/28 22:55
13F:→ TWkobe: 0x60, 有些要手動shit 1bit 05/28 22:55
14F:→ TWkobe: 我是有遇過要手動shift的 05/28 22:55
15F:推 tommycc: PIC 8bit系列應該可以用plib降低開發難度 05/28 22:55
16F:→ TWkobe: 你就弄一個#define addr 0x60 05/28 22:56
17F:→ TWkobe: #define addr_msg addr>>1 05/28 22:56
18F:→ TWkobe: 實驗看看需不需要手動移, 正確的話,slave端會回傳一個ack 05/28 22:57
19F:→ TWkobe: 至於pic的講的應該是他的libs作法, 我習慣先自己寫一個 05/28 22:58
20F:→ TWkobe: software i2c function先驗證是否正確 05/28 22:58
21F:→ tommycc: 喔不,不支援pic16f 05/28 23:00
22F:→ TWkobe: 還有p16重點是看此裝置的i2c是active high or low 05/28 23:00
23F:→ TWkobe: 通常是看start signal, 這spec看起來是active low 05/28 23:01
24F:→ TWkobe: 意思是說sda先low一段時間後, 接著scl開始low 05/28 23:04
25F:→ TWkobe: 弄個虛擬碼你大概就知道怎麼做 05/28 23:05
26F:→ TWkobe: void swi2c_START (int delyTime) { 05/28 23:05
27F:→ TWkobe: sda_set(); delay_us(delayTime); 05/28 23:07
28F:→ TWkobe: scl_set(); delay_us(delayTime); 05/28 23:08
29F:→ TWkobe: sda_clear(); delay_us(delayTime); 05/28 23:08
30F:→ TWkobe: scl_clear(); delay_us(delayTime); } 05/28 23:09
31F:推 TWkobe: 然後再弄一個swi2c_WRITE(int msg) { 05/28 23:12
32F:→ TWkobe: int data=msg; for(int i=0; i<8; i++) { 05/28 23:13
33F:→ TWkobe: if(data & 0x01) sda_set(); else sda_clear(); delay; 05/28 23:16
34F:→ TWkobe: data >= 1; } 05/28 23:16
35F:→ TWkobe: 這個function 可以用來解析要寫入的data來控制sda 05/28 23:17
36F:→ TWkobe: 例如要寫入的slav_addr / reg_index / write_data都可用到 05/28 23:19
37F:→ TWkobe: 最後再湊一個swi2c_writeMSG function來組合完整的write 05/28 23:21
38F:→ TWkobe: sequence 05/28 23:21
39F:→ TWkobe: 寫好後拿示波器量測scl/sda是否有符合完整個write signal 05/28 23:22
40F:→ TWkobe: 當你完成寫入上述三者都應該會在sda看到正確的ack signal 05/28 23:23
41F:推 TWkobe: 還有pic說給完address就給data的說法為何跟你spec不同的 05/28 23:26
42F:→ TWkobe: 原因是你裝置spec的reg_index/write_data也是data呀 05/28 23:27
43F:→ TWkobe: 不是因此i2c有何不同, i2c是標準大家都差不多, 只差在餵的 05/28 23:28
44F:→ TWkobe: data會不同 所以pic官方才說直接後面給data 05/28 23:28
45F:→ TWkobe: 剩下的就可以依據我說的弄出read的完整function了 05/28 23:30
46F:推 TWkobe: 我忘了說msg之間的w/r bit是幹嘛 05/28 23:34
47F:→ TWkobe: 這個是說接下來要對slave裝置是要進行read或write動作 05/28 23:35
48F:推 TWkobe: 然後在說一下read sequence, 比較複雜一點 05/28 23:37
49F:→ TWkobe: 他等於要先對slave寫入address/reg_index後 05/28 23:38
50F:→ TWkobe: 結束一次i2c再重新restart寫入地址, 接著就重slave端讀取 05/28 23:39
51F:→ TWkobe: sda signal 05/28 23:39
52F:推 amistad: 推好人 TWkobe。補充一下,雖然都是 I2C 但各家實作的 05/29 00:06
53F:推 amistad: 略有不同,但基本原理類似。需要跟預slave 端IC 來加以確 05/29 00:09
54F:→ amistad: 認。 05/29 00:09
55F:→ amistad: 另外,之前經驗因為sda是三態連線,驅動方向跟驅動能力都 05/29 00:10
56F:→ amistad: 小心調整。 05/29 00:11
57F:推 bxc: 其實你這問題分成幾個1.你要發出正確I2C 2.OZ8920 3.硬體問題 05/29 09:02
58F:推 Williamette: TWkobe真是佛心來的 05/29 14:37
59F:推 teddy98: 看似TWkobe是你的貴人了 05/29 15:20
60F:推 katzlee: 佛心推文 05/29 15:31
61F:→ katzlee: 先用示波器看是不是有ACK吧 05/29 15:33
62F:→ katzlee: 另外你不用去國外論壇,microchip的台灣論壇就有小編和其 05/29 15:34
63F:→ katzlee: 他高手會幫忙你了 05/29 15:34
64F:推 NCTUbigGG: 推TWkobe! 05/29 17:22
65F:推 jeffic0730: 推kobe~ 05/29 19:13
66F:推 ping870224: 推 05/29 20:26
67F:推 furio: 推TWkobe好人 05/29 21:46
68F:推 doubletime: 推twkibe 05/29 21:57
69F:推 Biglottery: 推Kobe 真的是活菩薩 05/29 22:54
70F:推 porpoisewise: 用GPIO 兜,把時序一個一個輸出再換成輸入... 確認 05/30 01:40
71F:推 fxp87117: 佛心推 會有好報 05/30 19:29
72F:→ yugi2567: 推好人一生平安 05/30 23:59
※ 編輯: zzss2003 (60.248.26.157), 06/01/2017 10:59:44
73F:推 kobe8112: 幫你推TWkobe好人一生平安,真的是大貴人 06/01 12:56
74F:推 yugi2567: 原來道歉露出咪咪不犯法 因為咪咪只要被人知道 就不算是 06/04 21:43
75F:→ yugi2567: 咪咪啊!!!! 還主管說不能外流 06/04 21:43
76F:噓 k012727: 連I2C都沒辦法自學…我是覺得你不要去雷人家硬體了…後 06/04 23:33
77F:→ k012727: 續bug會解不完 06/04 23:33
78F:→ dysyase: 蜜月期都沒過完就要包生(還指定性別)!2號才剛找書耶 06/16 11:02







like.gif 您可能會有興趣的文章
icon.png[問題/行為] 貓晚上進房間會不會有憋尿問題
icon.pngRe: [閒聊] 選了錯誤的女孩成為魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一張
icon.png[心得] EMS高領長版毛衣.墨小樓MC1002
icon.png[分享] 丹龍隔熱紙GE55+33+22
icon.png[問題] 清洗洗衣機
icon.png[尋物] 窗台下的空間
icon.png[閒聊] 双極の女神1 木魔爵
icon.png[售車] 新竹 1997 march 1297cc 白色 四門
icon.png[討論] 能從照片感受到攝影者心情嗎
icon.png[狂賀] 賀賀賀賀 賀!島村卯月!總選舉NO.1
icon.png[難過] 羨慕白皮膚的女生
icon.png閱讀文章
icon.png[黑特]
icon.png[問題] SBK S1安裝於安全帽位置
icon.png[分享] 舊woo100絕版開箱!!
icon.pngRe: [無言] 關於小包衛生紙
icon.png[開箱] E5-2683V3 RX480Strix 快睿C1 簡單測試
icon.png[心得] 蒼の海賊龍 地獄 執行者16PT
icon.png[售車] 1999年Virage iO 1.8EXi
icon.png[心得] 挑戰33 LV10 獅子座pt solo
icon.png[閒聊] 手把手教你不被桶之新手主購教學
icon.png[分享] Civic Type R 量產版官方照無預警流出
icon.png[售車] Golf 4 2.0 銀色 自排
icon.png[出售] Graco提籃汽座(有底座)2000元誠可議
icon.png[問題] 請問補牙材質掉了還能再補嗎?(台中半年內
icon.png[問題] 44th 單曲 生寫竟然都給重複的啊啊!
icon.png[心得] 華南紅卡/icash 核卡
icon.png[問題] 拔牙矯正這樣正常嗎
icon.png[贈送] 老莫高業 初業 102年版
icon.png[情報] 三大行動支付 本季掀戰火
icon.png[寶寶] 博客來Amos水蠟筆5/1特價五折
icon.pngRe: [心得] 新鮮人一些面試分享
icon.png[心得] 蒼の海賊龍 地獄 麒麟25PT
icon.pngRe: [閒聊] (君の名は。雷慎入) 君名二創漫畫翻譯
icon.pngRe: [閒聊] OGN中場影片:失蹤人口局 (英文字幕)
icon.png[問題] 台灣大哥大4G訊號差
icon.png[出售] [全國]全新千尋侘草LED燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP