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

 
 
 
Reply to this topicStart new topic
> ADC10_A в режиме Repeat-Sequence-of-Channels, MSP430F5510
usercod
сообщение Feb 17 2012, 07:13
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Добрый день!

В User-guide на стр. 533 рис. 23-9. показана работа АЦП10 в режиме Repeat-Sequence-of-Channels. Допустим, АЦП10 обрабатывает 2 канала, А0 и А1. Интересует как обрабатывается прерывание при ADC10_A conversion is completed
когда
ADC10MSC = 1;
ADC10SHP = 1;
ADC10ENC = 1;

Go to the top of the page
 
+Quote Post
Psych
сообщение Feb 17 2012, 11:42
Сообщение #2


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

Группа: Участник
Сообщений: 88
Регистрация: 5-03-11
Пользователь №: 63 410



Прерывание генерируется при каждом готовом результате. Лучше в дополнении к этому использовать DTC.
Go to the top of the page
 
+Quote Post
usercod
сообщение Feb 17 2012, 17:33
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Цитата
Прерывание генерируется при каждом готовом результате


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

Цитата
Лучше в дополнении к этому использовать DTC

У этого АЦП нет DTC, но в кристалле есть DMA. Хотя вопрос не в этом.
Go to the top of the page
 
+Quote Post
rezident
сообщение Feb 17 2012, 23:00
Сообщение #4


Гуру
******

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



Цитата(usercod @ Feb 17 2012, 12:13) *
Интересует как обрабатывается прерывание при ADC10_A conversion is completed
Обработка прерывания (функция обработки прерывания) это задача программиста. Как напишите, так и будет. Аппаратура АЦП только лишь формирует запрос прерывания в соответствии с описанными условиями.
Цитата
The ADC10IFG0 bit is set when the ADC10MEM0 memory register is loaded with the conversion result.
An Interrupt request is generated if ADC10IE0 bit and the GIE bit are set. The ADC10OV condition occurs
when a conversion result is written to the ADC10MEM0 before its previous conversion result was read.
The ADC10TOV condition is generated when another sample-and-conversion is requested before the
current conversion is completed. The DMA is triggered after each conversion.

С другой стороны посудите сами логически - вот готов результат преобразования, куда его АЦП должен девать, если другого места кроме ADC10MEM0 для него не предусмотрено? А запись в ADC10MEM0 приводит к установке флага ADC10IFG0 и если разрешено прерывания, то к вызову его обработчика. Так что прерывание будет возникать на каждое преобразование.
Цитата(usercod @ Feb 17 2012, 22:33) *
Если было бы все так просто, я бы не спрашивал. Под отладкой я вижу, что в прерывании содержание регистра результата преобразования, меняется на значение для другого канала.
А вы надеялись что-то иное увидеть? АЦП работает независимо от ядра, поэтому с учетом выбранного вами режима работы АЦП и задержек обновления регистров в окне дебаггера вы можете увидеть в окне значение любого из преобразований, вне зависимости от вашего желания. Можете убедиться в этом, проверив значение флагов переполнения ADC10OVIFG. Если хочется определенности, то реализуйте "программные триггеры" и смотрите результаты преобразования во временных переменных, используемых для них.
Go to the top of the page
 
+Quote Post
usercod
сообщение Feb 19 2012, 04:36
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



rezident, спасибо. Все работает.
Go to the top of the page
 
+Quote Post
usercod
сообщение Mar 14 2012, 14:44
Сообщение #6


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Запустил АЦП10, работает два канала A0 и А1. Результат канала А1 накапливаю, а потом усредняю. Заметил одну странность, во-первых, никогда не получал результат 512 (АЦП 10бит).Опора внешняя - 2.5В, подстроечный резистор на середину и смотрю на усредненные значения. Довожу значения до 511, все нормально, но как только должен появиться результат 512, АЦП начинает сыпать данные = 512 +-50. Во времени это выглядит как шум с постоянкой 1.25В. После - 513, 514 все опять нормально, как и должно быть. Резистор менял, не в нем дело.

Что происходит с АЦП на середине диапазона? Кто-нибудь что-то подобное видел?
Go to the top of the page
 
+Quote Post
usercod
сообщение Mar 15 2012, 11:03
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Удивительно! Взял два подстроечных резистора (один 2кОм, другой 100 Ом) соединил последовательно для более плавной регулировки. Довел до 511 -нормально
Прикрепленное изображение
,
далее плавной регулировкой подвел до следующего значения, где должно быть 512, а там это -(руда)
Прикрепленное изображение

кручу дальше 513 -все нормально
Прикрепленное изображение
.

Как раскрутить? Кто работал с подобным АЦП, отпишитесь в середине диапазона нормально себя вел АЦП или нет?
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 16 2012, 18:34
Сообщение #8


Гуру
******

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



А у вас конденсатор на входе стоит? Приведите схему подключения, включая питание и опору. Все-таки 2кОм это довольно высокое выходное сопротивление для источника сигнала, который измеряют АЦП типа SAR.
См. Determining Minimum Acquisition Times for SAR ADCs When a DC Voltage is Applied to the Input
Go to the top of the page
 
+Quote Post
usercod
сообщение Mar 17 2012, 20:14
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Конденсатор на входе АЦП 1uF. Аналоговое и цифровое питание на микроконтроллере развязаны через LC цепь, согласно рекомендациям. Все стандартно. Я думаю, что эта проблема все же не связана с внешней обвязкой, потому что до и после значения АЦП-512 все нормально. Я надеюсь, что это моя ошибка при инициализации АЦП, а не проблема MSP.
Go to the top of the page
 
+Quote Post
usercod
сообщение Mar 19 2012, 12:14
Сообщение #10


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Начну по порядку:

Все тот же режим, Repeat-sequence-of-channels.

Схема:
(Уточнение, на вход А1 заведен сигнал, через такую же цепь как и на А0). Вместо резистора 1кОм, подстроечный резистор 2кОм на входе А1.
Прикрепленное изображение


Мне удалось немного уменьшить колебания на середине диапазона, баги в инициализации, но тем не менее они остались.
Привожу рисунок только проблемного участка, т.к на всех остальных- все нормально

рис.1 unsigned
Прикрепленное изображение


рис.2 signed
Прикрепленное изображение



Частота кварца 10МГц.

Далее, сомнению также подвергается и инициализация АЦП, а потому вот она:
CODE

//********************************* ADC_10 **************************************
P6SEL |= BIT0 + BIT1; // Enable A/D channel A0 and A1
ADC10CTL0 = ADC10ON + ADC10SHT_4 + ADC10MSC;

// ADC10ON - ADC10_A on;
// ADC10SHT_8 - ADC10_A sample-and-hold time (256 * 1/5MHz*4) ~200uS
// ADC10MSC - ADC10_A multiple sample and conversion.


ADC10CTL1 = ADC10SHP + ADC10CONSEQ_3 + ADC10SSEL_2 + ADC10DIV_1;

// /*
// ADC10CONSEQ_3 - Repeat-sequence-of-channels
// ADC10SSEL_2 - MCLK
// ADC10DIV_1 - Divide by 2
// ADC10ISSH = 0 - The sample-input signal is not inverted.
// ADC10SHP - SAMPCON signal is sourced from the sampling timer.
// ADC10SHS_0 - ADC10_A sample-and-hold source select (ADC10SC bit)


ADC10CTL2 = ADC10RES;

// ADC10SR - ADC10_A buffer supports up to ~50 ksps.
// ADC10DF = 0 - Binary unsigned format of result
// ADC10RES - 10 bit (12 clock cycle conversion time)
// ADC10PDIV_0 - ADC10 predivider /1


ADC10MCTL0 = 0x01 + ADC10SREF_3; // Two chanell are enabled A0 and A1 + DC10SREF_3 - VR+ = VEREF+ and VR- = AVSS

ADC10IE = 0x01; // Enable ADC10IFG.0

ADC10CTL0 |= ADC10ENC; // Enable conversions



Вопрос по userguide.

на стр. 524.(slau208i), написано:
Цитата
12 individually configurable external input channels

где они?
Go to the top of the page
 
+Quote Post
usercod
сообщение Mar 21 2012, 13:35
Сообщение #11


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Пробовал менять режим работы АЦП на одиночный однократный и повторяющийся. результат один и тот же.
Также заметил, что это проблема связана не только с серединой диапазона 512. К примеру, на 128 бьет тоже, но поменьше, такого же рода проблемы и на 64, но на этом значении это явление можно принять за шум, так как выбивает всего 1 бит.

Установил резистор на середину, должно быть 512. В прерывании поставил такое условие:

Код

temp = ADC10MEM0;
     if(temp > 512)
          {Synch_1;}
     if(temp < 511)
          {Synch_0;}

Под отладкой смотрю что выдает АЦП. Так вот результаты бывают просто необъяснимые: 0xFF, 0x300, 0x3FF а иногда и 0x00!

Честно говоря, у меня уже кончились идеи.

Сообщение отредактировал usercod - Mar 21 2012, 13:39
Go to the top of the page
 
+Quote Post
rezident
сообщение Mar 22 2012, 08:20
Сообщение #12


Гуру
******

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



Цитата(usercod @ Mar 19 2012, 17:14) *
Вопрос по userguide.

на стр. 524.(slau208i), написано:

где они?

А никто и не обещал вывести все каналы в малоногом кристалле. Банально не хватает пинов для вывода всех альтернативных функций всех модулей.

Цитата(usercod @ Mar 21 2012, 18:35) *
Честно говоря, у меня уже кончились идеи.

За то время, что вы боретесь с описанным багом уже можно было изучить всю документацию вдоль и поперек. В Erratasheet на страничке продукта ваша проблема описана на стр. 19 под именем ADC31. Программный медианный фильтр должен несколько облегчить вашу участь.
Так, что выходит ваш баг и не баг вовсе, а документированная фича. Ибо "баг, описанный в документации, становится фичей" biggrin.gif
Go to the top of the page
 
+Quote Post
usercod
сообщение Mar 22 2012, 10:50
Сообщение #13


Участник
*

Группа: Участник
Сообщений: 62
Регистрация: 8-10-11
Пользователь №: 67 612



Нашел уже. Xотел написать что в SLAZ059J описан этот процесс и вопрос снят, но Вы меня опередили, эх, если бы немного раньше на 2-3 дня.
Тем не менее, уважаемый rezident, спасибо за ответ. Насколько я могу судить, т.к. я новичок на этой ветке, Вы, к сожалению, единственный, кто отвечает на вопросы как тому подобает инженерная этика (ИМХО).

Сообщение отредактировал usercod - Mar 22 2012, 11:00
Go to the top of the page
 
+Quote Post

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

 


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


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