原创
AD7705使用两点注意事项(附初始化程序)
2010-3-5 10:01
5762
10
10
分类:
测试测量
近日项目中应用了AD7705,作为一款16位的AD,非常适合应用在高精度慢速采集的场合。我在项目中实现温度分辨率0.01度,给PID控制精度提高提供了条件。
但开始调试时,也遇到了一些麻烦,主要有两点:
1,初始化:
如果AD7705复位引脚直连VCC,最好在初始化程序中加入初始化序列,不然ready信号不会输出。
2,输入范围
如果AD7705采集单端信号,则输入必须在0到VDD之间,而不可以超出或为负,如果一个输入为负,则另一个输入会有灌入电流的现象,芯片无法正常运行。
附初始化程序:
/*
*********************************************************************************************************
* InitAD7705
*
* Description : init ad7705
*
* Arguments : none
*********************************************************************************************************
*/
void InitAD7705 (void) {
INT8U i;
INT8U temp;
OS_CPU_SR cpu_sr;
DDRB |= 0×07;// Mosi, sck, ss
DDRB &= ~(1 << 3);//Miso
PORTB |= 1 << 1;//sck high
PORTB |= 1 << 2;//mosi high
PORTB &= ~ (1 << 0); // ss low
for (i=0;i<50;i++) // AD7705复位
{
PORTB &= ~(1 << 1);
PORTB |= 1 << 1;
}
SpiInit();
//PutChar1(0×5a);
temp = PutCharSpi(0×20);//next is clock
temp = PutCharSpi(0×05);//60hz
temp = PutCharSpi(0×10);//next is setup
temp = PutCharSpi(0×44);//
while ((PIND & 0×01) == 1);
temp = PutCharSpi(0×21);//next is clock
temp = PutCharSpi(0×05);//60hz
temp = PutCharSpi(0×11);//next is setup
temp = PutCharSpi(0×44);//0×44比0×46要准确一些,可能是因为缓冲
//不适合于变化的输入。比如模拟开关,以及通道切换
//带来的影响,如果只有一路
//稳定的输入,可以就不会有问题
//FSYNC 不能为1,不然,似乎rdy线不会变低
while ((PIND & 0×01) == 1);
//PutChar1(0xA5);
文章评论(0条评论)
登录后参与讨论