Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: ADC12 в MSP430F247 - не заканчивается преобразование
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > MSP430
SanvaldYV
Всем доброго времени суток.

Появилась необходимость задействовать внутренний АЦП, для измерения сигнала на одном канале - А3 (Р6.3), запуск вручную битом "ADC12SC". Вроде бы все просто. Но где то по видимому допустил ошибку, потому что после запуска преобразования бит "ADC12BUSY" в регистре "ADC12CTL1" устанавливается и... стоит. Т.е. sample-and-conversion начинается, но не заканчивается.
Вот код инициализации АЦП:
Код
  ADC12CTL0 = 0;
  ADC12CTL1 = 0;
  ADC12IE = 0;

   // ножку подключим к АЦП (ADC_SEL_PORT - P6SEL, A3_I1 - 3)
  ADC_SEL_PORT |= A3_I1;

  // АЦП включен, опора внутренняя - 1.5В
  ADC12CTL0 = SHT0_0|SHT1_0|REFON|ADC12ON;
  // клоки - от АCLK (38400)
  ADC12CTL1 = CSTARTADD_0|ADC12SSEL_1;

  // VR+ = VREF+ and VR-- = AVSS
  ADC12MCTL0 = SREF_1 | INCH_3 | EOS;

  // прерывания не нужны
  ADC12IE = 0;
  ADC12IFG = 0;


а вот так выглядит запуск преобразования:
Код
  ADC12CTL0 |= ENC|ADC12SC;
  __no_operation();__no_operation();__no_operation();__no_operation();
  
  while ( ADC12CTL1 & ADC12BUSY ) __no_operation();


В "ADC12CTL1" ADC12BUSY не снимается (по ЮзерМануалу он только для чтения, т.е. сбрасывать его руками вроде как не нужно...).

Может кто заметит какой нибудь косяк? wacko.gif

П.С. АCLK пашет, от него работает один таймер, и пробовал выводить наружу аппаратно через Р5.6 (ACLK), смотрел осциллом - все нормально.
VAI
в даташите fADC12CLK минимальная 0.45 МГц. Может задействовать "Internal ADC12 oscillator" ?
Или я что-о путаю?
SanvaldYV
Цитата(VAI @ Oct 28 2008, 16:34) *
в даташите fADC12CLK минимальная 0.45 МГц. Может задействовать "Internal ADC12 oscillator" ?
Или я что-о путаю?


Да, я в даташите это видел, но я так понял, что это как раз и есть частота "Internal ADC12 oscillator", потому что в ЮзерМануале написано:
"The ADC12OSC, generated internally, is in the 5-MHz range, but varies with individual devices, supply voltage, and temperature. See the device-specific datasheet for the ADC12OSC specification."
Я решил что это он так может "плавать", но для эксперимента пробовал разные варианты - MCLK (от DCO 8МГЦ) и этот самый "Internal ADC12 oscillator". Ничего не изменилось.
rezident
Бит SHP в ADC12CTL1 установите. В противном случае преобразование спадающим фронтом сигнала ADC12SC запускается.
SanvaldYV
Цитата(rezident @ Oct 28 2008, 18:22) *
Бит SHP в ADC12CTL1 установите. В противном случае преобразование спадающим фронтом сигнала ADC12SC запускается.


Не понял на счет SHP-бита, он же выбирает кто будет запускать преобразование:
"This bit selects the source of the sampling signal (SAMPCON) to be either the output of the sampling timer or
the sample-input signal directly."

Может быть вы имели ввиду бит ISSH :
"0 The sample-input signal is not inverted,
1 The sample-input signal is inverted."
05.gif
rezident
Цитата(Юрий Санвальд @ Oct 28 2008, 20:04) *
Не понял на счет SHP-бита, он же выбирает кто будет запускать преобразование:
Читайте внимательнее раздел User's Guide, посвещенный описанию работы ADC12. Ну и пояснительным картинкам тоже внимайте wink.gif
Если бит SHP не установлен, то вам нужно программно сформировать оба фронта сигнала SAMPCON установкой/сбросом бита ADC12SC. Если же вы, установив SHP, выберите таймер сэмплирования в качестве сигнала, формирующего SAMPCON, то фронт ADC12SC запустит этот таймер. И таймер сэмплирования в свою очередь сам сформирует сигнал SAMPCON, отмерив время для выборки и запустив преобразование.
Сергей Борщ
Цитата(Юрий Санвальд @ Oct 28 2008, 18:04) *
Не понял на счет SHP-бита, он же выбирает кто будет запускать преобразование:
"This bit selects the source of the sampling signal (SAMPCON) to be either the output of the sampling timer or
the sample-input signal directly."
sample-input signal - это сигнал, по которому запускается преобразование. В вашем случае, это сигнал ADC12SC = 1. Т.е. пока вы не сбросите ADC12SC у вас будет sample, а после сброса - convert.
SanvaldYV
rezident , Сергей Борщ

Спасибо!
Я почему то решил что для запуска единичного преобразования достаточно установить бит начала преобразования, после чего после сэмплирования автоматом начнется преобразование.
Ушел читать мануалsmile.gif

a14.gif
Сергей Борщ
Цитата(Юрий Санвальд @ Oct 28 2008, 18:36) *
Я почему то решил что для запуска единичного преобразования достаточно установить бит начала преобразования, после чего после сэмплирования автоматом начнется преобразование.
Так и будет, если вы установите SHP. И ADC12SC сбросится автоматически.
Slash
Сняв бит SHP, мы можем сами устанавливать время сэмплирования, я правильно понял?
Что полезного из этого можно получить, как-то увеличить точность АЦП?
SanvaldYV
Цитата(Slash @ Aug 14 2009, 16:18) *
Сняв бит SHP, мы можем сами устанавливать время сэмплирования, я правильно понял?

Когда он установлен мы тоже можем сами задавать время сэмплирования с помощью таймера сэмплирования, но только определенными значениями - 4,8,...,1024 циклов ADC12CLK. Если эти времена сэмплирования по каким то причинам не устраивают, тогда можно самому отмерять сколько времени тратить на переключение.

Цитата(Slash @ Aug 14 2009, 16:18) *
Что полезного из этого можно получить, как-то увеличить точность АЦП?

Затрудняюсь сказать каким образом...
Единственный вариант как это можно использовать, который приходит в голову - если есть необходимость максимально синхронизироваться с каким то внешним прерыванием - т.е. выбираем нужный канал, пока нет прерывания идет переключение, в прерывании сами инвертируем ADC12SC и начинается преобразование.
Сергей Борщ
Цитата(Slash @ Aug 14 2009, 15:18) *
Что полезного из этого можно получить, как-то увеличить точность АЦП?
Например, сделав время выборки ровно N*20мс, подавить сетевую наводку 50 Гц.
Slash
Спасибо!
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.