AD7708 молчит

Do you have a question? Post it now! No Registration Necessary

Translate This Thread From Russian to

Threaded View
Привет всем

Пытаюсь AD7708 "запустить".
Схема измерителя температуры на ТСП. Вместо ТСП установлен резистор 120 Ом.
Ток 200 мкА.
Так вот, вне зависимости от сопротивления этого резистора, хоть 120 Ом, хоть
0 Ом, АЦП передает нули.
Это если усиление 32, если 128, то переполнение(FFFF), что, в общем, похоже
на правду.

Облазил все АЦП, все напряжения в норме. Опорное примерно 1.05 В. Питание
4.9В.
Связь по SPI проверил чтением ID регистра. Работает.
Калибровка по усилению проходит, проверил соответствующее значение в
регистре кал. усиления. Оно имеет значение отличное от умолчания.
Калибровка по смещению трудно сказать, значение в регистре кал. смещение не
изменилось(8000Н).

Буду очень признателен за исходники инициализации и работы с этим АЦП.
День уже бьюсь не могу понять где грабли, софт или железо.



Инициализация у меня такая

#define MODE_2    0x52           //0101.0010 /chop-0 negbuf-0 refsel-0
chcon-1   oscpd-0 md02-010(single mode)
#define MODE_INT_ZS_CALIBR1 0x54 //0101.0100 /chop-0 negbuf-0 refsel-0
chcon-1   oscpd-0 md02-100
                                    //(internal zero scale calibration)
#define MODE_INT_FS_CALIBR1 0x55 //0101.0101 /chop-0 negbuf-0 refsel-0
chcon-1   oscpd-0 md02-101
                                    //(internal full scale calibration)
#define CONTROL_1 0x0A           //0000.1010 /CH03-0000 U/B-1    RN02-010
#define FILTER_1  0xFF // 5.35 Hz

#define ReadTest1Reg    0x47  //0100.1100   read test register
#define ReadTest2Reg    0x4D  //0100.1101   read test register
#define ReadIDReg       0x4F  //0100.1111   read ID register
#define ReadStatusReg   0x40  //0100.0000   read status register
#define ReadModeReg     0x41  //0100.0001   read mode register
#define WriteModeReg    0x01  //0000.0001   write mode register
#define ReadControlReg  0x42  //0100.0010   read control register
#define WriteControlReg 0x02  //0000.0010   write control register
#define WriteFilterReg  0x03  //0000.0011   write filter register

#define ReadIOReg       0x47  //0100.0111   read IO register
#define WriteIOReg      0x07  //0000.0111   write IO register

#define ReadDataReg     0x44  //0100.0100   read data register 16 bit

#define ReadOffsetReg   0x45  //0100.0101   read offset register 16 bit
#define WriteOffsetReg  0x05  //0000.0101   write offset register 16 bit
#define ReadGainReg     0x46  //0100.0110   read gain register 16 bit
#define WriteGainReg    0x06  //0000.0110   write gain register 16 bit

#define RESET0      PORTD &= 0xF7;
#define RESET1      PORTD |= 0x08;

...................................................
RESET0;
for (Data65%00; Data!=0;Data--);
for (Data65%00; Data!=0;Data--);
for (Data65%00; Data!=0;Data--);
RESET1;
for (Data65%00; Data!=0;Data--);


  SPDR = WriteIOReg;
 while((SPSR & 0x80)==0);

  SPDR = 0;
 while((SPSR & 0x80)==0);


  SPDR = WriteFilterReg;
 while((SPSR & 0x80)==0);

  SPDR = FILTER_1;
 while((SPSR & 0x80)==0);


  SPDR = WriteControlReg;
 while((SPSR & 0x80)==0);

  SPDR = CONTROL_1;
 while((SPSR & 0x80)==0);


// установка режима калибровка нуля
  SPDR = WriteModeReg;
 while((SPSR & 0x80)==0);

  SPDR = MODE_INT_ZS_CALIBR1;
 while((SPSR & 0x80)==0);

 for(t10%0; t!=0;t--);
 while(DRDY==0);


// установка режима калибровка полной шкалы
  SPDR = WriteModeReg;
 while((SPSR & 0x80)==0);

  SPDR = MODE_INT_FS_CALIBR1;
 while((SPSR & 0x80)==0);

 for(t10%0; t!=0;t--);
 while(DRDY==0);

............................................................

Далее в обработчике прерывания таймера, раз в секунду делаю:

  SPDR = WriteModeReg;   // запуск преобразования
 while((SPSR & 0x80)==0);

  SPDR = MODE_2;
 while((SPSR & 0x80)==0);

 for(t10%0; t!=0;t--);
 while(DRDY==0);


 SPDR=ReadDataReg;    // запрос на чтение данных из регистра
while((SPSR & 0x80)==0);    //ожидание окончания передачи байта

 SPDR=0;   //читаем старший байт данных
while((SPSR & 0x80)==0);
 msb=SPDR;

 SPDR=0;   //читаем младший байт данных
while((SPSR & 0x80)==0);
 lsb=SPDR;

............................................................






Re: AD7708 молчит


 Привет всем

 Разобрался. Спутал REF- с REF+. :)

Ткаченко Олег



Site Timeline