电子工程师技术服务社区
公告
登录
|
注册
首页
技术问答
厂商活动
正点原子
板卡试用
资源库
下载
文章
社区首页
问答
关于模拟I2C总线
已解决
73482
个问题
已帮助
5993
位优秀工程师
关于模拟I2C总线
我爱下载
2018-02-05
浏览量:1092
关于adxl345模拟I2C总线中时钟信号和数据信号配合的问题,SCK时钟信号要如何和SDA信号配合,发送数据,判断ACK,和接收数据。是否有例程。
显示全部
单片机
关注问题
写回答
0
0
收起
我来回答
上传资料:
选择文件
文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
我是爆米花啊
倾角检测程序5.6.rar
这个就是使用ADXL345B做的倾角检测,使用的模拟I2C程序。实测没问题。
第一次在回复里添加附件,如果不能下载请私信我。
发布于
2018-02-05
举报
评论 2
0
0
我爱下载
回复了 我是爆米花啊:谢谢兄弟
回复
电子老工程师
回复了 :L4949ED013TR ST
回复
其他答案
数量:
8
micro虾米
模拟I2C,其实就是要用GPIO模拟I2C通讯时SDA和SCL的电平的高低变化,模拟的高低电平变化的依据就是数据手册上I2C的时序,其实每个操作,比如Start、STOP、Ack等都是可以用GPIO电平变化表示,按照手册要求进行功能封装,就能实现I2C的操作了。
发布于
2018-02-05
举报
评论 1
1
0
电子老工程师
回复了 :AS78L12RTR-G1 原厂封装:SOT-89 . 以原厂封装信息为准。
回复
Angel_YY
#define SCL_PORT
GPIOA
#define SCL_PIN
GPIO_Pin_1
#define SCL_HIGH
GPIOA->BSRR=(uint32_t)GPIO_Pin_1
#define SCL_LOW
GPIOA->BRR=(uint32_t)GPIO_Pin_1
#define
SDA_PORT
GPIOA
#define
SDA_PIN
GPIO_Pin_2
#define
SDA_HIGH
GPIO_>BSRR=(uint32_t)GPIO_Pin_2
#define SDA_LOW
GPIOA->BRR=(uint32_t)GPIO_Pin_2
#define
SDA_READ
(uint16_t)(GPIOA->ID&GPIO_Pin_2)
#define
SDA_OUT
GPIOA->MODER|=((uint32_t)GPIO_Mode_OUT)<<(2*2))
#define SDA_IN
GPIOA->MODER&=(GPIO_MODER_MODERO)<<(2*2))
#define SCL_OUTH()
SCL_HIGH
#define SCL_OUTL()
SCL_LOW
#define
SDA_OUTH()
SDA_HIGH
#define
SDA_OUTL()
SDA_LOW
#define
SDA_SETIN()
SDA_IN
#define
SDA_READ()
SDA_READ
void I2C_Delay(void)
{
uint8_t i = 200;
while(i--);
}
void SDA_SETOUT(void)
{
SDA_IN;
SDA_OUT;
}
void I2C_Start(void)
{
SCL_OUTH();
SDA_OUTH();
I2C_Delay();
SDA_OUTL();
I2C_Delay();
SCL_OUTL();
I2C_Delay();
}
void I2C_Stop(void)
{
SCL_OUTL();
SDA_OUTL();
I2C_Delay();
SCL_OUTH();
I2C_Delay();
SDA_OUTH();
Delay(Delay5ms); //Delay() 为系统延时,用于确保数据传输正确
}
uint8_t I2C_WriteByte(uint8_t Data)
{
uint8_t i,bAck=0;
for(i=0;i<8;i++)
{
SCL_OUTL();
if(Data & 0x80)
SDA_OUTH();
else
SDA_OUTL();
I2C_Delay();
SCL_OUTH();
I2C_Delay();
Data <<=1;
}
SCL_OUTL();
I2C_Delay();
SCL_OUTH();
I2C_Delay();
SDA_SETIN();
if(SDA_READ())
bAck=1;
else
bAck=0;
SCL_OUTL();
SDA_SETOUT();
I2C_Delay();
return ((uint8_t)(!bAck));
}
uint8_t I2C_ReadByte(uint8_t bLSByte)
{
uint8_t i,Data=0;
SDA_SETIN();
for(i=8;i!=8;i--)
{
SCL_OUTL();
Data = Data<<1;
I2C_Delay();
SCL_OUTH();
I2C_Delay();
if(SDA_READ())
Data |=0x01;
else
Data &=0xFE;
}
SCL_OUTL();
SDA_SETOUT();
if(bLSByte)
SDA_OUTH();
else
SDA_OUTL();
I2C_Delay();
SCL_OUTH();
I2C_Delay();
SCL_OUTL();
I2C_Delay();
return(Data);
}
uint8_t DAC_Write_1byte(uint8_t Slave,uint8_t Regist_Addr,uint8_t Data)
{
uint8_t succ,time=0;
I2C_Start();
succ=I2C_ReadByte(Slave);
while((succ!=1)&&(time<3)) //从机没有响应,重试三次
{
I2C_Stop();
I2C_Start();
succ=I2C_WriteByte(Slave);
time++;
}
succ=I2C_WriteByte(Regist_Addr); //发送寄存器地址
succ=I2C_WriteByte(Data); //发送数据
I2C_Stop();
return succ;
}
uint8_t DAC_Read_1byte(uint8_t Slave,uint8_t,Regist_Addr)
{
uint8_t succ,time=0;
uint8_t dat;
I2C_Start();
succ=I2C_WriteByte(Slave+1) //加1表示读数据
while((succ!=1)&&(time<3))
{
I2C_Stop();
I2C_Start();
succ=I2C_WriteByte(Slave+1);
time++;
}
succ=I2C_WriteByte(Regist_Addr);
dat=I2C_ReadByte(0);
I2C_Stop();
return dat;
}
STM32模拟IIC的代码
发布于
2018-02-05
举报
评论 2
0
0
我爱下载
回复了 Angel_YY :谢谢
回复
电子老工程师
回复了 :S14是对的,S10是错的
回复
lichangle
看下IIC的时序图就明白了
发布于
2018-02-05
举报
评论 4
0
0
我爱下载
回复了 lichangle :IIC的时序不同器件会不会不同
回复
lichangle
回复了 lichangle :IIC的时序有快速和低速之分,当然速度不同会导致通讯错误
回复
lichangle
回复了 我爱下载 :IIC的时序有快速和低速之分,当然速度不同会导致通讯错误
回复
电子老工程师
回复了 :7123-4123-30 :单独胶壳 7157-6421-80 :棕色的锁片
回复
sgf201
模拟IIC的要点是有层次,逐步向上,IIC实质是两根数据线的变化,把手册中的定义信号实现后,把对应的信号组合实现就能实现标准IIC时序
发布于
2018-02-05
举报
评论 1
0
0
电子老工程师
回复了 :尾缀Z和N代表类别,Z:汽车级,N:一般用途
回复
chen0000009
模拟I2C无非就是用两个普通引脚来作为SDA和SCK,可以参考I2C的时序实现
发布于
2018-02-05
举报
评论 1
0
0
电子老工程师
回复了 :X5043S8IZ-2.7 Renesas Electronics America Inc
回复
汉云
符合IIC的时序就可以了,芯片的时序图上有SCL与SDA的时序,按时序来就一定正确
发布于
2018-02-05
举报
评论 1
0
0
电子老工程师
回复了 :1、MC74HCT14ADR2G IC INVERT SCHMITT 6CH 6IN 14SOIC 2、MC74HCT14ADG IC INVERT SCHMITT 6CH 6IN 14SOIC
回复
micro虾米
还是自己对着数据手册,封装一遍操作函数,对自己的提高大,建议参考别人的程序,自己进行封装。
发布于
2018-02-07
举报
评论 1
0
0
电子老工程师
回复了 :包装区别。 CAT24C16WI-G 管件 CAT24C16WI-GT3 卷带
回复
donatello
可以参考一下原子官方的例程,模拟I2C支持多种变种,如16位数据读取,连续数据读取等。
发布于
2018-02-27
举报
评论 1
0
0
电子老工程师
回复了 :弯角不能替换直角的,安装方式不同。也不能掰直使用属于不良操作。
回复
相关问题
问题达人
换一批
文章
知识经验换现金
换一批
关于模拟I2C总线
写回答
关注问题
×
我要举报该内容,理由是:
内容质量差:
内容太水、伸手党
垃圾广告信息:
广告、招聘、推广、测试内容等
偏离问答主题:
与技术无关、讨论类
与社区已有内容重复:
违规内容:
色情、暴力、血腥、敏感信息等
不友善内容:
人事攻击、挑衅辱骂、恶意行为
以上选项都不是: