OpenEdv-开源电子网

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

求STM32F407关于ad5254bruz10底层驱动代码

[复制链接]

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
发表于 2018-10-16 10:19:52 | 显示全部楼层 |阅读模式
50金钱
       求STM32F407关于ad5254bruz10数字电位器底层驱动代码(I2C协议),因为新手没写过底层驱动代码,往高手求助。http://www.analog.com/cn/search.html?q=AD5445
  这个是资料的链接。希望大神们帮忙一下。

最佳答案

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

帮我测试了没有呢?
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2018-10-16 10:19:53 | 显示全部楼层
kdrtser 发表于 2018-10-17 08:17
一直在寻找解决办法,感谢各位

帮我测试了没有呢?
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165377
金钱
165377
注册时间
2010-12-1
在线时间
2111 小时
发表于 2018-10-17 02:22:57 | 显示全部楼层
自己写吧
回复

使用道具 举报

0

主题

29

帖子

0

精华

初级会员

Rank: 2

积分
55
金钱
55
注册时间
2018-10-6
在线时间
3 小时
发表于 2018-10-17 08:17:12 | 显示全部楼层
一直在寻找解决办法,感谢各位
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2018-10-17 11:28:45 | 显示全部楼层
kdrtser 发表于 2018-10-17 08:17
一直在寻找解决办法,感谢各位

你有AD5254的芯片硬件吗?我写一个底层驱动,你帮我测试一下如何?我硬件还没设计好。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2018-10-17 11:29:37 | 显示全部楼层

也只能这样了,原子哥。听说马上又有产品发布会了啊~@..@~
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2018-10-17 11:55:25 来自手机 | 显示全部楼层
读写时序图,底层驱动到时候复制上去,帮我试一下
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2018-10-17 15:35:33 | 显示全部楼层
本帖最后由 jiangyy 于 2018-10-17 15:42 编辑

1.H文件
#ifndef __AD5254_IIC_H
#define __AD5254_IIC_H
#include "sys.h"

#define ERITE_RDAC0  0x80  //AD5254写入内容
#define ERITE_RDAC1  0x81
#define ERITE_RDAC2  0x82
#define ERITE_RDAC3  0x83  

//IO方向设置
#define SDA_IN()  {GPIOB->MODER&=~(3<<(10*2));GPIOB->MODER|=0<<10*2;}        //PB10输入模式
#define SDA_OUT() {GPIOB->MODER&=~(3<<(10*2));GPIOB->MODER|=1<<10*2;}     //PB10输出模式
//IO操作函数
#define IIC_SCL         PBout(11) //SCL
#define IIC_SDA        PBout(10) //SDA         
#define READ_SDA    PBin(10)  //输入SDA

//IIC所有操作函数
extern void AD5254_IIC_Init(void);                              
void IIC_Start(void);                                                                        
void IIC_Stop(void);        
void IIC_Send_Byte(u8 txd);        
u8 IIC_Read_Byte(unsigned char ack);  
u8 IIC_Wait_Ack(void);         
void IIC_Ack(void);
void IIC_NAck(void);

extern void AD5254_WriteOneByte(u8 WriteAddr,u8 Instruction,u8 DataToWrite);
extern u8 AD5254_ReadOneByte(u8 ReadAddr);         
#endif

2.C文件
IIC底层代码略过............
void AD5254_WriteOneByte(u8 WriteAddr,u8 Instruction,u8 DataToWrite)
{
        IIC_Start();
        IIC_Send_Byte(WriteAddr);
        IIC_Wait_Ack();
        IIC_Send_Byte(Instruction);
        IIC_Wait_Ack();
        IIC_Send_Byte(DataToWrite);
        IIC_Wait_Ack();
        IIC_Stop();
        delay_ms(10);
}

u8 AD5254_ReadOneByte(u8 ReadAddr)
{
        u8 temp=0;
        IIC_Start();
        IIC_Send_Byte(ReadAddr);
        IIC_Wait_Ack();
        temp = IIC_Read_Byte(0);
        IIC_Stop();
        return temp;
}

3.主函数
部分代码略过..............
ucDac_send =100;
AD5254_WriteOneByte(0x58,ERITE_RDAC0,ucDac_send);
AD5254_WriteOneByte(0x58,ERITE_RDAC1,ucDac_send);
AD5254_WriteOneByte(0x58,ERITE_RDAC2,ucDac_send);
AD5254_WriteOneByte(0x58,ERITE_RDAC3,ucDac_send);

该核心代码没测试过,因为硬件没设计好,只是提前写好。还望大神指点迷津,帮我测试一下,顺便提出问题,代码共享,一起解决问题。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2018-12-4 15:57:41 | 显示全部楼层
#define AD5254_1_Wadress  0x58
#define AD5254_1_Radress  0x59

#define AD5254_2_Wadress  0x5c
#define AD5254_2_Radress  0x5d

#define RDAC0                        0x00
#define RDAC1                        0x01  
#define RDAC2                        0x02  
#define RDAC3                        0x03

void AD5254_1_WriteOneByte(u8 WriteAddr,u8 DataToWrite)
{
        PD_IIC_Start();       
        PD_IIC_Send_Byte(AD5254_1_Wadress);         
        PD_IIC_Wait_Ack();
        PD_IIC_Send_Byte(WriteAddr);  
        PD_IIC_Wait_Ack();
        PD_IIC_Send_Byte(DataToWrite);  
        PD_IIC_Wait_Ack();
        PD_IIC_Stop();       
}

u8 AD5254_1_ReadOneByte(u8 ReadAddr)
{
        u8 temp=0;
        PD_IIC_Start();       
        PD_IIC_Send_Byte(AD5254_1_Wadress);         
        PD_IIC_Wait_Ack();
        PD_IIC_Send_Byte(ReadAddr);   
        PD_IIC_Wait_Ack();
        PD_IIC_Start();       
        PD_IIC_Send_Byte(AD5254_1_Radress);         
        PD_IIC_Wait_Ack();
        temp = PD_IIC_Read_Byte(0);
        PD_IIC_Wait_Ack();
        PD_IIC_Stop();       
        return temp;
}

IIC时序代码完全和正点原子的一模一样,代码已经调通了,测试结果也很理想。不懂可以留言,谢谢
回复

使用道具 举报

1

主题

8

帖子

0

精华

初级会员

Rank: 2

积分
163
金钱
163
注册时间
2015-6-27
在线时间
21 小时
发表于 2019-4-25 13:47:30 | 显示全部楼层
看来这个芯片用的人不多啊
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 11:12:23 | 显示全部楼层
你好,我想驱动AD5254,没成功,想求一份源码驱动
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 11:21:27 | 显示全部楼层
1090286142 发表于 2020-10-16 11:12
你好,我想驱动AD5254,没成功,想求一份源码驱动

我想用w0和B0之间的电阻值,A0,A1,A2,A3,WP,VSS,DGND接地,VDD接3.3V,因为正点原子IIC接的是24C02,所以我AD0接5v,AD1接地,您感觉我的硬件连接有什么问题吗
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-16 12:22:58 | 显示全部楼层
1090286142 发表于 2020-10-16 11:21
我想用w0和B0之间的电阻值,A0,A1,A2,A3,WP,VSS,DGND接地,VDD接3.3V,因为正点原子IIC接的是24C02 ...

你是说 器件地址吗?A0  A1  A2的配置?代码在上面,你可以直接移植。主要是你器件地址要改动
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-16 12:27:41 | 显示全部楼层
本帖最后由 jiangyy 于 2020-10-16 12:29 编辑

/*ad5254.c*/
  1. #include "ad5254.h"
  2. #include "delay.h"

  3. //初始化AD5254_IIC
  4. void AD5254_Init(void)
  5. {                        
  6.   GPIO_InitTypeDef  GPIO_InitStructure;

  7.   RCC_AHB1PeriphClockCmd(RCC_AHB1Periph_GPIOB, ENABLE);//使能GPIOB时钟

  8.   //GPIOB2,10,11初始化设置
  9.   GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2 | GPIO_Pin_10 | GPIO_Pin_11;
  10.   GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;//普通输出模式
  11.   GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;//推挽输出
  12.   GPIO_InitStructure.GPIO_Speed = GPIO_Speed_100MHz;//100MHz
  13.   GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_UP;//上拉
  14.   GPIO_Init(GPIOB, &GPIO_InitStructure);//初始化
  15.         PD_IIC_SCL=1;
  16.         PD_IIC_SDA=1;
  17. }

  18. //产生IIC起始信号
  19. void PD_IIC_Start(void)
  20. {
  21.         PD_SDA_OUT();     //sda线输出
  22.         PD_IIC_SCL=0;
  23.         delay_us(2);//
  24.         PD_IIC_SDA=1;        
  25.         delay_us(2);//
  26.         PD_IIC_SCL=1;
  27.         delay_us(4);
  28.          PD_IIC_SDA=0;//START:when CLK is high,DATA change form high to low
  29.         delay_us(4);
  30.         PD_IIC_SCL=0;//钳住I2C总线,准备发送或接收数据
  31. }        

  32. //产生IIC停止信号
  33. void PD_IIC_Stop(void)
  34. {
  35.         PD_SDA_OUT();//sda线输出
  36.         PD_IIC_SCL=0;
  37.         delay_us(2);
  38.         PD_IIC_SDA=0;//STOP:when CLK is high DATA change form low to high
  39.          delay_us(4);
  40.         PD_IIC_SCL=1;
  41.         PD_IIC_SDA=1;//发送I2C总线结束信号
  42.         delay_us(4);                                                                  
  43. }

  44. //等待应答信号到来
  45. //返回值:1,接收应答失败
  46. //        0,接收应答成功
  47. u8 PD_IIC_Wait_Ack(void)
  48. {
  49.         u8 ucErrTime=0;
  50.         PD_SDA_IN();      //SDA设置为输入  
  51.         PD_IIC_SDA=1;
  52.         delay_us(5);// 1   
  53.         PD_IIC_SCL=1;
  54.         delay_us(5);// 1
  55.         while(PD_READ_SDA)
  56.         {
  57.                 ucErrTime++;
  58.                 if(ucErrTime>250)
  59.                 {
  60.                         PD_IIC_Stop();
  61.                         return 1;
  62.                 }
  63.         }
  64.         PD_IIC_SCL=0;//时钟输出0            
  65.         return 0;  
  66. }

  67. //产生ACK应答
  68. void PD_IIC_Ack(void)
  69. {
  70.         PD_IIC_SCL=0;
  71.         PD_SDA_OUT();
  72.         PD_IIC_SDA=0;
  73.         delay_us(2);
  74.         PD_IIC_SCL=1;
  75.         delay_us(2);
  76.         PD_IIC_SCL=0;
  77. }

  78. //不产生ACK应答                    
  79. void PD_IIC_NAck(void)
  80. {
  81.         PD_IIC_SCL=0;
  82.         PD_SDA_OUT();
  83.         PD_IIC_SDA=1;
  84.         delay_us(2);
  85.         PD_IIC_SCL=1;
  86.         delay_us(2);
  87.         PD_IIC_SCL=0;
  88. }        

  89. //IIC发送一个字节
  90. //返回从机有无应答
  91. //1,有应答
  92. //0,无应答                          
  93. void PD_IIC_Send_Byte(u8 txd)
  94. {                        
  95.   u8 t;   
  96.         PD_SDA_OUT();            
  97.         PD_IIC_SCL=0;//拉低时钟开始数据传输
  98.         for(t=0;t<8;t++)
  99.         {              
  100.                 PD_IIC_SDA=(txd&0x80)>>7;
  101.                 txd<<=1;           
  102.                 delay_us(2);   //对TEA5767这三个延时都是必须的
  103.                 PD_IIC_SCL=1;
  104.                 delay_us(2);
  105.                 PD_IIC_SCL=0;        
  106.                 delay_us(2);
  107.         }         
  108. }

  109. //读1个字节,ack=1时,发送ACK,ack=0,发送nACK   
  110. u8 PD_IIC_Read_Byte(u8 ack)
  111. {
  112.         u8 i,receive=0;
  113.         PD_SDA_IN();//SDA设置为输入
  114.   for(i=0;i<8;i++ )
  115.         {
  116.                 PD_IIC_SCL=0;
  117.                 delay_us(2);
  118.                 PD_IIC_SCL=1;
  119.                 receive<<=1;
  120.                 if(PD_READ_SDA)
  121.                         receive++;   
  122.                 delay_us(1);
  123.   }                                         
  124.         if (!ack)
  125.                 PD_IIC_NAck();//发送nACK
  126.         else
  127.                 PD_IIC_Ack(); //发送ACK   
  128.         return receive;
  129. }

  130. //WriteAddr:0x00~0x03
  131. void AD5254_1_WriteOneByte(u8 WriteAddr,u8 DataToWrite)
  132. {
  133.         PD_IIC_Start();        
  134.         PD_IIC_Send_Byte(AD5254_1_Wadress);         //发送设备写命令
  135.         PD_IIC_Wait_Ack();
  136.         PD_IIC_Send_Byte(WriteAddr);         //发送写地址
  137.         PD_IIC_Wait_Ack();
  138.         PD_IIC_Send_Byte(0xFF - DataToWrite);//发送字节
  139.         PD_IIC_Wait_Ack();
  140.         PD_IIC_Stop();                                                                                         //产生一个停止条件
  141.         delay_us(5);
  142.         PD_IIC_Start();        
  143.         PD_IIC_Send_Byte(AD5254_1_Wadress);         //发送设备写命令
  144.         PD_IIC_Wait_Ack();
  145.         PD_IIC_Send_Byte(WriteAddr|0X20);    //发送写地址
  146.         PD_IIC_Wait_Ack();
  147.         PD_IIC_Send_Byte(0xFF - DataToWrite);//发送字节
  148.         PD_IIC_Wait_Ack();
  149.         PD_IIC_Stop();                                                                                         //产生一个停止条件
  150.         delay_ms(2);
  151. }

  152. u8 AD5254_1_ReadOneByte(u8 ReadAddr)
  153. {
  154.         u8 temp=0;
  155.         PD_IIC_Start();        
  156.         PD_IIC_Send_Byte(AD5254_1_Wadress);         //发送设备写命令
  157.         PD_IIC_Wait_Ack();
  158.         PD_IIC_Send_Byte(ReadAddr);                            //发送读地址
  159.         PD_IIC_Wait_Ack();
  160.         PD_IIC_Start();        
  161.         PD_IIC_Send_Byte(AD5254_1_Radress);         //发送设备读命令
  162.         PD_IIC_Wait_Ack();
  163.         temp = PD_IIC_Read_Byte(0);
  164.         PD_IIC_Wait_Ack();
  165.         PD_IIC_Stop();                                                                                         //产生一个停止条件
  166.         return (0xFF - temp);
  167. }

  168. void AD5254_2_WriteOneByte(u8 WriteAddr,u8 DataToWrite)
  169. {
  170.         PD_IIC_Start();        
  171.         PD_IIC_Send_Byte(AD5254_2_Wadress);                 //发送设备写命令
  172.         PD_IIC_Wait_Ack();
  173.         PD_IIC_Send_Byte(WriteAddr);                 //发送写地址
  174.         PD_IIC_Wait_Ack();
  175.         PD_IIC_Send_Byte(0xFF - DataToWrite); //发送字节
  176.         PD_IIC_Wait_Ack();
  177.         PD_IIC_Stop();                                                                                                 //产生一个停止条件
  178.         delay_us(5);
  179.         PD_IIC_Start();        
  180.         PD_IIC_Send_Byte(AD5254_2_Wadress);                 //发送设备写命令
  181.         PD_IIC_Wait_Ack();
  182.         PD_IIC_Send_Byte(WriteAddr|0x20);            //发送写地址
  183.         PD_IIC_Wait_Ack();
  184.         PD_IIC_Send_Byte(0xFF - DataToWrite); //发送字节
  185.         PD_IIC_Wait_Ack();
  186.         PD_IIC_Stop();
  187.         delay_ms(2);        
  188. }

  189. u8 AD5254_2_ReadOneByte(u8 ReadAddr)
  190. {
  191.         u8 temp=0;
  192.         PD_IIC_Start();        
  193.         PD_IIC_Send_Byte(AD5254_2_Wadress);          //发送设备写命令
  194.         PD_IIC_Wait_Ack();
  195.         PD_IIC_Send_Byte(ReadAddr);                                   //发送读地址
  196.         PD_IIC_Wait_Ack();
  197.         PD_IIC_Start();        
  198.         PD_IIC_Send_Byte(AD5254_2_Radress);          //发送设备读命令
  199.         PD_IIC_Wait_Ack();
  200.         temp = PD_IIC_Read_Byte(0);
  201.         PD_IIC_Wait_Ack();
  202.         PD_IIC_Stop();                                                                                                //产生一个停止条件
  203.         return (0xFF - temp);
  204. }

复制代码


/*ad5254.h*/
  1. #ifndef __AD5254_H
  2. #define __AD5254_H
  3. #include "sys.h"

  4. //IO方向设置
  5. #define PD_SDA_IN()  {PD_IIC_DIR=0;GPIOB->MODER&=~(3<<(10*2));GPIOB->MODER|=0<<10*2;}        //PB10输入模式
  6. #define PD_SDA_OUT() {PD_IIC_DIR=1;GPIOB->MODER&=~(3<<(10*2));GPIOB->MODER|=1<<10*2;} //PB10输出模式
  7. //IO操作函数

  8. #define PD_IIC_DIR    PBout(2)  //DIR 1:A -> B
  9. #define PD_IIC_SCL    PBout(11) //SCL
  10. #define PD_IIC_SDA    PBout(10) //SDA         
  11. #define PD_READ_SDA   PBin(10)  //输入SDA

  12. #define AD5254_1_Wadress  0x58
  13. #define AD5254_1_Radress  0x59

  14. #define AD5254_2_Wadress  0x5c
  15. #define AD5254_2_Radress  0x5d

  16. #define RDAC0                        0x00
  17. #define RDAC1                        0x01  
  18. #define RDAC2                        0x02  
  19. #define RDAC3                        0x03

  20. //IIC所有操作函数
  21. void AD5254_Init(void);                        //初始化IIC的IO口                                 
  22. void PD_IIC_Start(void);                                                                //发送IIC开始信号
  23. void PD_IIC_Stop(void);                                                                  //发送IIC停止信号
  24. void PD_IIC_Send_Byte(u8 txd);                                        //IIC发送一个字节
  25. u8 PD_IIC_Read_Byte(u8 ack);                                                //IIC读取一个字节
  26. u8 PD_IIC_Wait_Ack(void);                                                         //IIC等待ACK信号
  27. void PD_IIC_Ack(void);                                                                        //IIC发送ACK信号
  28. void PD_IIC_NAck(void);                                                                        //IIC不发送ACK信号

  29. void PD_IIC_Write_One_Byte(u8 daddr,u8 addr,u8 data);
  30. u8 PD_IIC_Read_One_Byte(u8 daddr,u8 addr);         

  31. void AD5254_1_WriteOneByte(u8 WriteAddr,u8 DataToWrite);
  32. u8 AD5254_1_ReadOneByte(u8 ReadAddr);
  33. void AD5254_2_WriteOneByte(u8 WriteAddr,u8 DataToWrite);
  34. u8 AD5254_2_ReadOneByte(u8 ReadAddr);
  35. #endif
复制代码


回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 12:32:37 | 显示全部楼层
1090286142 发表于 2020-10-16 11:21
我想用w0和B0之间的电阻值,A0,A1,A2,A3,WP,VSS,DGND接地,VDD接3.3V,因为正点原子IIC接的是24C02 ...

ucDac_send =100;是什么意思呀AD5254_2_Wadress  0x5c这是什么地址呀WriteAddr这个地址得怎么赋值呀??
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 13:18:04 | 显示全部楼层

你好,主函数中怎么调用的呀?
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-16 13:31:13 | 显示全部楼层
1090286142 发表于 2020-10-16 13:18
你好,主函数中怎么调用的呀?

AD5254_1_ReadOneByte(RDAC0);
AD5254_1_WriteOneByte(RDAC0,data);

回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 13:55:41 | 显示全部楼层
jiangyy 发表于 2020-10-16 13:31
AD5254_1_ReadOneByte(RDAC0);
AD5254_1_WriteOneByte(RDAC0,data);

你好,我用了你的代码,w0和B0之间的阻值还是没有改变,器件地址怎么改?器件地址不是0X58吗
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-16 14:02:11 | 显示全部楼层
1090286142 发表于 2020-10-16 13:55
你好,我用了你的代码,w0和B0之间的阻值还是没有改变,器件地址怎么改?器件地址不是0X58吗

好好看一下官方提供的说明书,一个器件可以控制四路输出RDAC0 RDAC1 RDAC2 RDAC3
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 14:20:25 | 显示全部楼层
jiangyy 发表于 2020-10-16 14:02
好好看一下官方提供的说明书,一个器件可以控制四路输出RDAC0 RDAC1 RDAC2 RDAC3

恩恩,我现在用的是RDAC0,写入寄存器的地址用0x58,主要测试W0和B0两个引脚之间的阻值,但是我改输入值data,阻值不变呀,您感觉问题出现在哪里呀
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-16 14:51:28 | 显示全部楼层
1090286142 发表于 2020-10-16 14:20
恩恩,我现在用的是RDAC0,写入寄存器的地址用0x58,主要测试W0和B0两个引脚之间的阻值,但是我改输入值d ...

测试一下IIC波形看看
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-16 17:31:30 | 显示全部楼层
微信图片_20201016172941.jpg 您帮忙看看我硬件连接的对吗??
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-19 11:07:01 | 显示全部楼层
jiangyy 发表于 2020-10-16 14:51
测试一下IIC波形看看

1.PD_IIC_Send_Byte(0xFF - DataToWrite);这条为什么要用0xff-datawrite呀??
2.PD_IIC_Send_Byte(WriteAddr|0X20); 这条为甚么writeaddr要和0x20相与呀??
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-10-19 16:29:09 | 显示全部楼层
微信图片_20201019162625.jpg 在没接AD5254的时候,发送完数据后会多出这四位,咋回事呀
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-19 19:10:04 | 显示全部楼层
PD_IIC_Send_Byte(0xFF - DataToWrite)   这个要根据你实际电阻分压来决定的,也有可能是PD_IIC_Send_Byte(DataToWrite)
看你的波形,不是很完美,可以适当增加 延迟一点。
回复

使用道具 举报

53

主题

567

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2099
金钱
2099
注册时间
2017-2-11
在线时间
306 小时
 楼主| 发表于 2020-10-19 20:33:28 来自手机 | 显示全部楼层
硬件原理图
D750E07F-3CD6-4EC0-9381-751B3EB59018.png
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-12-23 15:15:34 | 显示全部楼层

你好,这个原理图右边的四个阻值输出端接的是四个电容吗?这四个电容的作用是什么呀
回复

使用道具 举报

2

主题

25

帖子

0

精华

初级会员

Rank: 2

积分
56
金钱
56
注册时间
2017-6-28
在线时间
11 小时
发表于 2020-12-30 17:03:56 | 显示全部楼层
1090286142 发表于 2020-12-23 15:15
你好,这个原理图右边的四个阻值输出端接的是四个电容吗?这四个电容的作用是什么呀

你好,你在用这个AD5254芯片的时候,理论值和实际值误差大吗?
回复

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2025-3-1 06:18

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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