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/cn.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灯, 水草

请输入看板名称,例如:Boy-Girl站内搜寻

TOP