реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> ADC12 в MSP430F247 - не заканчивается преобразование
SanvaldYV
сообщение Oct 28 2008, 10:46
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 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 не снимается (по ЮзерМануалу он только для чтения, т.е. сбрасывать его руками вроде как не нужно...).

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

П.С. АCLK пашет, от него работает один таймер, и пробовал выводить наружу аппаратно через Р5.6 (ACLK), смотрел осциллом - все нормально.
Go to the top of the page
 
+Quote Post
VAI
сообщение Oct 28 2008, 12:34
Сообщение #2


Профессионал
*****

Группа: Модераторы
Сообщений: 1 120
Регистрация: 17-06-04
Пользователь №: 37



в даташите fADC12CLK минимальная 0.45 МГц. Может задействовать "Internal ADC12 oscillator" ?
Или я что-о путаю?


--------------------
Если зайца бить, его можно и спички научить зажигать
Сколько дурака не бей - умнее не будет. Зато опытнее
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Oct 28 2008, 13:03
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 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". Ничего не изменилось.
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 28 2008, 14:22
Сообщение #4


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Бит SHP в ADC12CTL1 установите. В противном случае преобразование спадающим фронтом сигнала ADC12SC запускается.
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Oct 28 2008, 15:04
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 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."
05.gif
Go to the top of the page
 
+Quote Post
rezident
сообщение Oct 28 2008, 15:12
Сообщение #6


Гуру
******

Группа: Свой
Сообщений: 10 920
Регистрация: 5-04-05
Пользователь №: 3 882



Цитата(Юрий Санвальд @ Oct 28 2008, 20:04) *
Не понял на счет SHP-бита, он же выбирает кто будет запускать преобразование:
Читайте внимательнее раздел User's Guide, посвещенный описанию работы ADC12. Ну и пояснительным картинкам тоже внимайте wink.gif
Если бит SHP не установлен, то вам нужно программно сформировать оба фронта сигнала SAMPCON установкой/сбросом бита ADC12SC. Если же вы, установив SHP, выберите таймер сэмплирования в качестве сигнала, формирующего SAMPCON, то фронт ADC12SC запустит этот таймер. И таймер сэмплирования в свою очередь сам сформирует сигнал SAMPCON, отмерив время для выборки и запустив преобразование.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 28 2008, 15:14
Сообщение #7


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Юрий Санвальд @ 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.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Oct 28 2008, 15:36
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



rezident , Сергей Борщ

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

a14.gif
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Oct 28 2008, 17:01
Сообщение #9


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Юрий Санвальд @ Oct 28 2008, 18:36) *
Я почему то решил что для запуска единичного преобразования достаточно установить бит начала преобразования, после чего после сэмплирования автоматом начнется преобразование.
Так и будет, если вы установите SHP. И ADC12SC сбросится автоматически.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Slash
сообщение Aug 14 2009, 12:18
Сообщение #10


Местный
***

Группа: Участник
Сообщений: 202
Регистрация: 10-04-05
Из: Санкт-Петербург
Пользователь №: 4 011



Сняв бит SHP, мы можем сами устанавливать время сэмплирования, я правильно понял?
Что полезного из этого можно получить, как-то увеличить точность АЦП?
Go to the top of the page
 
+Quote Post
SanvaldYV
сообщение Aug 19 2009, 09:45
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 21-03-07
Из: Санкт-Петербург
Пользователь №: 26 371



Цитата(Slash @ Aug 14 2009, 16:18) *
Сняв бит SHP, мы можем сами устанавливать время сэмплирования, я правильно понял?

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

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

Затрудняюсь сказать каким образом...
Единственный вариант как это можно использовать, который приходит в голову - если есть необходимость максимально синхронизироваться с каким то внешним прерыванием - т.е. выбираем нужный канал, пока нет прерывания идет переключение, в прерывании сами инвертируем ADC12SC и начинается преобразование.
Go to the top of the page
 
+Quote Post
Сергей Борщ
сообщение Aug 19 2009, 10:29
Сообщение #12


Гуру
******

Группа: Модераторы
Сообщений: 8 455
Регистрация: 15-05-06
Из: Рига, Латвия
Пользователь №: 17 095



Цитата(Slash @ Aug 14 2009, 15:18) *
Что полезного из этого можно получить, как-то увеличить точность АЦП?
Например, сделав время выборки ровно N*20мс, подавить сетевую наводку 50 Гц.


--------------------
На любой вопрос даю любой ответ
"Write code that is guaranteed to work, not code that doesn’t seem to break" (C++ FAQ)
Go to the top of the page
 
+Quote Post
Slash
сообщение Aug 19 2009, 16:10
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 202
Регистрация: 10-04-05
Из: Санкт-Петербург
Пользователь №: 4 011



Спасибо!
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 5th July 2025 - 09:41
Рейтинг@Mail.ru


Страница сгенерированна за 0.01469 секунд с 7
ELECTRONIX ©2004-2016