打印

I2C冲突还未解决

[复制链接]
1978|14
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
lxz117|  楼主 | 2015-3-10 08:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
我用的上拉电阻是4.7K,PIC24要用10K吗?其实不明白为什么一发送启动信号就有冲突。我的电路很简单的啊,只有MCU和一个24C02的EEPROM连接啊。
来自 2楼
chenyu988| | 2015-3-14 17:37 | 只看该作者
PIC24的硬件I2C我用过,挂几个器件都没问题,肯定是你程序问题。

使用特权

评论回复
板凳
lxz117|  楼主 | 2015-3-15 08:38 | 只看该作者
谢谢chenyu988大侠的回复.

我是这样设置的:

初始化中设置中:第一、I2C1CON全为“0”。  第二、波特率寄存器设置为“39”(100KH)。第三、用的是内部振荡。

我是沿袭PIC24的模板过来的,用的是PROTEUS仿真。

奇怪的现象是:打开I2C模块后,在启动条件刚一结束,状态寄存器的“BCL”位立即就变为了“1”,冲突发生了。

请问大侠:是不是我在初始化设置中没有设置好或者是离此设置更深的一些地方有什么秕漏?


十几条程序,捣鼓了快一个月了,还是没辙。这里先谢了!

使用特权

评论回复
地板
chenyu988| | 2015-3-16 13:45 | 只看该作者
代码贴出来

使用特权

评论回复
5
lxz117|  楼主 | 2015-3-16 22:35 | 只看该作者
本帖最后由 lxz117 于 2015-3-26 15:52 编辑

谢谢您的关照!
上面我忘给您说了,我用的是汇编。代码如下:

        .include        "p24FJ128GA010.inc"


        .list

        config  __CONFIG2,(FNOSC_FRC&OSCIOFNC_ON)    ;内部RC时钟
        config  __CONFIG1,FWDTEN_OFF                       ;关闭看门狗
        
        .global     p24FJ128GA010.gld
        
        .bss                 
        
yanshi1:                .space 4
yanshi2:                .space 4


        .text
        
        .global                __reset

;**************主程序***********        

__reset:

                ;初始化IC2

csh_I2C:
                ;I2C1CON默认值“0000”

        mov                #10,w0                ;波特率为100KHz
        mov                w0,I2C1BRG


                ;开启I2C模块

        mov                #0x8040,w0        
        mov                w0,I2C1CON        
                                                        

        bset                I2C1CON,#2                ;发送功能位置1

aaa:
        btsc                I2C1CON,#0
        goto                aaa
                        
        mov                #0xa0,w0                 ;器件地址
           mov                w0,I2C2TRN        

bbb:                        
        btsc                I2C1STAT,#15                ;检测
        goto                bbb

        btsc                I2C1STAT,#14
        goto                xxx                          ;故障,去执行停止停止位

        mov                #0x00,w0                 ;24C04数据存储区地址

           mov                w0,I2C2TRN

ccc:                        
        btsc                I2C1STAT,#15                ;检测
        goto                ccc
                        
        mov                #55,w0                         ;十进制“55”写入
        mov                w0,I2C1TRN

ddd:                        
        btsc                I2C1STAT,#14                ;检测
        goto                ddd

xxx:   

        bclr                I2C1CON,#15                 ;关闭I2C模块


        call                yanshi_1ms

;*************延时子程序*****************
        

yanshi_1ms:
   
        mov                #0x5,w0
        mov                w0,yanshi2

display1:
        mov                #0x67,w0        
        mov                w0,yanshi2                       ;
               
        dec                yanshi2
        bra                nz,display1

        return
;*********************        
.end

使用特权

评论回复
6
lxz117|  楼主 | 2015-3-16 23:39 | 只看该作者
本帖最后由 lxz117 于 2015-3-16 23:48 编辑

这个程序还有一个不正常的现象:

如果带着“BCL=1”这个冲突位继续向下执行,每一步应答却都很好,“55”这个数据也能写入。
 
不正常的是:当程序关闭I2C模块后,执行"goto  csh_I2C"指令 第二次要写入“55”这个数据(模拟现场使用时更改参数)时,第一次应答便是“N”,程序再往下执行,便已“万复不劫”了……


求大侠指点。  致谢!

111.JPG (34.85 KB )

111.JPG

使用特权

评论回复
7
949155525| | 2015-3-17 10:47 | 只看该作者
建议用c吧

使用特权

评论回复
8
chenyu988| | 2015-3-17 11:46 | 只看该作者
汇编我无能为力啊。。。

使用特权

评论回复
9
lxz117|  楼主 | 2015-3-17 21:40 | 只看该作者
本帖最后由 lxz117 于 2015-3-17 21:44 编辑

谢谢各位同仁相助。
过去我一直用的是汇编,C暂时还不怎么精通,只想解眼前之急。

使用特权

评论回复
10
pass1876| | 2015-4-21 16:45 | 只看该作者
lxz117 发表于 2015-3-17 21:40
谢谢各位同仁相助。
过去我一直用的是汇编,C暂时还不怎么精通,只想解眼前之急。
...

例程太多了,随便找几个,修改下就可以了,IIC出问题,一般都是时序问题,调整下时间。我前段时间还写过PIC的IIC,调也就是调了调时序

使用特权

评论回复
11
wangqingfeng| | 2015-6-7 08:39 | 只看该作者
怎么解决的呀???我是用的PIC24FV32A304,也是遇到了同样的问题,恳请兄弟赐教。谢了!!!!!!!!!!

使用特权

评论回复
12
li781825965| | 2015-11-3 17:22 | 只看该作者
wangqingfeng 发表于 2015-6-7 08:39
怎么解决的呀???我是用的PIC24FV32A304,也是遇到了同样的问题,恳请兄弟赐教。谢了!!!!!!!!! ...

你的问题解决了吗?求救啊

使用特权

评论回复
13
li781825965| | 2015-11-3 17:23 | 只看该作者
楼主,你的问题解决了嘛?想请教一下

使用特权

评论回复
14
hhkhhk0224| | 2017-9-6 10:48 | 只看该作者
楼主,( I2C冲突还未解决),这个帖子,我似乎发现了问题所在,但是在中国电子网计数论坛上面我无法回复,现回复给你,然后麻烦你去结贴一下。(手机绑定了可以回复了我×)
我这边的现象也差不多,我是在debug模式下第一次发启动信号没有问题,但是我停止调试,复位再次调试就一致报BCL,经过多次尝试我发现似乎跟IO口的配置有关,应该说是跟IO的方向寄存器以及LAT或PORT的设置先后有关系。比如我执行了LAT清零,然后后面又执行了一句设置方向的,就会出问题。你们也可以尝试一下,看看是否有什么其它规律没有。

使用特权

评论回复
15
hhkhhk0224| | 2017-9-6 11:31 | 只看该作者
好吧,我最新的测试结论是,方向寄存器应该执行位操作或不操作。也就是如果有其它位要设置,应该单独设置。
然后iic这两个引脚的方向位不要去动。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

4

主题

17

帖子

0

粉丝