📄 ad7714.c
字号:
void WD_Init(void)
{
// PSA=1;
OPTION=0X0F;//devider used in WDT
}
void Port_Init()
{
PCFG3=0;
PCFG2=1;
PCFG1=1;
PCFG0=1;
TRISA|=0xFf;//int RA0~5 addr
TRISE|=0xEF;//in RE1,RE2 baud
RE0=1;
RE1=1;
TRISD=0Xf1;
PORTD=0XFF;
_RST=0;//RD0=0;//reset chip1 ,2
TRISB=0XE9;//CS LED T/RSEL ADINT EOF
PORTB=0XFF;
TRISC=0xD5;//TX,RX IS IN
//RC3=0; //sclk
//INTEDG=0;//DOWN INT
//INTE=0; //EXTERN INT
}
void Spi_Wr(unsigned char data_)
{
SSPBUF=data_;
while(SSPIF==0){};
SSPIF=0;
}
unsigned char Spi_Rd(void)
{
unsigned char i_;
SSPBUF=0;
while(SSPIF==0){};
SSPIF=0;
i_=SSPBUF;
return i_;
}
void delay(unsigned char k)
{
unsigned char j,m;
for(m=0;m<k;m++)//100*4*2/(3.6864/2.4576)=320
{
j++;
}
}
void Chip_Init()
{
unsigned char i,j,k;
// CLRWDT();
_RST=1;
i = eeprom_read(0x00);
if(i!=0x01)//tag self cele
{
for(j=0x10;j<0x2e;j+=4)
{
k=j;
eeprom_write(k,0);
k++;
eeprom_write(k,0);
k++;
eeprom_write(k,0x98);//0xc498=50326=65535*(60/78.13)
k++;
eeprom_write(k,0xc4);
CLRWDT();
}
//Cu50
k=0x30;
eeprom_write(k,0xcd);
k++;
eeprom_write(k,0xc7);
k++;
eeprom_write(k,0x4c);//tp
k++;
eeprom_write(k,0xf1);//tp
k=0;
eeprom_write(k,1);
for(i=0;i<8;i++)
{
k=i+0x40;
eeprom_write(k,1);
CLRWDT();
}
}
for(i=0;i<8;i++)
{
k = i+0x40;
k = eeprom_read(k);
if(k>7) Code[i]=1;
}
CLRWDT();
_CS1=0;//cs1=0
delay(200);
delay(200);
delay(200);
Spi_Wr(0x20);//write filter high register02
Spi_Wr(0x81);//unipolar + input
Spi_Wr(0x30);//write filter high register03
Spi_Wr(0x80);//filter frist notch frequency=50hz
CLRWDT();
Spi_Wr(0x10); //chan1
Spi_Wr(0x34); //amp 32 zero self
delay(200);
delay(200);
delay(200);
Spi_Wr(0x68);
i=Spi_Rd();
j=Spi_Rd();
k=Spi_Rd();
eeprom_write(0x04,j);
eeprom_write(0x05,i);
CLRWDT();
Spi_Wr(0x11); //chan2
Spi_Wr(0x34); //amp 32
i=0x80;
while(i>0x7f)
{
delay(100);
Spi_Wr(0x09);//read cummunication reg
i=Spi_Rd();
}
Spi_Wr(0x69);
i=Spi_Rd();
j=Spi_Rd();
k=Spi_Rd();
eeprom_write(0x06,j);
eeprom_write(0x07,i);
CLRWDT();
Spi_Wr(0x12); //chan3
Spi_Wr(0x34); //amp 32
while(i>0x7f)
{
delay(100);
Spi_Wr(0x0a);//read cummunication reg
i=Spi_Rd();
}
Spi_Wr(0x6a);
i=Spi_Rd();
j=Spi_Rd();
k=Spi_Rd();
eeprom_write(0x08,j);
eeprom_write(0x09,i);
CLRWDT();
}
void getai(unsigned char k)
{
unsigned char i,j,m;
unsigned long tp1;
_CS1=0;
switch(k)
{
case 0:
m=0x08;
break;
case 1:
m=0x09;
break;
case 2:
m=0x0a;
break;
case 3:
m=0x0b;
break;
case 4://cu50
m=0x0e;//1110//chan 5-->6
break;
}
delay(200);
delay(200);
i=0x80;
while(i>0x7f)
{
delay(100);
Spi_Wr(m);//read cummunication reg
i=Spi_Rd();
}
m=m+0x50; //read adc
Spi_Wr(m);
i=Spi_Rd();
j=Spi_Rd();
adc=i;
adc=adc<<8;
adc=adc+j;
_CS1=1;
}
void main(void)
{
WD_Init();//看门狗初始化
Port_Init();//端口初始化
Chip_Init();//AD7714芯片初始化
Tmr0Init();//计时器初始化
while(1)
{
//定时采集
{
getai(Chan);
Chan=(Chan>3)?0:Chan+1;//0--4通道切换
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -