4489|8

5

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

PIC16F887 I2C通讯请教 [复制链接]

刚学单片机不久,最近有一个项目是用触摸板进行控制。
1、触摸板与主板之间是通过I2C进行通讯(触摸板芯片为从机);
2、目前想法是用PIC16F887单片机模拟触摸板;
3、现在有写了一个单片机(主机)与触摸板通讯的程序(如下所示),发送数据完毕后SDA还有个高电平(NG无应答.jpg图片),不知道怎么消除,所以想请教下各位前辈们。
4、附件中OK.jpg图片为实际产品与触摸板通讯波形。
程序如下:
#include
//__CONFIG(0x20f2);
//__CONFIG(0x3fff);
#define _XTAL_FREQ 16000000
void DELAY(unsigned int);
void IIC_SEND(char);
void IIC_Init(void);
char READ_EEPROM(char);
//unsigned char read(char);
void main(void)
{
char i,j,R1;
char addr;
addr=0x0d;
IIC_Init();
DELAY(10);
while(1)
{
  READ_EEPROM(addr);
  DELAY(100);
}
}
void IIC_SEND(char R)
{
SSPBUF=R;
while(SSPIF==0);
while(ACKSTAT==1);
}
char READ_EEPROM(char addr)
{
char R;
SEN=1;
while(SEN==1);
IIC_SEND(addr);
/*RSEN=1;
while(RSEN==1);
IIC_SEND(0xc1);*/
SSPIF=0;
RCEN=1;
while(SSPIF==0);
R=SSPBUF;
PEN=1;
while(PEN==1);
return(R);
}
void IIC_Init(void)
{
TRISC=0xff;
SSPCON=0x28;  //初始化SSPCON寄存器 00101000  //SSPM=1000,I2C主模式
SSPCON2=0X00;  //初始化SSPCON2寄存器
//SSPADD = 0x09;            // 当主频为16Mhz时波特率为400kbps,I2C波特率=Fosc/(4*(SSPADD+1)),SSPADD=[(Fosc/(BandRate*4)]-1
SSPADD = 0x39;            // 当主频为16Mhz时波特率为100kbps,I2C波特率=Fosc/(4*(SSPADD+1)),SSPADD=[(Fosc/(BandRate*4)]-1
SSPSTAT=0X80;  //初始化SSPSTAT寄存器
SSPIF=0;
WCOL=0;       // 写冲突检测位清零,若发送数据不正确请检查此位   
SMP=1;     
CKP=1;
CKE=0;        // 使用I2C协议规范电平 关闭斜率控制
    SSPEN=1;      //使能I2C模块*/
}
void DELAY(unsigned int n)
{
unsigned int j;
char k;
for(j=0;j for(k=246;k>0;k--)
NOP();
}

OK.jpg (403.04 KB, 下载次数: 3)

OK.jpg

有应答NG.jpg (402.54 KB, 下载次数: 2)

有应答NG.jpg

NG无应答.jpg (392.65 KB, 下载次数: 3)

NG无应答.jpg

NG无应答(局部).jpg (158.7 KB, 下载次数: 6)

NG无应答(局部).jpg

最新回复

谢谢,楼主提供的场地。如果需要PIC原装正品的单片机或者可以替代的单片机可以联系我(不需要修改PCB资料,程序可以共用),电话13430885511(微信同号)颜生  详情 回复 发表于 2017-8-23 11:40
点赞 关注
 

回复
举报

67

帖子

0

TA的资源

一粒金砂(中级)

沙发
 
什么东东  你想说 IIC  没有应答还是??? 通信协议正确?时钟同步了?
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
本帖最后由 he282942873 于 2017-3-20 18:54 编辑

现在有两个问题:1、单片机和触摸芯片时钟都是40KHz,有点不明白的是40Khz时钟下波特率计算出来是99,但不清楚SSPADD = 0x99还是要再转换为16进制SSPADD = 0x63;
2、第二个问题是地址数据发送完后会有一段高电平,请问这个要怎么消除(NG 无应答(局部).jpg图片可以看到),担心这个高电平影响了后面的通讯。
通讯协议是我用逻辑分析仪抓出来的,正常通讯成功后触摸芯片空闲时会返回0xFF,当有键按下时会发送0x01/0x02...
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

4
 
739669351 发表于 2017-3-20 18:07
什么东东  你想说 IIC  没有应答还是??? 通信协议正确?时钟同步了?

现在有两个问题:1、单片机和触摸芯片时钟都是40KHz,有点不明白的是40Khz时钟下波特率计算出来是99,但不清楚SSPADD = 0x99还是要再转换为16进制SSPADD = 0x63;
2、第二个问题是地址数据发送完后会有一段高电平,请问这个要怎么消除(NG 无应答(局部).jpg图片可以看到),担心这个高电平影响了后面的通讯。
通讯协议是我用逻辑分析仪抓出来的,正常通讯成功后触摸芯片空闲时会返回0xFF,当有键按下时会发送0x01/0x02...

点评

第一个问题,你计算出来的波特率99是十进制的要写成xxx=99,第二个,这一段高电平首先要排除你的程序的问题。还有 PIC 40k HZ 有点低。通信不了是你的那个高电平造成的他在低变高的过程中产生了一个停止信号。这很有  详情 回复 发表于 2017-3-21 08:40
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

5
 
肯定是十六进制的数 都写0x了,要不就写 SSPADD = 99;拉高是正常的,有pull-up的电阻,
 
 
 

回复

5

帖子

0

TA的资源

一粒金砂(中级)

6
 
Wangyuhua 发表于 2017-3-21 04:52
肯定是十六进制的数 都写0x了,要不就写 SSPADD = 99;拉高是正常的,有pull-up的电阻,

谢谢指点,另外拉高我指的是图片标示出来的部分,按道理应该是一直为低电平直到结束。

NG无应答(局部)_2017-03-21_08_24_56.jpg (349.29 KB, 下载次数: 2)

NG无应答(局部)_2017-03-21_08_24_56.jpg
 
 
 

回复

67

帖子

0

TA的资源

一粒金砂(中级)

7
 
he282942873 发表于 2017-3-20 19:06
现在有两个问题:1、单片机和触摸芯片时钟都是40KHz,有点不明白的是40Khz时钟下波特率计算出来是99,但 ...

第一个问题,你计算出来的波特率99是十进制的要写成xxx=99,第二个,这一段高电平首先要排除你的程序的问题。还有 PIC 40k HZ 有点低。通信不了是你的那个高电平造成的他在低变高的过程中产生了一个停止信号。这很有可能是你的程序造成的。
 
 
 

回复

8

帖子

0

TA的资源

一粒金砂(中级)

8
 
he282942873 发表于 2017-3-21 08:27
谢谢指点,另外拉高我指的是图片标示出来的部分,按道理应该是一直为低电平直到结束。

感觉是应答出了问题, 具体原因就不知道了
 
 
 

回复

22

帖子

0

TA的资源

一粒金砂(中级)

9
 
谢谢,楼主提供的场地。如果需要PIC原装正品的单片机或者可以替代的单片机可以联系我(不需要修改PCB资料,程序可以共用),电话13430885511(微信同号)颜生
 
个人签名Microchip原装正品单片机,另有可替换单片机(无需修改PCB资料,程序可共用PIC的) 有用到的兄弟多多支持! 期待您的来电。 电话13430885511
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/9 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表