STM32单片机驱动数字电位计DS1267B的高地位数据传输问题

zhangheze 2015-04-11 03:24:44
最近要使用一款数字电位计DS1267B,看数据手册上的时钟信号控制,用GPIO模拟了一个去控制数字电位计,但是却发现出来的结果很诡异,与自己说明书上看到的结果不一样,想问一下为什么
从时序图,芯片手册上看DS1267B bit0是选择通道,之后按照顺序是将bit1~bit16传输进去控制数字电位计,bit1~bit8是控制通道1,bit9~bit16控制通道0。 看数据手册应该是先将低位传输进去,再传输高位,所以程序上应该是
for(i=0;i<8;i++)
{
if(res_temp&(0x01<<i))
{ DS1267B_DQ_1();
delay_us(1);}
else
{ DS1267B_DQ_0();
delay_us(1);}

DS1267B_CLK_1();
delay_us(1);
DS1267B_CLK_0();
delay_us(1);
}

但是这样编写,给数字电位计输入控制字 0,1,128,255。测得的电阻变化是无序的,倒是后来编程试了一下先将高位传输进去,再传低位,如下所示:
for(i=0;i<8;i++)
{
if(res_temp&(0x80>>i))
{ DS1267B_DQ_1();
delay_us(1);}
else
{ DS1267B_DQ_0();
delay_us(1);}

DS1267B_CLK_1();
delay_us(1);
DS1267B_CLK_0();
delay_us(1);
}
却发现输入0,128,255电阻变化是有规律的,貌似应该是这样控制数字电位计才对,但是我就不理解了,这样的话不就跟数据手册上写的不一样了吗?数据手册上应该不会出错吧,求使用过的前辈解答,谢谢各位大神。
...全文
360 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
东东Donny 2015-05-18
  • 打赏
  • 举报
回复
题主的时钟写在DQ输入之前,这样会造成第一位的丢失。
pathletboy 2015-04-25
  • 打赏
  • 举报
回复
一次要传入17bit或者17bit的整数倍,手册中明确说明了。
引用
When wiper position data is to be written to the DS1267B, 17 bits (or some integer mul tiple) of data should always be transmitted. Transactions which do not send a complete 17 bits (or multiple) will leave the register incomplete and possibly an error in the desired wiper positions.
fuchouzhe 2015-04-24
  • 打赏
  • 举报
回复
移位的16位,只看到了8位

27,373

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧