找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1851|回复: 2
收起左侧

AD5162数字电位器SPI通讯如何写9位的寄存器数据?

[复制链接]
回帖奖励 25 黑币 回复本帖可获得 5 黑币奖励! 每人限 1 次
ID:743654 发表于 2020-12-17 17:30 | 显示全部楼层 |阅读模式
本帖最后由 cheney03 于 2020-12-18 08:53 编辑

如题:我的数字电位器是AD5162,写寄存器为9位。现有AD5160程序,寄存器是8位的。怎么修改现有程序,让SPI写9位的寄存器?
1.jpg 2.jpg
通道选择A0=1,或者A0=0


AD5160程序如下:
5160.H*/

typedef unsigned char uchar;
typedef unsigned int uint;

//sbit CPCS= P1^3;         //(U108)
//sbit SDI = P1^1;
//sbit SCK = P1^0;

sbit CPCS = P3^0; //数字电位器AD5160的片选CS,低电平有效 (U111)
sbit SDI = P0^3; //数字电位器AD5160的数据SDI
sbit SCK = P0^2; //数字电位器AD5160的时钟SCLK

void AD5160_init() //AD5160初始化
  {
    CPCS = 1;
    SCK = 0;
    SDI = 1;
  }

void AD5160_Seting(uchar dat)
{
    uchar i, rdac=0;
    CPCS = 1;
    rdac = dat; //RDAC为写入AD5160 内部8位radc寄存器数据
    SCK = 0;
    _nop_();
    _nop_();
    _nop_();
    _nop_();
    SCK = 1; //SCK在CS拉低前触发一个时钟
    _nop_();
    _nop_();
    SCK = 0;
    _nop_();
    CPCS = 0; //拉低CS启动数据写入
    for(i=0;i<8;i++)
      { SDI =(rdac&0x80);
            rdac<<=1; //高位MSB在先
       _nop_();
        SCK = 1;
       _nop_();
       SCK = 0;
     }

   CPCS = 1;
   _nop_(); //片选拉高后SCK送一个结束时钟,这点很重要
   SCK = 1;
   _nop_();
   _nop_();
   SCK = 0;
   _nop_();
}



回复

使用道具 举报

ID:743654 发表于 2020-12-24 23:31 | 显示全部楼层
已解决,在写后八位数据前插入写一位,
        SDI =0;
       _nop_();
        SCK = 1;
       _nop_();
       SCK = 0;
回复

使用道具 举报

ID:38393 发表于 2023-11-22 15:34 | 显示全部楼层
你好,能把完整的代码放上来一下吗?谢谢
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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