📄 dac.c
字号:
#include "SPCE061V004.H"
#define Set_IOA_Bit(x) (*P_IOA_Data = *P_IOA_Buffer | x)
#define Clear_IOA_Bit(x) (*P_IOA_Data = *P_IOA_Buffer & ~x)
#define DIN 0x0001 //串行数据输入 IOA0
#define SCLK 0x0002 //串行时钟 IOA1
#define CS 0x0004 //使能信号 IOA2
#define OUTB 0x0000 //OUTB and buffer
#define OUTA 0x0001 //OUTA
#define OUTAB 0x8000 //Write A and update OUTB with buffer
#define OUTBUF 0x0100 //BUFFER
extern unsigned int data_val,V_value;
//*************************************************************
//函数名称:CtrlTLV5618()
//功能:向12位串行DA TLV5618置数
//参数:12位数据
//*************************************************************
void CtrlTLV5618(unsigned int OUTX,unsigned int dat)
{
unsigned int order,value,mask,i;
mask = 0x8000;
order = OUTX; //OUTA,OUTB,SLOW
value = order | dat;
Set_IOA_Bit(CS);
Clear_IOA_Bit(CS);
for(i=0;i<16;i++)
{
*P_Watchdog_Clear= 0x0001;
Set_IOA_Bit(SCLK);
if(mask & value)
Set_IOA_Bit(DIN);
else
Clear_IOA_Bit(DIN);
Clear_IOA_Bit(SCLK);
mask = mask>>1;
}
Set_IOA_Bit(SCLK);
Set_IOA_Bit(CS);
}
//*********************************************************************
//WriteDAC(unsigned int PORT,unsigned int dat)
//*********************************************************************
void WriteDAC(unsigned int PORT,unsigned int dat)
{
if(PORT == OUTB)
CtrlTLV5618(OUTB,dat);
else if(PORT == OUTA)
{
CtrlTLV5618(OUTBUF,data_val);
CtrlTLV5618(OUTAB,dat);
CtrlTLV5618(OUTB,data_val);
}
}
//**********************************************************************************//
//函数名称:AGC()
//函数功能:对系统进行自动增益控制
//参数:无
//**********************************************************************************//
void AGC()
{
unsigned int sum,j;
*P_Watchdog_Clear=1;
sum = 0;
for(j=0;j<8;j++)
{
GetFudu(); //读取AD采样值
sum = sum + V_value;
}
V_value = sum >> 3; //取平均值,相当于软件滤波
if(V_value<1641) //幅度小于1V ????????????
{
if(data_val<4095)
{
data_val+=1;
WriteDAC(OUTB,data_val);
}
else
{
data_val=4095;
WriteDAC(OUTB,data_val);
}
}
else if(V_value>1645) //幅度大于1V
{
if(data_val>0)
{
data_val-=1;
WriteDAC(OUTB,data_val);
}
else
{
data_val=0;
WriteDAC(OUTB,data_val);
}
}
else
WriteDAC(OUTB,data_val);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -