OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 4439|回复: 7

AD5245应用

[复制链接]

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
发表于 2018-2-6 10:16:16 | 显示全部楼层 |阅读模式
10金钱

最佳答案

查看完整内容[请看2#楼]

[mw_shl_code=c,true]void I2C_Configuration(void) { GPIO_InitTypeDef GPIO_InitStructure; RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC , ENABLE); // PA8 -- SCL; PC9 -- SDA */ GPIO_InitStructure.GPIO_Pin = GPIO_Pin_8; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz; GPIO_InitStructure.GPIO_OType = GPIO_OType_P ...
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-6 10:16:17 | 显示全部楼层
[mw_shl_code=c,true]void I2C_Configuration(void)
{
       
        GPIO_InitTypeDef  GPIO_InitStructure;

        RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOA|RCC_AHB1Periph_GPIOC , ENABLE);

        // PA8 -- SCL; PC9 -- SDA */
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_8;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOA, &GPIO_InitStructure);
       
        GPIO_InitStructure.GPIO_Pin =  GPIO_Pin_9;
        GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
        GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
        GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
        GPIO_InitStructure.GPIO_PuPd  = GPIO_PuPd_UP;
        GPIO_Init(GPIOC, &GPIO_InitStructure);

        IIC_SCL=1;
        IIC_SDA=1;
}

void IIC_Start(void)
{
        SDA_OUT();     //sda??ê?3?                    
        IIC_SCL=1;        delay_us(1,148);
        IIC_SDA=0;        delay_us(1,148);
        IIC_SCL=0;        delay_us(1,148);
}          
void IIC_Stop(void)
{
        SDA_OUT();
        IIC_SDA=0;        delay_us(1,148);
        IIC_SCL=1;         delay_us(1,148);
        IIC_SDA=1;        delay_us(1,148);       
        IIC_SCL=0;        delay_us(1,148);       
        IIC_SCL=1;
}

u8 IIC_Wait_Ack(void)
{
        u8 ucErrTime=0;
        SDA_IN();   
        delay_us(20,148);  
        IIC_SDA=1;delay_us(1,148);   
        IIC_SCL=0;delay_us(1,148);
        while(READ_SDA)
        {
                ucErrTime++;
                if(ucErrTime>250)
                {
                        IIC_Stop();
                        return 1;
                }
        }
        IIC_SCL=1;//ê±?óê?3?0           
        return 0;  
}
//2úéúACKó|′e
void IIC_Ack(void)
{
        SDA_OUT();
        IIC_SDA=0;delay_us(1,148);
        IIC_SCL=1;delay_us(1,148);
        IIC_SCL=0;delay_us(1,148);
        IIC_SDA=1;delay_us(1,148);
}
//2?2úéúACKó|′e                    
void IIC_NAck(void)
{
        IIC_SCL=0;
        SDA_OUT();
        IIC_SDA=1;
        delay_us(1,148);
        IIC_SCL=1;
        delay_us(1,148);
        IIC_SCL=0;
}                                                                              
                  
void IIC_Send_Byte(u8 txd)
{                        
    u8 t;   
        SDA_OUT();             
    IIC_SCL=0;
    for(t=0;t<8;t++)
    {              
        IIC_SDA=(txd&0x80)>>7;
        txd<<=1;           
                delay_us(1,148);
                IIC_SCL=1;
                delay_us(1,148);
                IIC_SCL=0;       
                delay_us(1,148);
    }         
}             

u8 IIC_Read_Byte(unsigned char ack)
{
        unsigned char i,receive=0;
        SDA_IN();//SDAéè???aê?è?
    for(i=0;i<8;i++ )
        {
        IIC_SCL=0;
        delay_us(20,148);
                IIC_SCL=1;
        receive<<=1;
        if(READ_SDA)receive++;   
                delay_us(20,148);
    }                                         
    if (!ack)
        IIC_NAck();//·¢?ínACK
    else
        IIC_Ack(); //·¢?íACK   
    return receive;
}

void WriteOneByte(u8 DataToWrite)
{                                                                                                                                                                                          
    IIC_Start();  //开始条件
        IIC_Send_Byte(0X58);//从机地址字节
        IIC_Wait_Ack();
        IIC_Send_Byte(0x00);//指令字节
        IIC_Wait_Ack();                                                                                                                        
        IIC_Send_Byte(DataToWrite);//数据字节                                  
        IIC_Wait_Ack();                                
    IIC_Stop();//停止条件
        delay_ms(10);         
}
[/mw_shl_code]
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-6 10:18:34 | 显示全部楼层
先放个资料压压惊

AD5245-运放资料.pdf

995.54 KB, 下载次数: 77

qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-7 09:58:50 | 显示全部楼层
再来个中文的资料压压惊,本来想用iic,但是一开始用的i2c3发现程序卡在while  busy、百度了一下好多这种情况,所以避免麻烦就用了io模拟iic,速度最后调到200k,也可以了,

AD5245-cn.pdf

1.76 MB, 下载次数: 64

qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-7 10:01:07 | 显示全部楼层
[mw_shl_code=c,true]void I2C_Configuration(void);


//IO·??òéè??
#define SDA_IN()  {GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=0<<9*2;}        //PB9ê?è??£ê?
#define SDA_OUT() {GPIOC->MODER&=~(3<<(9*2));GPIOC->MODER|=1<<9*2;} //PB9ê?3??£ê?
//IO2ù×÷oˉêy         
#define IIC_SCL    PAout(8) //SCL
#define IIC_SDA    PCout(9) //SDA         
#define READ_SDA   PCin(9)  //ê?è?SDA

//IIC?ùóD2ù×÷oˉêy
                         
void IIC_Start(void);                                //·¢?íIIC?aê?D?o?
void IIC_Stop(void);                                  //·¢?íIICí£?1D?o?
void IIC_Send_Byte(u8 txd);                        //IIC·¢?íò???×??ú
u8 IIC_Read_Byte(unsigned char ack);//IIC?áè?ò???×??ú
u8 IIC_Wait_Ack(void);                                 //IICμè′yACKD?o?
void IIC_Ack(void);                                        //IIC·¢?íACKD?o?
void IIC_NAck(void);                                //IIC2?·¢?íACKD?o?



void WriteOneByte(u8 DataToWrite);
[/mw_shl_code]
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-7 10:12:15 | 显示全部楼层
现在实际应用遇到一个问题,调好之后不一会电阻又会变成默认值,这是怎么回事
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-24 10:51:26 | 显示全部楼层
问题已经解决,年前忘记整理帖子,没有及时回帖,附上解决方法,这个在写入数据之后再读取一下,就可以锁定了,英文不好,手册看的不是很明白,中文的没有找到关于写完再读才好使,也请以后看到帖子的大神指点一番。
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

55

主题

474

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2374
金钱
2374
注册时间
2017-8-7
在线时间
207 小时
 楼主| 发表于 2018-2-24 10:51:44 | 显示全部楼层
[mw_shl_code=c,true]void WriteOneByte(u8 DataToWrite)
{                                                                                                                                                                                          
    IIC_Start();  //开始条件
        IIC_Send_Byte(0X58);//从机地址字节
        IIC_Wait_Ack();
        IIC_Send_Byte(0x00);//指令字节
        IIC_Wait_Ack();                                                                                                                        
        IIC_Send_Byte(DataToWrite);//数据字节                                  
        IIC_Wait_Ack();                                
    IIC_Stop();//停止条件
        delay_ms(10);       

        IIC_Start();  //开始条件
        IIC_Send_Byte(0X59);//从机地址字节
        IIC_Wait_Ack();                                                                    
        IIC_Send_Byte(DataToWrite);//数据字节                                  
        IIC_Wait_Ack();                                
    IIC_Stop();//停止条件
        delay_ms(10);       
}

[/mw_shl_code]
qq1950361006,互帮互助,共同进步。
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-6-8 10:05

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表