找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 2097|回復(fù): 3
打印 上一主題 下一主題
收起左側(cè)

求助幫忙解釋部分AD變換器TLC5615程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:897910 發(fā)表于 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; //過流標(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
分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏1 分享淘帖 頂 踩
回復(fù)

使用道具 舉報

沙發(fā)
ID:814525 發(fā)表于 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位對齊。實際效果都達到了。
輸出電壓Vo=2*Vref*Value/1023。Value為傳送的10位數(shù)據(jù)。而Vo是有限制的,最大為VDD-0.4

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

板凳
ID:897910 發(fā)表于 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
回復(fù)

使用道具 舉報

地板
ID:814525 發(fā)表于 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;                                //補2個時鐘,把數(shù)據(jù)再向前送2位
       
        CS_5615=1;
}

評分

參與人數(shù) 1黑幣 +20 收起 理由
admin + 20 回帖助人的獎勵!

查看全部評分

回復(fù)

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機教程網(wǎng)

快速回復(fù) 返回頂部 返回列表