|
|
  |
ADC12 в MSP430F247 - не заканчивается преобразование |
|
|
|
Oct 28 2008, 10:46
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Всем доброго времени суток. Появилась необходимость задействовать внутренний АЦП, для измерения сигнала на одном канале - А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 не снимается (по ЮзерМануалу он только для чтения, т.е. сбрасывать его руками вроде как не нужно...). Может кто заметит какой нибудь косяк? П.С. АCLK пашет, от него работает один таймер, и пробовал выводить наружу аппаратно через Р5.6 (ACLK), смотрел осциллом - все нормально.
|
|
|
|
|
Oct 28 2008, 13:03
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(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". Ничего не изменилось.
|
|
|
|
|
Oct 28 2008, 15:04
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(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."
|
|
|
|
|
Oct 28 2008, 15:12
|
Гуру
     
Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882

|
Цитата(Юрий Санвальд @ Oct 28 2008, 20:04)  Не понял на счет SHP-бита, он же выбирает кто будет запускать преобразование: Читайте внимательнее раздел User's Guide, посвещенный описанию работы ADC12. Ну и пояснительным картинкам тоже внимайте  Если бит SHP не установлен, то вам нужно программно сформировать оба фронта сигнала SAMPCON установкой/сбросом бита ADC12SC. Если же вы, установив SHP, выберите таймер сэмплирования в качестве сигнала, формирующего SAMPCON, то фронт ADC12SC запустит этот таймер. И таймер сэмплирования в свою очередь сам сформирует сигнал SAMPCON, отмерив время для выборки и запустив преобразование.
Эскизы прикрепленных изображений
|
|
|
|
|
Oct 28 2008, 15:36
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
rezident , Сергей БорщСпасибо! Я почему то решил что для запуска единичного преобразования достаточно установить бит начала преобразования, после чего после сэмплирования автоматом начнется преобразование. Ушел читать мануал
|
|
|
|
|
Aug 19 2009, 09:45
|
Частый гость
 
Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371

|
Цитата(Slash @ Aug 14 2009, 16:18)  Сняв бит SHP, мы можем сами устанавливать время сэмплирования, я правильно понял? Когда он установлен мы тоже можем сами задавать время сэмплирования с помощью таймера сэмплирования, но только определенными значениями - 4,8,...,1024 циклов ADC12CLK. Если эти времена сэмплирования по каким то причинам не устраивают, тогда можно самому отмерять сколько времени тратить на переключение. Цитата(Slash @ Aug 14 2009, 16:18)  Что полезного из этого можно получить, как-то увеличить точность АЦП? Затрудняюсь сказать каким образом... Единственный вариант как это можно использовать, который приходит в голову - если есть необходимость максимально синхронизироваться с каким то внешним прерыванием - т.е. выбираем нужный канал, пока нет прерывания идет переключение, в прерывании сами инвертируем ADC12SC и начинается преобразование.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|