標題:
TLV5618 DA轉(zhuǎn)換驅(qū)動程序
[打印本頁]
作者:
wudawei
時間:
2015-1-1 17:25
標題:
TLV5618 DA轉(zhuǎn)換驅(qū)動程序
下面是基于STC系列單片機的TLV5618驅(qū)動程序,該程序的硬件是基于5V供電的,參考電壓為2.5V,編譯環(huán)境為KEIL C,已調(diào)試成功。
//=====================================================================
// TLV5618 DA轉(zhuǎn)換驅(qū)動程序
//硬件連接: DIN ——P0^0;
// SCLK ——P0^1;
// CS ——P0^2;
// VDD --邏輯電源(+5V)
// AGND --GND(0V)
//說明 參考電壓為0—3.5V,本程序為2.5V
// 輸出模擬電壓為:V=2*Vref*(dignum/0x1000) 注:dignum后四位為:0x0000~~0x0fff
//注意: 所需輸入的數(shù)字信號值為16位數(shù),其中D15~~D12為特殊位設(shè)置,D11~~D0為數(shù)據(jù)位000~~fff
#include <STC89C51RC.h> //STC單片機頭文件
#include <intrins.h>
#define uint unsigned int
#define uchar unsigned char
#define Channal_A 1 //通道A
#define Channal_B 2 //通道B
#define Channal_AB 3 //通道A&B
//**************************一下為函數(shù)聲明修**************************************
static void DA_conver(uint Dignum);
extern void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model);
//**************************修改硬件時要修改的部分********************************
sbit DIN = P0^0; //數(shù)據(jù)輸入端
sbit SCLK = P0^1; //時鐘信號
sbit CS = P0^2; //片選輸入端,低電平有效
//=================================================================
// 函數(shù)名稱 :void DA_conver(uint Dignum)
// 函數(shù)功能 :進行DA轉(zhuǎn)換
// 入口參數(shù) :Dignum:根據(jù)說明設(shè)置轉(zhuǎn)化數(shù)據(jù).頭四位為特殊位用于選擇轉(zhuǎn)化方式,
// 以及用于通道選擇.請自行設(shè)置.后12位為需要轉(zhuǎn)換的值
// 出口參數(shù) :無
//=================================================================
void DA_conver(uint Dignum)
{
uint Dig=0;
uchar i=0;
SCLK=1;
CS=0; //片選有效
for(i=0;i<16;i++) //寫入16為Bit的控制位和數(shù)據(jù)
{
Dig=Dignum&0x8000;
if(Dig)
{
DIN=1;
}
else
{
DIN=0;
}
SCLK=0;
_nop_();
Dignum<<=1;
SCLK=1;
_nop_();
}
SCLK=1;
CS=1; //片選無效
}
//=================================================================
// 函數(shù)名稱 :void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
// 函數(shù)功能 :模式、通道選擇并進行DA轉(zhuǎn)換
// 入口參數(shù) :Data_A:A通道轉(zhuǎn)換的電壓值
// Data_B:B通道轉(zhuǎn)換的電壓值
// Channal:通道選擇,其值為Channal_A,Channal_B,或Channal_AB
// Model:速度控制位 0:slow mode 1:fast mode
// 出口參數(shù) :無
// 說明: Data_A,Data_B的范圍為:0—0x0fff
// 本程序如果只需要一個通道時,另外一個通道的值可任意,但是不能缺省
//=================================================================
void Write_A_B(uint Data_A,uint Data_B,uchar Channal,bit Model)
{
uint Temp;
if(Model)
{
Temp=0x4000;
}
else
{
Temp=0x0000;
}
switch(Channal)
{
case Channal_A: //A通道
DA_conver(Temp|0x8000|(0x0fff&Data_A));
break;
case Channal_B: //B通道
DA_conver(Temp|0x0000|(0x0fff&Data_B));
break;
case Channal_AB:
DA_conver(Temp|0x1000|(0x0fff&Data_B)); //A&B通道
DA_conver(Temp|0x8000|(0x0fff&Data_A));
break;
default:
break;
}
}
//=================================================================
// 函數(shù)名稱 :int main(void)
// 函數(shù)功能 :主函數(shù),無實際意義,僅測試TLV5618用
// 入口參數(shù) :無 1-A;2-B;3-A&B
// 出口參數(shù) :無
//=================================================================
int main(void)
{
Write_A_B(0x0355,0x0000,Channal_A,0); //測量A通道
Write_A_B(0x0000,0x0600,Channal_B,1); //測量B通道
// Write_A_B(0x0504,0x0a47,Channal_AB,1); //測量AB通道,測量時需屏蔽上面兩句
while(1);
}
復(fù)制代碼
作者:
yh19950224
時間:
2018-8-6 21:00
大佬用過tlv2548這款ad芯片嗎
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1