Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Проблема с AD7730L
Форум разработчиков электроники ELECTRONIX.ru > Аналоговая и цифровая техника, прикладная электроника > Метрология, датчики, измерительная техника
alux
Сначала АЦП был подключен к PORTC Mega32L. Ацп нормально ресетилось. По крайней мере DRDY сбрасывался в 0. Для отладки подключил JTAG. Для этого выводы АЦП переподключил к PORTA. JTAG вместе с выводами АЦП не подключался. SCLK, DRDY, DIN/DOUT подключены через резисторы 2к. DRDY -> input, pullup on. В программе сделал соответствующее переназначение выводов. Теперь программа находится в вечном ожидании готовности АЦП. Какие будут соображения? Как проверить работоспособность АЦП?

P.S. Один ньюанс. После переподключения к порту А сначала забыл настроить выводы порта А. До этого они были в Hi-Z. В принципе, это ни на что не должно повлиять. Но все-таки...
wodya
А что показывает осцилограф на DRDY?
alux
Осцилографа нет. Но тестер показывает на DRDY напряжение питания (+3.021В). Хотя по идее после включения питания там должен быть 0. АЦП включен по схеме с биполярным возбуждением моста (см. даташит).

Сейчас иду за феном для выпаивания... Или будут другие предложения?
Евгений Германович
Через 2К последовательно? Если да то вы уронили фронты.
alux
Вы считаете, что проблема в резисторах? Но DRDY в любом случае должен быть в ноле после ресета. Или я ошибаюсь?
alux
Мне кажется, что после включения питания АЦП не сбрасывается. Хотя RST притянут к питанию через 10к и зашунтирован на общий емкостью 0.1мкФ. Если верить даташиту, то мин длительность импульса сброса 50 ns. В даташите как-то не внятно сказано о состоянии DRDY после сброса. Вот цитата:
Цитата
Reset Input
The RESET input on the AD7730 resets all the logic, the digital
filter and the analog modulator while all on-chip registers are
reset to their default state. RDY is driven high and the AD7730
ignores all communications to any of its registers while the
RESET input is low. When the RESET input returns high, the
AD7730 starts to process data and RDY will return low after
the filter has settled indicating a valid new word in the data
register. However, the AD7730 operates with its default setup
conditions after a RESET and it is generally necessary to set up all
registers and carry out a calibration after a RESET command.

Насколько я понял, после ресета DRDY опустится в 0 спустя некоторое время, необходимое для установления фильтра. По крайней мере у меня так было с AD7714.
Цитата
After power-on or RESET, the device expects a
write to its Communications Register.

Вот здесь вопрос : В Communications Register можно писать в любой момент, не дожидаясь DRDY=0 ?
В AD7714 для надежного ресета можно отправить 32 "1" на DIN. В AD7730 ничего не нашел на счет этого. Повторюсь на счет последовательных резисторов 2кОм - надо ли уменьшить их значение сопротивления? И последнее, можно ли для связи мк с АЦП использовать аппаратный SPI. Не будет ли в таком случае конфликта при подключении программатора? Можно ли использовать пример кода Interfacing AD7714 to 68HC11 из даташита?
Евгений Германович
Попробуйте отключить выход,может лог 1 идет извне.RDY логический выход.спользуется как выход состояния и в режиме преобразования и в режимкалибровки.в режиме преобразования рду переводится в низкое состояние когда новое выходное слово поступает в регистр данных.....если данные не читаются,то рду возвращается в высокое состояние до следующего цикла чтения.Это из моего справочника.Возможно вы не отлавливаете первый ноль.И попробуйте вручную подать лог 0 на сброс.
alux
Нашел в чем проблема. Как всегда, ошибка в монтаже. Вывод SYNC у меня был посажен на землю. И по даташиту, он как раз и удерживает всю аналоговую периферию АЦП в состоянии сброса и соответственно, вывод RDY в высоком состоянии. smile.gif
Евгений Германович
Просветите про 2К куда вы их втыкаете и зачем
alux
Цитата(Евгений Германович @ Aug 10 2007, 17:39) *
Просветите про 2К куда вы их втыкаете и зачем

Здесь все сказано.

www.telesys.ru/wwwboards/mcontrol/319/messages/152413.shtml

А что на счет использования аппаратного SPI ?

Как говорят у нас на Украине:""Не говори Гоп, поки не перескочиш". Блин, все равно после сброса вывод RDY не сбрасывается в 07.gif . Вот мой пример:
Код
void ADC_Init(void)
{
  PORTA &= ~(1<<RST);
  PORTA |= (1<<RST);
  while(PINA&(1<<DRDY)); //wait for /DRDY to go low
}

Пробовал и так:
Код
//
// AD7730L setting
#define STANDBY   PA2
#define RST           PA3
#define DRDY         PA4
#define DOUT         PA5
#define DIN           PA6
#define SCLK         PA7
//----------------------------------------------------------------------------------#############################################################################
// Initiating a Self-Calibration after Power-On/Reset AD7730L
//_____________________________________________________________________________
void ADC_Init(void)
{
  PORTA &= ~(1<<RST);
  PORTA |= (1<<RST)|(1<<DIN);

  //Отправить 32 "1"
  for(unsigned char i=0;i<32;i++)
  {
    PORTA &= ~(1<<SCLK);
    delay_ns(50);
    PORTA |= (1<<SCLK);
  }

  WriteToReg(0x03, 8); //Writes to Communications Register Setting: Next Operation as Write to Filter Register
  WriteToReg(0x800010, 24); //Writes to Filter Register Setting: a 50 Hz Output Rate in CHOP Mode
  WriteToReg(0x02, 8); //Writes to Communications Register Setting: Next Operation as Write to Mode Register
  WriteToReg(0xb190, 16); //Writes to Mode Register: Initiating Internal Full-Scale Calibration for -20 mV to +20 mV Input Range
  while(PINA&(1<<DRDY)); //wait for /DRDY to go low

  WriteToReg(0x02, 8); //Writes to Communications Register Setting: Next Operation as Write to Mode Register
  WriteToReg(0x9190, 16); //Writes to Mode Register: Initiating Internal Zero-Scale Calibration for -20 mV to +20 mV Input Range
  while(PINA&(1<<DRDY)); //wait for /DRDY to go low
}
///////////////////////////////////////////////////////////////
//______________________________________________________________________________
void WriteToReg(unsigned long data, unsigned char reglength)
{
  unsigned int count=0;

  DDRA |= (1<<DIN);       // DIN -> output

  do{
    PORTA |= (1<<SCLK);   // SCLK = 1

    if( data & (1<<reglength) )
      PORTA |= (1<<DIN);  // DIN = 1
    else
      PORTA &= ~(1<<DIN); // DIN = 0

    delay_ns(50);         // 50 ns Data Valid to SCLK Edge Setup Time
    PORTA &= ~(1<<SCLK);  // SCLK = 0
    data = data << 1;
    count++;
    }while(count < reglength);
}

//%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
void main(void)
{
// Initialise
  DDRA  = (1<<STANDBY)|(1<<RST)|(1<<DIN)|(1<<SCLK); //DOUT, DRDY -> input
  PORTA = (1<<STANDBY)|(1<<RST)|(1<<DRDY)|(1<<DOUT)|(1<<DIN); //pullups ON
................
}

Все равно зависает ожидании сброса в ноль вывода DRDY. Резисторы - ни при чем. Пробовал подключать выводы АЦП к мк напрямую. Тот же эффект. Не хочется даже думать о том, что микросхема сдохла. В чем же дело?
alux
Блин. Были перепутаны выводы DIN и DOUT и полярность SCLK ! Поменял. Все равно не работает sad.gif В связи с этим вопрос: можно литаким образом повредить АЦП? Хотя у меня же последовательно были включены резисторы 2кОм.

Обязательно ли ставить емкости на MCLKIN, MCLKOUT ? Если нужны, то какой емкости? Кварц 2.4576 МГц. В даташите сказано, что емкости выводов 5 и 13 пФ достаточно, и они в большинстве случаем не нужны. Может в этом проблема?
wodya
А осцилограф не можете достать? Я думаю многое бы прояснилось. Во-первых сразу видно генерит кварц или нет. В принципе, мультиметр должен показывать от 1..3.5 В, что косвенно свидетельствует о генерации.
Именно с этим АЦП не работал, но работал с аналогичным от TI (насколько могу понять).
Напряжение на DRDY свидетельствует о том, что ваш МК не отвечает на запрос. Т.е. АЦП сбрасывает DRDY, что свидетельствует о готовности данных. Если бы ваш МК производил цикл чтения данных, то АЦП тут же возводил бы DRDY и напряжение равнялось 5 В. А в вашем случае АЦП ждет какое-то время до начала нового цикла и не получив ответа возводит DRDY, но среднее напряжение уже ниже (хотя в ADS1210 оно равнялось бы практически нулю).
Если Вы занимаетесь аналоговой техникой, то без осцилографа никуда, Советую достать.

Странно, что программа находиться в вечном ожидании. Если напряжение меньше 5 В, то это свидетельствует о том, что импульсы есть (правда если Вы запитываетесь от 5 В)

Сгорание АЦП по цифровым входам невозможна (только если напряжение выходит за пределы 0..5 В). Это я проверял многократно. Скорее всего ваше АЦП исправен. Он сгорает лишь от перенапряжения или от перегрева, если неправильно поданы аналоговые напряжения и земли.

А DRDY точно настроен на вход, а то из программы не видно?
alux
Цитата(wodya @ Aug 10 2007, 23:40) *
Напряжение на DRDY свидетельствует о том, что ваш МК не отвечает на запрос. Т.е. АЦП сбрасывает DRDY, что свидетельствует о готовности данных. Если бы ваш МК производил цикл чтения данных, то АЦП тут же возводил бы DRDY и напряжение равнялось 5 В. А в вашем случае АЦП ждет какое-то время до начала нового цикла и не получив ответа возводит DRDY, но среднее напряжение уже ниже (хотя в ADS1210 оно равнялось бы практически нулю).

Вот цитата из AN-406:
Цитата
Включение устройства -
DRDY переходит в состояние логической единицы после включения питания, переходит в низкое состояние через время, соответствующее трем обновлениям данных на выходе и остается в низком состоянии, пока считываются данные

Повторяю вопрос. Сразу после включения надо ли ждать готовности DRDY? Или АЦП сбросит его в ноль только после инициализации его регистров? Может ошибка в программах записи? Хотя они у меня работали с AD7714. Добавил только еще один аргумент, чтобы можно было записывать данные разной длины.
Напомню, напряжение питания +3В. Аналоговое напряжение : +2.5В ... -2.5В. POL - на земле. SYNC - на +3В. Поставил на кварце по 22пФ. Тестер показывает на выводах кварца +1.3В.
Могло ли АЦП выйти из строя после перепайки феном? Время воздействия ~ 5...10 сек.
alux
Выловил еще одну ошибку. В процедурах записи/чтения в/из регистра АЦП : reglength надо указывать не 8,15 или24 , а 7, 15, 23. Т.е. положение бита в регистре. Но все равно вывод RDY висит в единице, хоть ты тресни help.gif Может будут еще какие идеи, предложения?

Только что обнаружил, что на MCLKOUT (3 вывод) - 0 В, на MCLKIN (2 вывод) : 1.2 В. Хотя раньше на обеих выводах было напряжение. Может быть проблема в кварце? Осциллографа пока нет. Но обещают вечером дать...
Andy84
Интересно, чем история закончилась...столкнулся с аналогичной проблемой.

Народ помогите советом у меня в целом пошожая проблема.. Вывод RDY не сбрасывается ни в какую на MCLKOUT (3 вывод) - 2,5 В,- есть сигнал генерации на MCLKIN (2 вывод) : 0,5 В-генережки нет. Менял микросхему на новую..ставил другой кварц, отправлял 32 еденици, ресетил вручную кнопочкой,... Что надо зделать чтоб этот вывод сбросился?? мучаюсь уже нескольтко дней уже все мысли закончились
truevoxdei
Цитата(Andy84 @ May 14 2012, 02:49) *
Интересно, чем история закончилась...столкнулся с аналогичной проблемой.

Народ помогите советом у меня в целом пошожая проблема.. Вывод RDY не сбрасывается ни в какую....


Тоже была похожая проблема. Именно с AD7730L. И почему-то именно с atmeg'ой (а именно atmega328). Хотя на контроллерах 51-х вроде, как слышал от многих, таких "граблей" никто не встречал.

Обобщу нюансы (из своего опыта), может будет кому-то полезно и поможет.

Нюансы такие:

1. Строго следить за соответствием SCKL-такта подаваемого ведущим на ведомого (АЦП). В отличии от других АЦП (сужу по своему скромному опыту), этот "камушек" - AD7730 уж очень привередлив к форме и чистоте сигнала, особенно сигнала, как отметил выше.
2. Не путать и НЕ забывать, какой режим выбран (какая нога STANDBY, SYNC, RESET и POL активирована). В моём случае POL сидит на земле. И соотвественно инициализация SPI у atmega328 (как, впрочем и у других) (0<<CPOL).
3. Режим SPI - т.н. "mode 1". CPOL = 0, CPHA = 1 (установка данных нарастающим фронтом, выборка падающим фронтом). За нюансами в даташит....
4. Пришлось прицепить 200 pf на линию SCKL-такта почти у самой ножки АЦП (после резистора 470 Ом, резисторы стоят также на линиях CS, RDY, DIN, DOUT - так вроде правильнее). Т.к. на осциллограмме были иголки по фронту тактов SCKL до 800 милливольт. Щупы осциллографа скомпенсированы (осцил TDS2014B). Из-за этого были выбросы и АЦП просто так сказать "дурел" и иногда шел просто "мусор", а не полезные данные. Хотя это "нюанс" шины SPI в целом, а не конкретно этого АЦП. Но именно AD7730 так чувствительно реагирует на это.
5. Когда нужно, не забывать сбрасывать АЦП посылом 32 "1".
6. Плата 2-х сторонняя (ЛУТ). Нижний слой - земляной. Разведено с разделением "земель". И вообщем-то ориентировался на схематику и плату из шита "Evaluation Board for AD7730L Transducer ADC".
7. Мост тензометрический на 40 кг. 6 мВ. 4-х проводной. Запитал по AC-схеме. Драйвер TC4427 + IFR7905. На осциллограмме сигнал красивый.
8. Питание от USB (контроллер и АЦП). Ферритовые кольца на USB-шнуре (шнур фирменный, от epson года 2004-го.)
9. Поэкспериментировал с фильтрами. Остановился на 57 Гц. (нуль фильтр). Хотя, надо бы правильнее брать что-то из диапазона, что бы и работу ШИМ БП компьютера срезать.

p/s/
Могу осциллограммы скинуть "основных" моментов работы с АЦП.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.