找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1730|回复: 3
收起左侧

求助帮忙解释部分AD变换器TLC5615程序

[复制链接]
ID:897910 发表于 2021-4-3 08:38 | 显示全部楼层 |阅读模式
和我搜集到的这种程序(图一)不太一样下面这种程序是什么意思?TLC5615的输出电压是怎么控制的?(比如0~5v),TLC5615是怎么工作的(图一是控制0~1023,下面这个完全找不到头绪)求大佬帮忙解释


void shuma(uint buf)
{
uchar a,b,c,d;
a=buf/1000;
b=buf%1000/100;
c=buf%100/10;
d=buf%10;



void tlc_5615(uint buf)
{
uint a,c;
c=buf;  
CS_5615=0;
for(a=16;a>0;a--)
{
DAT_5615=c>>15;  (不太懂这个)
c=c<<1;
CLK_5615=1;
CLK_5615=0;  
}
CLK_5615=1;
CLK_5615=0;
CLK_5615=1;
CLK_5615=0;
CS_5615=1;
}


void main(void)
{
uchar n,i;
n=5;
U=0;
led=0;
delay_ms(3000);
led=1;
while(1)
{
tlc_5615(U);
shuma(U/n*10);
if(flag==0)
{
if(KEY1==0)
{
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
if(KEY1==0)
{
if(U<120*n) //最大电压
U=U+n;
else if(U>=120*n)
{
led=0;
for(i=0;i<50;i++)
shuma(U/n*10);
led=1;
}


}
}
if(KEY2==0)
{
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
if(KEY2==0)
{
if(U>=n)
U=U-n;
}
}
if(KEY3==0)
{
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
if(KEY3==0)
{
U=50*n;
}
}
if(KEY4==0)
{
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
shuma(U/n*10);
if(KEY4==0)
{
U=0;
}
}
}
if(Duan==0)
{
delay_ms(10);
if(Duan==0)
{
flag=1; //过流标志置高
led=0;
U=0;
tlc_5615(0);
}
}
}
}




D9074235-5D50-4A38-9DBB-091DDE378996.jpeg
回复

使用道具 举报

ID:814525 发表于 2021-4-3 11:42 | 显示全部楼层
TLC5615是10位DAC,你是没看懂TLC5615内部16位转换寄存器结构。如果看懂了,2个程序是怎样传送数据的意图就明白了。
TLC5615内部16位转换寄存器高4位和低2位是无效的,只有3~12位为有效数据,要做的就是让传送的16位数据中低10位落在这个区域。
第一个程序是将10位有效数据的最低位和TLC5615内部转换寄存器第3位对齐;第二个程序是将10位有效数据的最高位和TLC5615内部转换寄存器第12位对齐。实际效果都达到了。
输出电压Vo=2*Vref*Value/1023。Value为传送的10位数据。而Vo是有限制的,最大为VDD-0.4

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

ID:897910 发表于 2021-4-5 09:15 | 显示全部楼层
本帖最后由 Hansama 于 2021-4-9 21:36 编辑
张天师 发表于 2021-4-3 11:42
TLC5615是10位DAC,你是没看懂TLC5615内部16位转换寄存器结构。如果看懂了,2个程序是怎样传送数据的意图就 ...

请问我这样理解是哪里出了问题呢?
A1AEA7BF-74D7-431E-A8EB-392D85A734B0.jpeg
回复

使用道具 举报

ID:814525 发表于 2021-4-13 19:33 | 显示全部楼层
void tlc_5615(uint buf)
{
uint a,c;
c=buf;  
CS_5615=0;
        for(a=16;a>0;a--)                //把DAC 16位数据送入转换寄存器
        {
                DAT_5615=c>>15;          //取最高位
                c=c<<1;                                //把次高位送到最高位
                CLK_5615=1;
                CLK_5615=0;  
        }
       
        CLK_5615=1;
        CLK_5615=0;                               
        CLK_5615=1;
        CLK_5615=0;                                //补2个时钟,把数据再向前送2位
       
        CS_5615=1;
}

评分

参与人数 1黑币 +20 收起 理由
admin + 20 回帖助人的奖励!

查看全部评分

回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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