Перейти к содержанию
    

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

 

P.S. Один ньюанс. После переподключения к порту А сначала забыл настроить выводы порта А. До этого они были в Hi-Z. В принципе, это ни на что не должно повлиять. Но все-таки...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Осцилографа нет. Но тестер показывает на DRDY напряжение питания (+3.021В). Хотя по идее после включения питания там должен быть 0. АЦП включен по схеме с биполярным возбуждением моста (см. даташит).

 

Сейчас иду за феном для выпаивания... Или будут другие предложения?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Вы считаете, что проблема в резисторах? Но DRDY в любом случае должен быть в ноле после ресета. Или я ошибаюсь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мне кажется, что после включения питания АЦП не сбрасывается. Хотя 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 из даташита?

AD7714.rar

AD7730_7730L.rar

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Попробуйте отключить выход,может лог 1 идет извне.RDY логический выход.спользуется как выход состояния и в режиме преобразования и в режимкалибровки.в режиме преобразования рду переводится в низкое состояние когда новое выходное слово поступает в регистр данных.....если данные не читаются,то рду возвращается в высокое состояние до следующего цикла чтения.Это из моего справочника.Возможно вы не отлавливаете первый ноль.И попробуйте вручную подать лог 0 на сброс.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нашел в чем проблема. Как всегда, ошибка в монтаже. Вывод SYNC у меня был посажен на землю. И по даташиту, он как раз и удерживает всю аналоговую периферию АЦП в состоянии сброса и соответственно, вывод RDY в высоком состоянии. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Просветите про 2К куда вы их втыкаете и зачем

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

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

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

 

Как говорят у нас на Украине:""Не говори Гоп, поки не перескочиш". Блин, все равно после сброса вывод RDY не сбрасывается в :07: . Вот мой пример:

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. Резисторы - ни при чем. Пробовал подключать выводы АЦП к мк напрямую. Тот же эффект. Не хочется даже думать о том, что микросхема сдохла. В чем же дело?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Блин. Были перепутаны выводы DIN и DOUT и полярность SCLK ! Поменял. Все равно не работает :( В связи с этим вопрос: можно литаким образом повредить АЦП? Хотя у меня же последовательно были включены резисторы 2кОм.

 

Обязательно ли ставить емкости на MCLKIN, MCLKOUT ? Если нужны, то какой емкости? Кварц 2.4576 МГц. В даташите сказано, что емкости выводов 5 и 13 пФ достаточно, и они в большинстве случаем не нужны. Может в этом проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А осцилограф не можете достать? Я думаю многое бы прояснилось. Во-первых сразу видно генерит кварц или нет. В принципе, мультиметр должен показывать от 1..3.5 В, что косвенно свидетельствует о генерации.

Именно с этим АЦП не работал, но работал с аналогичным от TI (насколько могу понять).

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

Если Вы занимаетесь аналоговой техникой, то без осцилографа никуда, Советую достать.

 

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

 

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

 

А DRDY точно настроен на вход, а то из программы не видно?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Вот цитата из AN-406:

Включение устройства -

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

Повторяю вопрос. Сразу после включения надо ли ждать готовности DRDY? Или АЦП сбросит его в ноль только после инициализации его регистров? Может ошибка в программах записи? Хотя они у меня работали с AD7714. Добавил только еще один аргумент, чтобы можно было записывать данные разной длины.

Напомню, напряжение питания +3В. Аналоговое напряжение : +2.5В ... -2.5В. POL - на земле. SYNC - на +3В. Поставил на кварце по 22пФ. Тестер показывает на выводах кварца +1.3В.

Могло ли АЦП выйти из строя после перепайки феном? Время воздействия ~ 5...10 сек.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Выловил еще одну ошибку. В процедурах записи/чтения в/из регистра АЦП : reglength надо указывать не 8,15 или24 , а 7, 15, 23. Т.е. положение бита в регистре. Но все равно вывод RDY висит в единице, хоть ты тресни :help: Может будут еще какие идеи, предложения?

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Интересно, чем история закончилась...столкнулся с аналогичной проблемой.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...