⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ads1256.h

📁 16位的AD芯片的ADS1158的驱动程序。
💻 H
字号:


/*************************************************************************************/
volatile void delay_us(unsigned char a)   //挺时1uS
{ 
 volatile unsigned int i=0,j=0;
 for(i=0;i<a;i++)
 for(j=0;j<100;j++)
 ;
}

/*************************************************************************************/
//ads126发送一字节的数据 
unsigned char ads_senddata(unsigned char data)  //SPI发送数据,要在外部保证SS = 0 
{
SPDR = data;                //启动数据传输 
while((SPSR & 0x80) == 0); // 等待传输结束 
data = SPDR; 
return data; 
}
/*************************************************************************************/
void  ADS1256(void)    //初始化ADS1256
{
 DDRD&=~(1<<PD3);   //DRDY
 PORTD|=(1<<PD3);  
 DDRD|=(1<<PD4);    //START
 PORTD|=(1<<PD4);  
 PORTB&=~(1<<PB2);     //复位ADS1256
 PORTB|=1<<PB2;
 ad_write(00,0xf7);     //初始化STATUS reg  ID位为f,数据输出高位在先,自动校准开,输入缓冲关闭,DRDY高电平
 ad_write(01,0x80);     //初始化MUX    reg  单端输入第0通道为选通
 ad_write(02,0x00);     //初始化ADCOM  reg  时钟输出关闭,传感器检测关闭,放大倍数为1
 ad_write(03,0xf0);     //初始化DRATE  reg  数据速率为30K
 ad_write(04,0x0f);     //初始化DRATE  reg  定义IO为输出高电平,节能模式            
}
/*************************************************************************************/
void ad_write(unsigned char reg,unsigned char data)//写寄存器。选择寄存器地址,写入的数据。
{              
     PORTB&=~(1<<PB1);      //SPI的CS=0使能
     while((PIND&0X8)!=0); //DRDY信号高时才能写寄存器   
     ads_senddata(0x50+reg);//选择写入寄存器     
     ads_senddata(0x00);    //写入1个寄存器     
     ads_senddata(data);    //写入数据
     PORTB|=(1<<PB1);       //SPI的CS=1,停止
     delay_us(1);          //挺时1uS     //可更改。但读数据必须在要等待最小一个采集周期(大约90ms)后。
}
/*************************************************************************************/
unsigned long int ad_read()//读A/D数据。
{    
     unsigned long int  sum=0;
     unsigned char r=0,a=0;     
     PORTB&=~(1<<PB1);        //SPI的CS=0使能
     ads_senddata(0xfc);       //SYNC   AD同步
     ads_senddata(0xff);       //WAKEUP     唤醒,并启动AD转换
     while((PIND&0X8)!=0);    //DRDY信号低时才能写寄存器   ,等待转换完毕
        {
		 delay_us(1);         //挺时1uS
         ads_senddata(0x01);  //发送读取数据命令
		 delay_us(1);         //挺时1uS
         for (r=0;r<3;r++)   //读取24位数据
            {
		   a=ads_senddata(0x00); //读取数据,先高位,后低位
		   sum|=a;
		   sum=sum<<8;
            }
		 sum=sum>>8;
		}
     PORTB|=(1<<PB1);     //SPI的CS=1,停止
	 sum=0xffffff-sum;
	 return  sum;
     delay_us(1);          //挺时1uS
}

/*************************************************************************************/
unsigned long int ads_sum(unsigned char data)//读A/D数据。
  {  
     unsigned long int aa=0;
     ad_write(01,0x80+data);     //第几通道为选通
	 ads_senddata(0xf0);         //自校准
	 aa=ad_read();               //读24位A/D数据。
	 return aa;
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -