標(biāo)題: 求助幫忙解釋部分AD變換器TLC5615程序 [打印本頁]

作者: Hansama    時間: 2021-4-3 08:38
標(biāo)題: 求助幫忙解釋部分AD變換器TLC5615程序
和我搜集到的這種程序(圖一)不太一樣下面這種程序是什么意思?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; //過流標(biāo)志置高
led=0;
U=0;
tlc_5615(0);
}
}
}
}




D9074235-5D50-4A38-9DBB-091DDE378996.jpeg (145.95 KB, 下載次數(shù): 64)

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

作者: 張?zhí)鞄?nbsp;   時間: 2021-4-3 11:42
TLC5615是10位DAC,你是沒看懂TLC5615內(nèi)部16位轉(zhuǎn)換寄存器結(jié)構(gòu)。如果看懂了,2個程序是怎樣傳送數(shù)據(jù)的意圖就明白了。
TLC5615內(nèi)部16位轉(zhuǎn)換寄存器高4位和低2位是無效的,只有3~12位為有效數(shù)據(jù),要做的就是讓傳送的16位數(shù)據(jù)中低10位落在這個區(qū)域。
第一個程序是將10位有效數(shù)據(jù)的最低位和TLC5615內(nèi)部轉(zhuǎn)換寄存器第3位對齊;第二個程序是將10位有效數(shù)據(jù)的最高位和TLC5615內(nèi)部轉(zhuǎn)換寄存器第12位對齊。實(shí)際效果都達(dá)到了。
輸出電壓Vo=2*Vref*Value/1023。Value為傳送的10位數(shù)據(jù)。而Vo是有限制的,最大為VDD-0.4
作者: Hansama    時間: 2021-4-5 09:15
本帖最后由 Hansama 于 2021-4-9 21:36 編輯
張?zhí)鞄?發(fā)表于 2021-4-3 11:42
TLC5615是10位DAC,你是沒看懂TLC5615內(nèi)部16位轉(zhuǎn)換寄存器結(jié)構(gòu)。如果看懂了,2個程序是怎樣傳送數(shù)據(jù)的意圖就 ...

請問我這樣理解是哪里出了問題呢?

A1AEA7BF-74D7-431E-A8EB-392D85A734B0.jpeg (540.74 KB, 下載次數(shù): 76)

A1AEA7BF-74D7-431E-A8EB-392D85A734B0.jpeg

作者: 張?zhí)鞄?nbsp;   時間: 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位數(shù)據(jù)送入轉(zhuǎn)換寄存器
        {
                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;                                //補(bǔ)2個時鐘,把數(shù)據(jù)再向前送2位
       
        CS_5615=1;
}




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1