打印

TLV5618DA转换值问题困扰几天了,急盼解决

[复制链接]
10900|45
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
wawayuxc|  楼主 | 2008-9-26 14:18 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用到8051控制tlv5618da转换,用端口控制时序的,发现怪事,有的值转换后有电压输出有的没有,转换数值范围是0-4095,输出电压范围0-5v ,示波器测试5618数据端口都对是我要转换的数值,时钟也对,但是就是有的数值能转换出电压有的确没有,查不出原因来啊,谢谢大侠们能帮忙啊。

相关帖子

沙发
hotyong| | 2008-9-26 14:28 | 只看该作者

你试着输入的数值范围在0~2047看看

你的参考电压是多少

使用特权

评论回复
板凳
wawayuxc|  楼主 | 2008-9-26 14:45 | 只看该作者

你的参考电压是多少

参考电压2.5v

使用特权

评论回复
地板
wawayuxc|  楼主 | 2008-9-26 14:46 | 只看该作者

我测试了几个。

其中1080,1090,1070,1100,这些都是没有电压输出的,2000是有输出的。

使用特权

评论回复
5
wawayuxc|  楼主 | 2008-9-26 14:47 | 只看该作者

我用得是b通道所以16位数据前4位是0001

我用得是b通道所以16位数据前4位是0001

使用特权

评论回复
6
hotyong| | 2008-9-26 14:49 | 只看该作者

那这就不太好弄了,

能不能贴一段代码过来呀,它只有一个函数.

使用特权

评论回复
7
hotyong| | 2008-9-26 14:51 | 只看该作者

-

使用特权

评论回复
8
wawayuxc|  楼主 | 2008-9-26 14:55 | 只看该作者

代码

void    dac5618(uint a)
{
    char  i,j,k;
    CHIPCHOSE=1;    //选择373
    DACS=0;    
    DACLK=1;
    a=a|0x1000;        //选中b通道
    for(i=0;i<16;i++)
    {
        if(a&0x8000){DAIN=1;}
        else    {DAIN=0;}
        DACLK=0;
        for(j=0;j<13;j++);

        DACLK=1;
        for(k=0;k<13;k++);
        a<<=1;
    }
        DACS=1;
    DACLK=0;    
    DACS=1;

}

使用特权

评论回复
9
hotyong| | 2008-9-26 15:05 | 只看该作者

好像是发现问题了

应该这样,你最后加了句,DACLK=0;这样的话,又插入了一个时钟脉冲,可能使得后面发出去的数据错了一位,

void    dac5618(uint a)
{
    char  i,j,k;
    CHIPCHOSE=1;    //选择373
    DACS=0;    
    DACLK=1;
    a=a|0x1000;        //选中b通道
    for(i=0;i<16;i++)
    {
        if(a&0x8000){DAIN=1;}
        else    {DAIN=0;}
        DACLK=0;
        for(j=0;j<13;j++);

        DACLK=1;
        for(k=0;k<13;k++);
        a<<=1;
    }
        DACS=1;
    ////////////////////////////////////////这句不要DACLK=0;    
    DACS=1;


使用特权

评论回复
10
wawayuxc|  楼主 | 2008-9-26 15:13 | 只看该作者

好像还不行

我那个时钟也是在,cs至高后才给的啊。

使用特权

评论回复
11
hotyong| | 2008-9-26 15:17 | 只看该作者

那我真没办法了

总之那条是不要的,,,你试着把那两个延时的去掉,看看,该不会是延时过多吧,,我的程序就没有延时,,,如果不行的话,那可能是硬件的问题,

使用特权

评论回复
12
wawayuxc|  楼主 | 2008-9-26 15:22 | 只看该作者

恩谢谢提示我去掉了。

去掉延时后测试,刚才测试了1000,1010,1000有电压1010就没有了晕,会是什么原因啊

使用特权

评论回复
13
wawayuxc|  楼主 | 2008-9-26 15:43 | 只看该作者

就是固定的一些值没有电压输出

就是固定的一些值没有电压输出

使用特权

评论回复
14
supersunny| | 2008-9-26 15:58 | 只看该作者

注意通道的问题

看5618的datasheet可以很清楚的知道,你先送一个B通道的
再送一个A通道的,
它每次输出都要按这个顺序,一定要连续输出
我当时搞这个芯片的时候也是很纳闷
呵呵

使用特权

评论回复
15
hotyong| | 2008-9-26 16:04 | 只看该作者

好像不是吧

我就是无管用哪个通道都可以的呀

使用特权

评论回复
16
supersunny| | 2008-9-26 16:04 | 只看该作者

应用到成熟产品上的

#pragma disable
//vcon 输出数据   ch 通道选择
void dac5618(uint vcon,uint ch)    //TLC5618DAC子程序,三线串行方式
{
   char i;
   uint svcon;
   svcon=vcon^ch;                //vcon最高位置1,选择
                                 //TLC5618的A通道
   CS1=0;                        //置5618的CS=0,允许片选
   for(i=0;i<16;i++){
       dfi=svcon&0x8000;         //串行方式送16位数据
       svcon<<=1;
       clk=0;
       _nop_();
       clk=1; 
       _nop_();
   }
   CS1=1;                        //禁止片选
   return;
}

调用时

dac5618(dat,0);
dac5618(dat1,0x8000);

使用特权

评论回复
17
supersunny| | 2008-9-26 16:07 | 只看该作者

那个通道都可以没错

但问题是输出的时间问题

我这样可以保证在输出B通道的同时更新A通道的输出

如果是

dac5618(dat1,0x8000);
dac5618(dat,0);
则A通道的输出数据到下次执行到此处才会输出

使用特权

评论回复
18
wawayuxc|  楼主 | 2008-9-26 16:14 | 只看该作者

会不会光耦太慢的原因啊

会不会光耦太慢的原因啊

使用特权

评论回复
19
wawayuxc|  楼主 | 2008-9-26 16:15 | 只看该作者

为什么前4位不选0001

为什么前4位不选0001来选择b通道啊

使用特权

评论回复
20
supersunny| | 2008-9-26 16:16 | 只看该作者

俄?光藕

给个电路图看看你是怎么连的,一般来说光藕不会影响的,用我的程序试验一下

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

22

主题

72

帖子

1

粉丝